探検


Docker

■ このスレッドは過去ログ倉庫に格納されています
1login:Penguin
垢版 |
2013/07/27(土) NY:AN:NY.ANID:5oaw2wHS
LXCを使った軽量仮想環境。
これからの動向が気になるところ。
情報共有しましょう。

http://www.docker.io/
2015/10/13(火) 11:50:02.13ID:BCg4uyN8
DockerfileにVolumeを記載したときの動作がわからないです。
これを記載すると、docker run したときに-vのオプションをつけたときと同じ動作をするのでしょうか?
2015/10/13(火) 13:02:47.52ID:2bxl+1jz
>>233
いいえ。DockerfileのVOLUMEは単にディレクトリを作るだけと考えてください。

例えばmountコマンドで/mnt/hoge/にマウントしようと思ってもできません。
先にマウントポイントとなる/mnt/hoge/ディレクトリを作成しておく必要があります。


VOLUMEは、-vオプションでマウントするためのディレクトリ作成するだけです。
2015/10/15(木) 22:43:15.99ID:oWwvB8WD
>>234
なるほど。
そういう用途なんですね。
理解しました。
2015/11/01(日) 23:01:14.46ID:DTpkP9+s
なんかWS2016TP3のイメージダウンロードで失敗して
Docker起動すらできないのだが・・・
237login:Penguin
垢版 |
2015/11/16(月) 00:01:59.72ID:TCRyhBgQ
docker インスコしたら、なぜかgitがアンインスコされてマジギレなんだが
docker作者いたらぶん殴ってやりてえわ
何考えてるんだ基地害、マジで死ね
238login:Penguin
垢版 |
2015/11/16(月) 00:07:18.42ID:TCRyhBgQ
ちなWinだが
嫌がらせなのか
gitconfigも消えやがった
マジで損害賠償モンだぞゴミ野郎が
何なんだマジで、インストーラーに選択肢にも出てなかったgitの文字が出てきて嫌な予感がしたが
まさかアンインスコしてわけわからんgitもどきのゴミぶちこまれるとは
スパイウェアかよ、ありえない
239login:Penguin
垢版 |
2015/11/16(月) 00:46:43.61ID:TCRyhBgQ
1時間無駄にした
俺様の睡眠時間削るとは何様だよゴミの分際で
マジで死ね、勝手に人様の環境のgit削除して入れ直すとかどう考えても頭イカレてんだろ基地害
頭にウンコでもつまってるのかこのゴミみたいなインストら−作ったゴミ屑は
ISISに爆殺されて死ねや
2015/11/16(月) 03:39:30.80ID:PizeY0Hj
※実際には消えたのではなくて、追加で新しくmsys環境がインストールされ
パスが変わっただけである。
2015/11/16(月) 17:04:57.06ID:Pim+KGtu
ダメなんだろ。
向いてないね。
2015/11/16(月) 23:41:14.31ID:wDTTYcC+
Windowsみたいなゴミ使うからそうなる
2015/11/17(火) 00:02:19.34ID:kVN6LZUq
どっかに行ってしまったんだろうね
2015/11/17(火) 03:36:53.23ID:v9AakB0o
それをOSやDockerのせいにするのは無能
2015/11/24(火) 22:42:14.80ID:Lg6NMP0d
コンテナ起動して一個だけコマンド実行して終わったら
コンテナさよならってのはできませんか?
246login:Penguin
垢版 |
2015/11/25(水) 00:31:43.24ID:LQnsNDdn
できる
247login:Penguin
垢版 |
2015/11/25(水) 02:08:58.52ID:mat+Pl5x
手動でgccのAndroid向けクロスコンパイル環境を作ろうとしてるんだけど、もううまくいかないやー
Dockerにその用途に向いたコンテナないかな?
2015/11/25(水) 02:12:33.97ID:zaXwxH/w
Dockerは

1. 可能か不可能か・・・可能だ
2. 以前より簡単にできる ・・・ YES
3. 簡単にできる ・・・ NO
4. ハマる・・・YES

だからなw
2015/11/25(水) 02:37:47.64ID:LhiOzJQ6
え、Androidビルド環境なんかで悩むところあるか?
250login:Penguin
垢版 |
2015/11/25(水) 04:00:08.86ID:mat+Pl5x
>>249
Makefileが手書きのLinux向けフリーウエアをビルドしようとしていて、Makefileをいじっても環境変数をいじってもなかなか通らなくてね
ちゃんと自分でMakefileを修正できていないのが原因なんだろうけど、他も自信がないから環境が整ってるところでやってみたいかな
2015/11/25(水) 06:55:10.59ID:M90w7+cT
>>246
よかったらヒント教えていただけると助かります

もし自分で辿りつけたらフィードバックしますね
2015/11/25(水) 07:57:51.37ID:wgCCBiJ/
「docker 起動」
「docker 停止 削除」で検索!
2015/11/25(水) 07:57:59.67ID:IVCbtPIf
シェルスクリプトにdocker runとdocker rm書けばいいだけだろ
2015/11/25(水) 12:05:44.17ID:r7zQvSyI
単一のコマンドをコンテナで実行するだけならLXCでいいじゃん
2015/11/25(水) 14:19:33.50ID:zaXwxH/w
>>254
> 単一のコマンドをコンテナで実行するだけならLXCでいいじゃん
めんどくせーだろw

dockerはパッケージでインストールするとして、インストールだけが終わった状態から、
たったこれだけで単一のコマンドをコンテナで実行できるんだぞw

docker run debian /bin/bash --version

もちろんdebianの所を変えれば、その他のコンテナで実行できる。
LXCで同じことをやってみてくださいよw
2015/11/28(土) 16:06:27.14ID:+I8cfRbK
docker使おうとしてdocker run コンテナ
ってやってもsyntax errorとか出て何一つ動かない
試したのはfedora,ubuntu,busybox,gccあたり
環境はFedora23 i686
XeleronM410 メモリ512MB
2015/11/28(土) 16:06:50.89ID:+I8cfRbK
ミスった・・・Celeronね
2015/11/28(土) 16:16:33.06ID:K8JL7Kv3
command not foundではなく、syntax errorとでるのなら、
dockerはインストールされているのだろう?
docker --versionってやってみて。
2015/11/28(土) 16:21:57.23ID:+I8cfRbK
Docker version 1.8.2-fc23, build 1a57647-dirty
ダウンロードとかは普通にできるんだけどいざ動かそうとするとうんともすんとも言わない
エラーはこんな感じ
exec format error
Error response from daemon: Cannot start container 602972c2cf599bd4702de17c25e64d7608fbc7fbc74c128ca789baad53e0852b: [8] System error: exec format error
2015/11/28(土) 19:24:46.52ID:qcsZcvMp
32bitだからでは
2015/11/28(土) 22:24:27.09ID:+I8cfRbK
やっぱり?
32bitダメなのかー
2015/12/01(火) 22:17:34.89ID:vj0rtqe5
Docker hubでよくわからんのだけど、
公式でないものは、危険な可能性があるってことでいいの?

AUTOMATED BUILDに関しては、リポジトリが表示されているから
おそらく大丈夫なのだろうと思うけど(でも工夫すれば抜け道ありそう・・・)
そうでないものは、どのDockerfileから生成したか?の情報ないよね?
263login:Penguin
垢版 |
2015/12/01(火) 22:19:35.90ID:vj0rtqe5
追記、AUTOMATED BUILDの抜け道思いついた。

ソースリポジトリは表示されているけど、
タグを複数つけた時、Dockerfileは何故か一つしか表示されてないみたい。

これを利用すると別のディレクトリで作って、
あたかもこれで作ったみたいな見せ方ができそう。
2015/12/02(水) 01:06:23.58ID:yHXiRRuF
何する気だよw
2015/12/02(水) 01:12:44.60ID:fBZbBnC4
>>264
例えばMySQLを高度に最適化したイメージを作った
ふりをして、データを抜くコンテナを作るとか
266login:Penguin
垢版 |
2015/12/05(土) 21:29:10.50ID:DbjOOkdc
Dockerの使い方を勉強したいんだけど
どこのサイトを見ても、docker.ioをインストールした後から
の手順が急にぼんやりした説明になっている

xeyesをdocker上で動かすとか
そういう分かりやすいサンプルはないの?
2015/12/05(土) 21:53:43.55ID:ZQvx7q75
何のためにつかうんだ?
2015/12/05(土) 22:06:49.30ID:3slPYBxt
docker上の話は普通にやればいいだけだろ
2015/12/05(土) 22:18:39.92ID:OQhknF+K
docker pull ubuntu
docker run -i -t ubuntu /bin/bash
切り替わったらaptでもつかって好きにいじればいい
量産したかったらそのコンテナを登録して増やす
2015/12/05(土) 22:24:50.93ID:Qru2npJS
なんかまたDockerを仮想マシンと考えてる奴ができてそうだな。
2015/12/05(土) 23:59:37.74ID:mw+GgCtN
コンテナをLinux仮想マシン扱いすること自体はいいんでない。意外とそういうところから面白い使い道が発見されるのかもよ
2015/12/06(日) 00:21:48.56ID:R8UOG4wt
コンテナを仮想マシンとして使うのは、OpenVZが昔からあるから
それを使えばいいんだよ。

DockerはOpenVZではないものとして作られているんだから、
OpenVZ的な使い方をするには合わない。
2015/12/06(日) 06:54:30.81ID:T+hWh7FJ
>>266
docker xeyesでググればxeyesをつかったサンプルがいくつかあるが。
それじゃ不満?
2015/12/06(日) 09:43:36.04ID:JSGNm6l4
ググるなんて能力あるわけ無いだろやめてやれよ
2015/12/06(日) 12:22:08.41ID:eaBf0NRP
キーワードまで教えてもらってぐぐれないなんてことないだろ
2015/12/06(日) 12:27:38.04ID:JSGNm6l4
ここにキーワードがあるじゃろ




・・・・・・
2015/12/06(日) 12:29:25.59ID:vcXMHOAt
xeyesをdocker上で動かす方法のググり方を教えて下さい
↓
docker xeyes でぐぐる
↓
ありがとうございました。
2015/12/06(日) 16:16:44.13ID:Dtmq+qVc
もしかして: docker lxc
2015/12/06(日) 16:24:24.91ID:JSGNm6l4
32bit対応してくれねーかなー
2015/12/06(日) 17:36:39.91ID:vcXMHOAt
無料のLinuxで32bit対応が欲しいという理由は
ハードウェアが対応してないからだと思うが、
新しいパソコンを買ったほうが良いと思うよ。

OSなしでいいんだから3千円台+送料ぐらいから買える
http://kakaku.com/used/pc/ca=0010/?s2=10
2015/12/06(日) 17:43:01.76ID:17qexjBL
わざわざ32bit限定でdockerが必要なケースがあるのか?
2015/12/06(日) 17:45:06.31ID:xA5mMjua
仕事でそれしか支給されてないとかw
流石にそんな会社はないか
2015/12/06(日) 17:49:20.29ID:JSGNm6l4
>>280
hostapdでWiFiAP使えないと困るからノートになるじゃん
でノートで3000円だと2007年くらいのになってi686しかつかえない
>>281
俺の鯖で動かない
大学受かったら新しい鯖買う予定だけどそれまでは無理
WiFiは〜Piにして鯖と分ければいいんだろうけどね
2015/12/06(日) 18:07:08.39ID:vcXMHOAt
>>283
家かなんかでサーバー機として常時稼働させていればいい
あんたが今使っているノートからログインして使うんだよ。
2015/12/06(日) 18:11:36.33ID:JSGNm6l4
>>284
ちがう
自宅の常時稼働鯖がノートじゃないとアクセスポイントにできないって話
で金もない
2015/12/06(日) 18:12:13.76ID:vcXMHOAt
あとレンタルサーバーでVPSを借りるって手もあるな。

だが大学入試があるなら、遊んでないで勉強しとけ。
2015/12/06(日) 18:13:56.18ID:JSGNm6l4
>>286
すいませんね勉強に戻ります
カナダに一回払いで買った鯖あるけどローカルでも動かしたい時があるのよ
2015/12/06(日) 18:13:57.06ID:vcXMHOAt
>>285
だからなんだ?と思うだけだが、
新しくPC買って、そのノートから直結するなり
ハブ経由で接続すればよかろう?
2015/12/07(月) 00:32:53.51ID:X7UYFgeA
ラズパイでdockerとかアリでしょ?
環境ぶった切ったり
IP毎にサービス割振りしてるよ
OH少なくて助かってる
2015/12/07(月) 01:02:16.76ID:C2nK3tfF
へー、ラズパイでDocker動いたのか。
ARMだからパッケージ少ないし対応してないと思ってたよ。
基本技術はコンテナだからOSレベルで対応してるのかな。

http://dev.classmethod.jp/hardware/docker-on-raspberry-pi2/
> 結論から言うと動きます。が、実用的ではないです。それは、
> DockerコンテナはDockerホストと同じCPUアーキテクチャでないと動作しないからです
291login:Penguin
垢版 |
2015/12/10(木) 16:03:59.52ID:jHmIwzhB
docker はchrootみたいなものなの?
docker動いている最中に ホストからファイル見れたりする?
2015/12/10(木) 16:06:29.45ID:710xIGyw
ググれば全部出てるぞ
日本語訳されてるであろうArchwikiでも読んでこい
293login:Penguin
垢版 |
2016/01/12(火) 12:32:49.44ID:3vUodtEW
OS イメージをベースにして Docker コンテナを作るメリットって、
ホストOS に縛られずにコンテナを配置できるって理解であってる?

ただ、サーバーのメモリやストレージの節約を考えると
ホスト OS は決め打ちにして、コンテナには OS イメージを含めない方がいいと思うけどどうなの?
実際の運用でもサーバーごとに OS やバージョンが異なるなんてことはないはずだしね。
294293
垢版 |
2016/01/12(火) 13:57:44.54ID:3vUodtEW
ごめんなさい。すぞい勘違いをしていました。

DockerHub に登録されてる Dockerfile を見ていて気がついたのですが、
Docker イメージは、基本的に何らかの OS イメージをベースにして作るんですね。

FROM scratch となってるものもいくつかありましたが、
FROM を遡っていくとほとんどが何らかの OS イメージをベースにしていました。
2016/01/12(火) 14:01:15.29ID:7BqknXNc
OSのイメージはDebianで100MBを切る。
Alpine Linuxならわずか5MBだ

コンテナは仮想マシンじゃない。だからホストOSのカーネルを使用する。
コンテナで起動したアプリ以外の、各種デーモンも起動しない。
だからメモリ使用量もアプリを直接動かすのと大差ない。

つまりサーバーのメモリやストレージの節約は考える必要が無い。

実際の運用ではサーバーごとに OS やバージョンが異なる。
アップデートをすることで日々更新され続けるからだ。
LinuxのLTS(長期サポート)なんて5年しかない
2016/01/12(火) 14:03:45.85ID:8K/vPWgV
>>293
ホストに縛られないというかコンテナをコピーするだけでそのまま実行環境を別のホストに移せる
あと1つのホストに複数の実行環境を構築できる
これらは従来のVMでも出来ることだけどまるまる1台分を仮想化するのと違ってリソースをより効率よく使うことができる
2016/01/12(火) 14:28:49.52ID:7BqknXNc
Dockerを仮想マシンの一種として考えてしまうとインフラよりの発想となってしまう。
これではDockerがもてはやされている理由を理解できない。
Dockerはアプリ開発者の立場で考えるとわかる。

まず(ホスト)OSのアップデートで勝手にライブラリのバージョンが
変わってしまうと困る。例えばRubyのライブラリを勝手に
アップデートされたらアプリが動かなくなる可能性がある。

また、逆にディストリが提供しているパッケージよりも新しいバージョンの
ライブラリを使いたいこともある。1つのホストに複数のアプリを実行する時
アプリごとに使うバージョンを変えたいこともある。
だからアプリ開発者はディストリのパッケージでインストールするライブラリは使わない。
rbenvなどを使ってアプリの一部としてアプリごとにインストールする。
(注 Dockerを使えばrbenvを使う必要はない)

これはRubyライブラリだけの話に限らない。ネイティブライブラリやCLIコマンドなど
アプリから使用するあらゆるものはアプリ独自に入れたい。

アプリはアプリだけで動くのではない。動的リンクライブラリやCLIコマンドまで含めて
1つの動作するアプリとして完全体となる。つまりアプリとアプリを正しく動かすのに
必要なものを含めた完全体がコンテナ。コンテナさえあればアプリは完全に動くので、
ホストOSはDockerさえ動けば良くなる。

これがDockerを使う目的なのだから、その目的を達成できない方法はそもそも代替案にはならない。
ホストOSのリソースの効率化とかそういう話じゃないんだよ。
298293
垢版 |
2016/01/12(火) 17:02:16.51ID:3vUodtEW
>>295

ただ、DockerHub で配布されてる centos:6.7 に
yum install git すると image size が 190.6 MB → 323.3 MB
yum groupinstall "Development Tools" などとすると image size が 190.6 MB → 693.9 MB

となり、やはりストレージは食うのかなと。

根本的に使い方が間違っているのかもしれませんが、
通常は git とか コンパイラはコンテナに含めないのでしょうか?
299293
垢版 |
2016/01/12(火) 17:20:35.11ID:3vUodtEW
>>297

> アプリはアプリだけで動くのではない。動的リンクライブラリやCLIコマンドまで含めて
> 1つの動作するアプリとして完全体となる。つまりアプリとアプリを正しく動かすのに
> 必要なものを含めた完全体がコンテナ。

なるほど参考になります。

コンテナ =
Ruby で言うところの( 例にあげて頂いた rbenv というよりは)bundler とか、
Node.js の npm (のローカルインストール) の延長で、
OS のストレージにあるものすべて(動的リンクライブラリやCLIコマンドなども含む)を
1つのアプリ環境としてパッケージできるもの

という理解で落ち着きました。
2016/01/12(火) 17:43:43.68ID:7BqknXNc
>>298
> 通常は git とか コンパイラはコンテナに含めないのでしょうか?
含めない。

もちろんコンテナイメージ作成中は適当にやっていいし、
利便性を考えて入れておくのもありだけど、

例えばgitを使ってソースコードを配置したいなら、
RUN apt-get install git & git clone 〜 & apt-get remove git (例なので適当)
のようにしてgitを入れて必要な処理が終わったら削除する。

(注 1つのRUNでインストールとアンインストールを実行すること。
複数に分けると、それぞれで中間イメージが保存されるのでサイズが減らない)
301293
垢版 |
2016/01/12(火) 19:52:14.22ID:n7gMyE/1
> RUN apt-get install git & git clone 〜 & apt-get remove git (例なので適当)
> のようにしてgitを入れて必要な処理が終わったら削除する。
>(注 1つのRUNでインストールとアンインストールを実行すること。
> 複数に分けると、それぞれで中間イメージが保存されるのでサイズが減らない)

確かにおっしゃる通りになりましたが、「複数に分けると〜」のところは
なぜサイズが変わらないのかいまいち理解できません。
2016/01/12(火) 21:18:29.95ID:7BqknXNc
コマンドごとにセーブしてるからだよ
2016/01/12(火) 22:36:34.99ID:xuCrxskR
都度gitインストールってapt転送分の無駄を感じるな。gitならまだいいけどそれにしても美しくない
ローカル制御細かくやるしかないか
2016/01/12(火) 22:49:08.57ID:JXXd0jyb
だからapt用のキャッシュプロキシというものがあって
だけどその環境依存の設定をDockerfileに書きたくないから
ビルド時にオプションで環境変数を使えるようにしてくれって
話がついて1.9からサポートされた
2016/01/12(火) 22:57:32.90ID:xuCrxskR
寡聞でしたすみません
306login:Penguin
垢版 |
2016/01/14(木) 00:38:43.01ID:Zfk+gNVQ
Docker の質問というより、ヴァーチャルマシンに関する質問だと思うんですが質問させてください。

Windows で Docker から環境を作ったのはいいんですけど、
そのなかのソースコードとかって Windows からアクセスできないんですかね?
いまひとつ開発のスタイルがよくわかりません。

まさかとは思いますが、仮想環境の中にIDEをインストールしてそこで開発とかでしょうか?
よろしくお願いします。
2016/01/14(木) 01:34:52.00ID:iMJyCnKY
>>306
Dockerの中で動かしつつアプリを開発するのはやめたほうがいいよ。
デバッグ用のツールなど使いづらくなって、単に面倒になるだけ。
Docker使わずに作られたアプリ。それを動かす環境を作る時に
Dockerを使うってだけにした方がいい。

もう少し詳細に説明すると、まずWindows(boot2docker)で考えるとややこしくなるので、
ホストOSにLinuxを使っていると仮定する。

開発はDockerを使わない。IDEはLinuxにインストールする。
これだと何も複雑なことはないよね?これをメインの開発環境とする方がいい。

開発時にはDockerを使わないといったけど、テストを実行すときとか実機でDockerを使うとして、
リリース時とできるだけ同じ状態にしたいとかDockerの中だけで発生する問題とか、
開発時にDockerを使いたい時もある。

そういう時は、ソースコードのディレクトリをData volume(dockerの-vオプション)で
コンテナ内にマウントする。ビルドが必要な物(scssからcssへの変換等)は
Dockerの外でビルドしてそのディレクトリをマウントする。

ただしビルドで生成するものがバイナリ実行ファイル等の場合は、ホストOSとDockerコンテナで
使うOSが違いすぎると動かない可能性があるので、Dockerコンテナでビルドする必要がある。
本来Dockerコンテナにはビルドツール等は入れるものではない。本来はビルドするときは
>>300で書いたようにビルドツールを入れてビルドしてビルドツールを消すことになる。

apt用のキャッシュプロキシでパッケージのダウンロードは避けられるとはいえ、
ビルドのたびにパッケージのインストールとか時間的にやってなれないので、
(実行用のDockerイメージとは別の)ビルドをするためのDockerイメージを作る必要がある。

な? Dockerを開発時に使うことは出来なくはないし、テスト実行のために出来たほうがいいんだけど
面倒で手間がかかる。だから通常の開発はホストOSでやった方がいいんだ。
ホストOSがWindowsの場合は、vagrantで作ったLinuxで開発するのをおすすめする。
2016/01/14(木) 01:56:53.36ID:iMJyCnKY
話をWindowsに戻すと、おそらくDocker Toolbox(に含まれるboot2docker仮想マシン)か
boot2dockerを使ってるだろう。これはVirtualboxの仮想イメージなので更にややこしいw

俺としてはvagrantで作ったLinuxで開発するのをおすすめする。
Linuxで開発すると言ってもCLIコマンドを実行する程度。
samba使ってファイル共有すれば、ソースコードの修正はWindowsのエディタが使える。
Windowsに入れたIDEを使う場合は、デバッグ機能に多少制限が出るかもしれないので
俺はやってないけど、XクライアントをWindowsに入れて、Linux用のIDEを
使うとかのほうがいいかもしれない。

で、結局の所、開発時にはDocker使わない方がいいので、Windowsで
開発したいなら今までどおりDocker関係なく、Windowsで開発すればいい。

そしてWindowsで開発したアプリをDockerで動かしたい場合だけど、
boot2dockerの中は結局のところLinuxなので>>307の話が通用するとして、
問題はWindowsのソースコードをどうやってboot2dockerから参照するか?

一番簡単なのは、Virtualboxの共有フォルダー機能を使う方法だろう。
(ぶっちゃけboot2docker使ってないのでそこまで詳しくない)

注意が必要なのは、Virtualboxの共有フォルダー機能を使うと、最終的には
Windowsのファイルを見てるわけだから、パーミッション周りで苦労するのと
シンボリックリンクが使えない(頑張れば使える?)などの問題が発生する。

なのでWindows+boot2dockerでの開発はやっぱりお薦めしないw
boot2dockerは、dockerコンテナを動かして。たいけど、ホストOSがWindowsで
Linuxが無いんだよ。って言う時に、おいWindowsでもdockerコンテナ動くぜwww
これなら、dockerイメージさえあれば、どこでも同じように動く、
それがたとえWindowsであっても(キリッ ってやりたい時だけに使うものだと思ってる。
2016/01/14(木) 02:19:39.58ID:iMJyCnKY
で、長々と書いたが、Dockerを使うことで、

(ウェブ)アプリを開発する → それを動かす環境を作るのが面倒
っていう時代から、

環境まで含めた(ウェブ)アプリ を開発できる → それを動かすのは簡単!
という時代になったわけだけど、

アプリの開発自体は、今までのやり方のままでいいってこと。

今Windowsを使ってるなら、Windowsでいいし、
俺はvagrantを使って作ったLinuxの開発環境を使ってる。

実機へのデプロイやテスト等で動かすときにDockerを使うことで
同じ実行環境を簡単に作れるから "追加で" Dockerへの対応をするといい。


余談だが、
今までは、アプリエンジニアとインフラエンジニアが分かれていて、
アプリを動かす環境を作成する部分はインフラエンジニアが担当していたから、
その連携が大変でどうたらとかDevOptsとかいう言葉が出てきたりしたけど、
Docker出現で実行環境づくりがインフラエンジニアからアプリエンジニアに移ってきてるんだよ。
アプリエンジニアは大変(笑)というかインフラエンジニアの仕事が減って、クラウドを使えば
さらにコードでインフラかけるから、この2つを分ける必要ないよね?ってなってきてると思ってる。
2016/01/14(木) 02:31:50.07ID:iMJyCnKY
追記

> 一番簡単なのは、Virtualboxの共有フォルダー機能を使う方法だろう。
Virtualboxの共有フォルダーは遅いという問題もある。

やり方は他にもgitでリポジトリからソースコードを持ってきたり、
結局はソースコードさえあればいいのだからNFSを使って
共有したりする方法もある。

DockerコンテナもData volumeを使わずに、git cloneしたり。
(実機で使うDockerイメージは、イメージ作成時にgit cloneするべきだろう)

git cloneするということは、(開発中の)ソースコードが
リポジトリにpushされている必要があるね。

とまあ、できるにはできるけど、開発中にDockerを使いつつ作業するのは面倒なだけ。
でもDockerで動くようにしていれば、gitリポジトリにソースコードをpushした時に
CIでDocker使ってテストを実行するなんてことができるようになる。
2016/01/14(木) 13:53:14.85ID:QrS0BeKx
なげーよ
2016/01/14(木) 14:16:32.94ID:GYrwUcVN
>>311
だから?
313306
垢版 |
2016/01/15(金) 00:07:27.60ID:K3C/Pi7v
>>307-310
すごく参考になりました。
わからないことも多いですが、ざっくりと雰囲気はつかめました。
右も左もわからず暗中模索してましたが少し霧が晴れた感じです。
いただいたレスをよく読み返して学習の指針とさせていただきます。
ありがとうございました。
314293
垢版 |
2016/01/15(金) 01:08:34.20ID:kfmWKxvv
>>307-310

質問者と同じく開発スタイルで迷っていたので参考になりました。

> ただしビルドで生成するものがバイナリ実行ファイル等の場合は、ホストOSとDockerコンテナで
> 使うOSが違いすぎると動かない可能性があるので、Dockerコンテナでビルドする必要がある。

ただ、これに関してはホスト OS と Docker コンテナで使う OS を同じにすればいいと思うので
ホスト OS でビルドして、Docker コンテナにはコンパイラなどのビルド環境を入れないように
してもいいかなと思ってます。
315293
垢版 |
2016/01/15(金) 01:14:51.11ID:kfmWKxvv
boot2docker は罠ですね。

docker-machine create する場合も、Docker ホストは自動的に boot2docker になりますが、
ここを任意の OS に切り替えられると話が早そうです。
2016/01/15(金) 01:30:22.80ID:eyDykv1a
>>314
理屈上はそうなんだけどね。

でもそうすると、ホストで開発しやすいOSを使う=コンテナも同じものに
制限されてしまうので、分けるほうが好ましい。

Dockerイメージのサイズを減らすためにAlpine Linuxを使いたいし、
開発ではホストOSにUbuntuを使っていても、awsで動かすときは
CoreOSを使うかもしれないし、柔軟に変更可能にするためにも分離さておいたほうがいい。

まあ別に開発中であれば自己責任で適当に使っていいと思うよ。
アプリ開発のためのインフラとしてDockerを使って開発環境を整備するんじゃなくて
開発作業の一貫としてDockerというツールを使うという使い方。
Dockerの中で開発するのは面倒なだけだからさ。
(あくまで ”アプリ開発" スタイルの話。インフラ・運用の話ではない)
2016/01/15(金) 01:40:21.56ID:eyDykv1a
>>315
boot2dockerは、アプリ開発者がWindowsで開発している時に
Dockerを簡単に使うためのものではなくて、

アプリは完成したものとして、そのアプリを動かしたい時に
ホストがWindowsの場合に使う手段だと思ったほうがいいよ。

わざわざWindowsをサーバーに使う人は居ないだろうから
実運用向きではなく、Docker自体の勉強で使うときとか、
Windows上にDockerコンテナでサービスを動かしてそのサービスを
個人的に使うのを目的とするとか。
(例えばHTML Validatorをローカルで動かすとか)
318293
垢版 |
2016/01/15(金) 02:16:23.93ID:kfmWKxvv
> Dockerイメージのサイズを減らすためにAlpine Linuxを使いたいし、
> 開発ではホストOSにUbuntuを使っていても、awsで動かすときは
> CoreOSを使うかもしれないし、柔軟に変更可能にするためにも分離さておいたほうがいい。

なるほど。そういう観点ですね。
だとすると以下の引用のようにビルド用のイメージを作るってことになると思いますが、

> ビルドのたびにパッケージのインストールとか時間的にやってなれないので、
> (実行用のDockerイメージとは別の)ビルドをするためのDockerイメージを作る必要がある。

この場合、ホスト OS とビルド用の Docker コンテナは -v でフォルダ共有してから対象ファイルをビルド。
そして、実行用のコンテナを作る際には、ホスト OS から (実行用コンテナに)ビルド済みバイナリを ADD すればいいということですね。
2016/01/15(金) 02:49:11.46ID:eyDykv1a
>>318
なので、基本的にアプリ開発中はDockerを使わない。
で、どうしても必要だと思ったときは使うけど・・・
うーん、その場合はいくつかやり方が考えられるんだけど、どれも一長一短

・docker buildでビルドする
完全に動くDockerイメージを作る途中で、ビルドも行う方法。
ビルドツールは入れて消すのでサイズも小さいし実運用でも使える。
だけど毎回ビルドツール入れるので時間がかかる。

・docker buildでビルドする(その2)
サイズは諦めてビルドツールを入れたイメージからイメージを作る。
サイズは最小にはならないが、それが問題になることは少ないだろうから一番楽かも

・実行用イメージとビルド用イメージを分ける
>>318で書いてあるやり方ね。実行用イメージは小さくて実運用でも使え
ビルドの時間も少なくなるけど、作るのが面倒くさい。
ビルド済みファイルを受け渡しする方法を作らないといけないし、
特にフレームワークがビルドとかもしてくれる仕組みだと
なんか二度手間感がある

・docker runした時にビルドする。
必然的にビルド環境も含めたイメージになる。
ファイル更新時に自動的にビルドしてくれるようなフレームワークを
使っている場合、この方が便利かもしれない。テストも実行できるし、
実運用用は別で作ることになるだろう。

ちゃんと作るならおそらく3番目が良さそうではあるけど、開発にとって便利か?
って考えると4番目かなーとも思うけど、そこまでやるのが面倒なので
開発中はDocker使わんでいいやんって思ってるわけ。
2016/01/15(金) 02:59:40.17ID:eyDykv1a
一つのDockerfileで開発にもデバッグにもテストにも実運用にも使える
万能な方法があればいいんだけど、

そういやテスト実行環境っていうのもあるんだよね。

実行環境は、実行出来るだけで良い。
デバッグは、最低限デバッグモードで起動できればいいから、その場合は実行環境用と
共通化できるがデバッグのためのツールを入れるならば、追加でなにか必要。
ビルド環境は、ビルドツールが必要。
テスト実行環境は、実行環境に加えてテスト用ライブラリやツールが必要


やっぱり、それぞれわけないとだめだよなーっていうのが現時点の俺の結論。
321293
垢版 |
2016/01/15(金) 03:24:51.98ID:kfmWKxvv
> なので、基本的にアプリ開発中はDockerを使わない。

まあ結局そういうことですね。今のところは運用環境として割り切って使っていこうと思います。
諸々のノウハウありがとうございました。
2016/01/15(金) 04:04:45.21ID:eyDykv1a
>>321
使わないと言っても、開発の終盤っていうか、区切りがいい時点で
実環境をDockerにしているとして、それと同じ環境でテストを
実行したいって場合には使うけどね。

ただ無理して開発時までDocker使いまくるのはちょっと違うかなーって思う。

あー、そうそう例えばウェブアプリを開発していて、データベースとして
MySQLを使う場合に、ホストOSに直接入れるんじゃなくてDocker使っていれる。
なんて使い方はするよ。
323293
垢版 |
2016/01/16(土) 17:27:47.46ID:Pwu81H6k
自分の場合、開発をアプリごとに新規で立ち上げた VirtualBox(Vagrant) のゲスト OS 内で
やっているので、DB を含むアプリで使うミドルウエアは ゲスト OS に入れることにしてます。

今のところ Docker の使いどころは、リモート環境へ配布するときに Vagrant 内で
Docker イメージを作ってそのままデプロイできるってあたりかなと思ってます。
2016/01/16(土) 21:15:11.68ID:Xjp5rZQ7
>>323
> 自分の場合、開発をアプリごとに新規で立ち上げた VirtualBox(Vagrant) のゲスト OS 内で
> やっているので、DB を含むアプリで使うミドルウエアは ゲスト OS に入れることにしてます。
俺もそんな感じ。

スレ違いだけど、これをやると幾つもの仮想マシンにソースコードが分散してしまうのと、
仮想マシンをアップデートするときに、いくつもメンテナンス作業(再プロビジョンは時間がかかる)が
必要だったり、ベースとなるboxファイルを更新しても、既存の仮想マシンはそれを使うわけじゃないし
消してから作りなおせばいいんだけど、仮想マシン上にあるソースコード、全部コミットしたっけ?
消してよかったっけ?とかなって、まだ満足していない。
ホームディレクトリの設定も仮想マシン毎に必要になるし。
常に最新の開発環境が、素早く使えればいいんだけどな。

> 今のところ Docker の使いどころは、リモート環境へ配布するときに Vagrant 内で
> Docker イメージを作ってそのままデプロイできるってあたりかなと思ってます。
ミドルウェアに使うのも便利だよ。例えばいろんなバージョンのMySQLでテストするとか。
2016/01/17(日) 17:02:11.92ID:6EWsUrMI
仮想マシンじゃなくてchroot環境のすごい版てことか
2016/01/17(日) 19:52:53.44ID:oRpvIOkb
>>325
その通り。

OpenVZいうコンテナ技術を使ってKVMのような仮想マシンを
つくり上げるソフトウェアがあるが、これとは考え方が
違うということに注意する。

chrootが特定のプロセスだけのルートディレクトリを変更するのと同じように
Dockerが作るものは、特定のプロセス(のように見える物)であって
マシンを作っているわけではない。
2016/01/18(月) 00:00:56.97ID:n4Yuq225
じゃあGUIアプリを動かすのは
Dockerじゃうまくイカないんだな
X飛ばすしかないもんな
2016/01/18(月) 00:11:34.46ID:Va23OUxH
>>327
普通に出来てるぞ。これとか

http://fabiorehm.com/blog/2014/09/11/running-gui-apps-with-docker/

Xはクライアント・サーバーモデルなのでウェブアプリと
同じようにXアプリとしてネットワーク通信経由で動くよ。


たぶんあんたはGUIのログイン画面とかあってVNCで接続するようなものを
イメージしているのだろうけど、そもそもそれは仮想マシン的使い方であって
Dockerの本来想定する使い方じゃない。

とは言えvncserverとか入れれば出来ないことはないんじゃね?
デスクトップ環境全体を一つのアプリとして考えるという、
ChromeでOS作りましたみたいな話になるけどw
2016/01/23(土) 19:47:10.30ID:nusVPIhl
>>328
ホストは64bit環境だけど
32bitライブラリじゃないと動かないアプリがあるので
Dockerで閉じ込めたい と思っただけ

chrootだとXつかうのに 結構手間かかったけど
Dockerでもやっぱゴチャゴチャするんだな
2016/01/23(土) 19:48:40.27ID:nusVPIhl
まあ地味にもっと面倒くさいのは 音を出す方なんだよな
2016/01/25(月) 06:04:46.99ID:QR7uXNOZ
上でdllヘルがどうとかあったけどwinなら実行ホルダにdll突っ込んどけば避けられるんだよな
ハードリンク使えば容量も食わない
Linuxもようやく追いついたということか
2016/01/25(月) 11:38:08.74ID:1yX7na1L
dockerの実際の運用例の解説とかでオススメの書籍はありませんか?
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況