探検


Docker

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

http://www.docker.io/
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の実際の運用例の解説とかでオススメの書籍はありませんか?
2016/01/25(月) 11:44:36.02ID:F1RCk+6X
>>331
釣れると良いですねぇ
2016/01/28(木) 00:35:44.16ID:ZO4AyjLz
>>332
運用例ならネットの方が百花繚乱では。採用事例とか書籍になるころには古くなってるようなもんだし
2016/01/29(金) 01:55:58.13ID:Ca6DG0PI
Docker内でファイルを書いたり消したりを繰り返すと
容量が増えていくんだけど回避策ないの?
2016/01/29(金) 02:10:27.50ID:KbwU3dID
>>335
Dockerの使い方が間違っている可能性が高い。
基本的に追加することはあっても消さない。
2016/01/29(金) 02:46:01.98ID:Ca6DG0PI
>>336
使ってるWebFrameworkがファイルアップロードするとテンポラリとしてファイルに落としてから処理してんだよね。
この方がメモリの使用量が少ないので、こんな仕組みは多いと思うけど。
使い方間違っているというか一般的な問題かなと。
2016/01/29(金) 02:55:12.78ID:PTVigO0v
それテンポラリのファイルを消してないだけじゃないの?
2016/01/29(金) 02:56:24.83ID:PTVigO0v
使用容量はどうやって調べたの?
2016/01/29(金) 18:16:20.40ID:qb7fRlD6
>>336
マジで?
仮想環境的に使うものじゃないの?
増えたり減ったりするファイルはどうするの?
nfsとかするの?
2016/01/29(金) 19:13:57.48ID:Q/BmfN/g
データ用のコンテナ作るかホストの領域をバインドする
2016/01/29(金) 23:40:58.64ID:t1XsAtII
>>337が書かないから調べてみたが、削除したらデータ増えない。
watch -n 1 df -m しつつ下を実行。

・作成して削除・・・増えない
docker run -i -t busybox /bin/sh -c 'while true; do dd if=/dev/urandom of=/tmp/a bs=1M count=1; rm /tmp/a; done'

・作成する・・・当然増え続ける。
docker run -i -t busybox /bin/sh -c 'while true; do dd if=/dev/urandom of=$(mktemp) bs=1M count=1; done'
2016/01/29(金) 23:44:46.04ID:t1XsAtII
>>340
何度も言ってるけどDockerは仮想環境じゃない。アプリを作るもの。
アプリ+それを動かすのに必要なサーバーやライブラリなどを
一つにまとめて、単体のアプリのようにするもの。

アプリのバイナリの中にデータ追加していかないだろ?
それと同じで完成したコンテナの中にデータは追加しない。
追加するときは>>341が言ってるようにコンテナの外に保存する。
2016/01/30(土) 11:54:55.45ID:kynGF1uZ
じゃあ便利なchroot環境としては使えないの?
2016/01/30(土) 13:19:57.16ID:e72evDrr
>>344
別に使えなくはないけど、そういう使い方を目的として作られたものじゃない。

まずchrootは単なる技術。ルートディレクトリを変えるだけの技術。
基本技術だからいろんな応用ができるもの。
その技術を使って特定の用途に最適化されたものがDocker。

せっかく、特定の用途(アプリケーションコンテナ)に最適化されてるのに、
それを捨てるならDockerを使う意味は無いし、
想定された用途以外に使うなら無理やりな使い方になるから、
逆に使いにくいだけだよ。
2016/01/30(土) 14:03:49.86ID:kynGF1uZ
dockerの中でマウントしたら
外でマウントしたことがわかる?
2016/02/04(木) 15:38:08.01ID:iuBl6bkU
永続化がよく分からなくて試行錯誤してたけど
Dockerfile内にvolumeが指定されてるとコンテナを作るときに--volumeで明示的に指定しないと
/var/lib/docker/volumesの中にランダムな名前のディレクトリがコンテナを作る度に増えていく
コンテナが残ってればdocker inspect CONTAINERで分かるけど削除してしまった場合どうやって整理すればいいの?

>>335の言ってる増え続けるってこれのことなんじゃないの?
2016/02/04(木) 16:11:59.92ID:iuBl6bkU
ああvolumeをdockerの管理下に置きつつ任意の名前にしたい場合は
docker volume create --name hoge
して
docker create -v /var/lib/docker/volumes/hoge:/hoge image
にすればいいのか

あとデータ用のコンテナを作ってる例が多いんだけど
これって複数のコンテナから参照する場合だけ?
1つのコンテナからだけ参照する場合は上記のようにボリュームを作るだけでいいのかな
2016/02/04(木) 16:23:53.70ID:iuBl6bkU
連投すまん
整理する方法は見つけた
https://hub.docker.com/r/martin/docker-cleanup-volumes/
2016/02/04(木) 17:11:16.17ID:/xEaNWkP
あー、docker volumeってこんなんなんだ。
alpha版(?)のdocker-volumesの方が分かりやすかったな。

> コンテナが残ってればdocker inspect CONTAINERで分かるけど削除してしまった場合どうやって整理すればいいの?
docker volume ls -f dangling=true で調べられるみたいだよ。
一気に消したい時はお馴染みのアレだね。

> 1つのコンテナからだけ参照する場合は上記のようにボリュームを作るだけでいいのかな
というかそれが「コンテナでボリュームをあつかう」という一番シンプルな事例の話だと思う。

1つのボリュームを複数のコンテナから共有したい。という要求があった時に
ボリュームは複数のコンテナからマウントできないから、
データ用のコンテナを作ってコンテナの方を参照するってめんどくさい話がでてくる。

例えて言うのならUSB-HDDを複数のPCに同時に接続できないから、
専用のPCに接続して、ネットワーク経由で参照するみたいな感じなわけだけど。
2016/02/04(木) 17:15:56.03ID:/xEaNWkP
>>349
それは・・・多分、docker volume実装前に作られたやつかな。
ソースコードざっと見ただけだけどファイルを直接消してるみたい。
きっとdocker volumeよりかは便利なのだと思うけど、内部を直接触ってる。


リポジトリ見に行ったらお馴染みのアレ書いてあった。
> Note about Docker 1.9 and up
>
> To delete orphaned volumes in Docker 1.9 and up you can also use the built-in docker
> volume commands instead of this docker-cleanup-volumes script. The built-in
> command also deletes any directory in /var/lib/docker/volumes that is not a
> volume so make sure you didn't put anything in there you want to save:
> List:
>
> $ docker volume ls -qf dangling=true
> Cleanup:
>
> $ docker volume rm $(docker volume ls -qf dangling=true)
2016/02/04(木) 17:25:03.63ID:iuBl6bkU
なるほどサンクス

あとごめんいちいちvolume create しなくても
docker create -v hoge:/hoge image
でよかった
なんか最初やったとき上手くいかなかった気がするけど今やったら普通に出来た
353login:Penguin
垢版 |
2016/02/05(金) 10:18:06.27ID:AMUaaeIw
docker 1.10.0 リリース
2016/02/07(日) 15:16:37.68ID:NrxI4Bcf
(´・ω・`)rktってどう
2016/02/07(日) 15:30:00.80ID:7zZax8el
もう選ぶ理由ないだろ?
356login:Penguin
垢版 |
2016/02/09(火) 14:52:35.39ID:F7e+9kDP
>>322
なぜ?
2016/02/09(火) 15:01:20.39ID:UQcUg7rD
rktを作った理由=Dockerの問題点はもう解決済み
2016/02/11(木) 11:43:25.48ID:lG1SDKP9
これからはrkt
2016/02/11(木) 15:04:38.89ID:5V/FrhsK
dockerでインストールしたプログラムを
ホスト側で実行してるようにみせることはできる?
■ このスレッドは過去ログ倉庫に格納されています

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