Docker Part2©2ch.net

1login:Penguin 転載ダメ©2ch.net2017/09/28(木) 14:00:45.18ID:/4TtIqGt
LXCを使った軽量仮想環境。
これからの動向が気になるところ。
情報共有しましょう。

http://www.docker.io/

前スレ
Docker
http://mao.2ch.net/test/read.cgi/linux/1374861492/

474login:Penguin2018/11/07(水) 00:52:45.66ID:v7o9U8jP
>>473
なんでソースのコンパイルなんて話が出てくるのかわからん

Dockerのコンテナはsystemctl start serviceから起動する必要はない
通常はDockerそのものがsystemctl start serviceで起動するようになってるから
Dockerでサービスが起動するコンテナを作ってあとはDockerに
OS起動時に、そのコンテナを起動してもらえばいいだけ

どうしても特定のDockerコンテナだけsystemdで制御したければ、
dockerコマンドを実行するserviceファイル書けばいいだけだが

> privilegeを与えて、yumで開発環境投入して、
???
意味がわからんが、Dockerの中に入って開発しようとしてないか?
systemctlコマンドを使うのは、もちろんDockerコンテナの外だよな?
通常はDockerコンテナの中で、systemdなんか使わないからな

Dockerの中に開発環境入れて、Dockerの中で開発なんてことはしねーからな
そういうのは仮想マシンとかシステムコンテナでやれ
Dockerのようなアプリケーションコンテナを仮想マシンとかして使うな。
無理やり使おうとしたその結果が、お前のその「どうやればわからない」という状況なんだからな

475login:Penguin2018/11/07(水) 00:57:39.50ID:JZV5z18S
>>474
レスありがとうございます。

>Dockerでサービスが起動するコンテナを作ってあとはDockerに
>OS起動時に、そのコンテナを起動してもらえばいいだけ

ソースで提供されているプログラムをDockerコンテナで使いたい場合、
具体的にどうすればいいでしょうか。

コンテナに入ってから、
コンパイルすることしか想像できない初心者です。

476login:Penguin2018/11/07(水) 01:11:12.42ID:v7o9U8jP
>>475
Dockerfileを使ってビルドするんだよ

コンテナの中に入るのは、ビルドがおかしいが原因がよくわからないとかで
調査するため。手作業でコンパイルとかしない

単純にDockerコンテナ内でビルドすると時間がかかったりイメージサイズが膨れ上がったり
するから工夫が必要なんだが、とりあえずそれは置いといて、一番単純な方法だ。

まずDockerfielを書く。Dockerfileには基本的に次のようなことを書く

・FROMでどのディストリをベースにしたイメージを作るのかを書く
・RUN(RUN yum〜とか)でイメージの中にコンパイルをするのに必要なパッケージを入れていく
・ソースコードをコンテナの中に配置する
 (コンテナの外にあるソースをコピーしたりgitでcloneしたり、場合によってはボリュームを使う)
・プログラムをビルドする
・ビルドされたプログラムを起動するためのCMDやENTRYPOINTを書く

これで、ソースコードからビルドしたプログラムが入った
Dockerイメージが出来上がる。


あとは、dockerコマンドやdocker-composeなどでこれらを起動すれば良い

477login:Penguin2018/11/07(水) 01:21:22.84ID:v7o9U8jP
>>476で書いたように、単純な方法を取ると、
アプリを起動するのに必要ないビルドツールのせいで
イメージサイズが大きく膨れ上がる。

レイヤー(例えばRUN)毎に差分が保存されるため
ビルドが終わってから削除してもイメージサイズは減らない

(一つのRUNの中ですべてを行う方法があるが、
キャッシュも使われなくなるのでイメージのビルド時間が伸びる)

こういう場合に使うのが multi stage build

アプリを使うためには、アプリの実行ファイル(とランタイム環境)さえあればよいので、
ソースコードから実行ファイルを作る所までをビルド専用イメージで行う
そしてその実行ファイルをコピーして使う別のイメージ(ビルドツールなし)を作るという方法

478login:Penguin2018/11/07(水) 01:21:25.66ID:JZV5z18S
>>476
丁寧なレスをいただき、感謝いたします。
ありがとうございます。しかし、疑問が///

環境構築は手探りではダメで、
ビルドなどを含む全ての環境構築手順を、
スクリプト化できていないとダメなようですね。

Dockerfileでも、yumコマンドが扱われていることから、
ログインしてビルドコマンドを手打して動作確認するという従来の方法と比べて、
何が本質的に違うのかなと素朴に疑問です。

どうしてわざわざ、Dockerイメージづくりを自動化しなければいけないのですか。
できたイメージはtarで持ち運ぶつもりでいます。

479login:Penguin2018/11/07(水) 01:25:02.67ID:JZV5z18S
>>477
脹れ上がりですね。
>ビルドが終わってから削除してもイメージサイズは減らない
知りませんでした。ありがとうございます。

英文ですが、さっきこれを見つけたところでした。
https://stackoverflow.com/questions/41688748/should-i-compile-my-application-inside-of-a-docker-image

勉強します。丁寧なレス感謝いたします。


脹れ上がり防止と、
dockerfileによるイメージ作成の自動化が焦点になっているという認識であっていますでしょうか。

ありがとうざいました。

480login:Penguin2018/11/07(水) 01:29:04.85ID:v7o9U8jP
>>478
> 環境構築は手探りではダメで、
> ビルドなどを含む全ての環境構築手順を、
> スクリプト化できていないとダメなようですね。

Dockerfileを手探りで書けばいいじゃん。

FOROM deban
COPY ソースコード
RUN yum install パッケージ
RUN ./configure
とか書いてビルドして、あれぇ?ビルドできないなぁとかなったら

FOROM deban
COPY ソースコード
RUN yum install パッケージ
RUN yum install 足りないパッケージ
RUN ./configure

とかしていくんだよ。そうすれば、RUN yum install パッケージが
終わった段階のキャッシュの続きから実行されるから、
手探りでやってるのと大差ない作業になる

最後にyumとかでまとめておしまい

481login:Penguin2018/11/07(水) 01:30:07.71ID:v7o9U8jP
まあどうしてもわからないなら、コンテナに入りつつ
ビルドしていって試してもいいけど、最終的には
Dockerfileにビルドするためのコマンドを書く

482login:Penguin2018/11/07(水) 01:30:23.27ID:JZV5z18S
>>474
>Dockerでサービスが起動するコンテナを作ってあとはDockerに
>OS起動時に、そのコンテナを起動してもらえばいいだけ

ソースのreadmeは、Dockerコンテナを想定していないです。
すると、dockerコンテナ内で、systemctl enable serviceをセットして、
コンテナの起動によってそのサービスが起動するようにするしか私には無理そうです。

とすると、privilegeとか、なにか別の特権を与えてコンテナを起動して、
仮想マシンみたいにコンテナを動かすしか手が見つからないんです。

483login:Penguin2018/11/07(水) 01:34:57.16ID:JZV5z18S
>>480
>そうすれば、RUN yum install パッケージが
>終わった段階のキャッシュの続きから実行されるから、
>手探りでやってるのと大差ない作業になる

続きから継続されるという仕組みがいまひとつピンとこないんですが、
知らなかったです。書籍も読んでいるんですが、あまり実践的ではないものが多いように思います。

最後にyumとかでまとめて御仕舞いというのは、
ワンライナーでかけるところはまとめて、dockerfileを作れということですね。

484login:Penguin2018/11/07(水) 01:36:09.53ID:v7o9U8jP
>>478
> Dockerfileでも、yumコマンドが扱われていることから、
> ログインしてビルドコマンドを手打して動作確認するという従来の方法と比べて、
> 何が本質的に違うのかなと素朴に疑問です。

Dockerは動作確認するためのツールじゃねーし。何かを作るためのもの。
その何かっていうのはDockerイメージでありそこから起動するDockerコンテナ

そのDockerイメージやDockerコンテナを作るために、最終的にDockerfileを書くんだよ。

Dockerイメージ = 実行ファイル
Dockerコンテナ = 実行ファイルを起動したもの
と考える

アプリの実行ファイルの中にデータファイルを作成しないのと同様に
Dockerコンテナ・Dockerイメージの中にはデータファイルは置かない

つまり、Dockerコンテナ(イメージも)は壊してDockerfileから
作り直してもなんの問題もないわけだ
なんの問題もないし、実際にそうする。

485login:Penguin2018/11/07(水) 01:36:15.87ID:JZV5z18S
>>481
ありがとうございます。

ずっと、どうしてコンテナに入って作業してはいけないのかが、
謎だったんですが、入って作業するのもアリなわけですね。
ホッとしました。

486login:Penguin2018/11/07(水) 01:40:32.26ID:JZV5z18S
>>484
なるほど。

>Dockerイメージ = 実行ファイル
>Dockerコンテナ = 実行ファイルを起動したもの

とてもわかりやすい喩えです。

>つまり、Dockerコンテナ(イメージも)は壊してDockerfileから
>作り直してもなんの問題もないわけだ
>なんの問題もないし、実際にそうする。

Dockerfileさえあればいいってことがよくわかりました!


>アプリの実行ファイルの中にデータファイルを作成しないのと同様に
>Dockerコンテナ・Dockerイメージの中にはデータファイルは置かない

ボリューム(あるいはボリュームを用いたデータ専用コンテナ)を使えってことですね。

487login:Penguin2018/11/07(水) 01:43:35.19ID:v7o9U8jP
>>482

> ソースのreadmeは、Dockerコンテナを想定していないです。
> すると、dockerコンテナ内で、systemctl enable serviceをセットして、
> コンテナの起動によってそのサービスが起動するようにするしか私には無理そうです。

無理じゃなくて調べろ。systemdを使わずにアプリを(フォアグラウンドで)
起動するやり方を調べろ。普通はその方法で起動する。


うん、だから、俺はDockerはインフラのためのツールと言うより
アプリ開発者のためのツールだって言ってるんだよ

インフラはアプリを作らない。だからDockerでアプリを起動しようと思ったら
そのアプリの起動方法を調べないといけない。よく知らないアプリの
起動方法やどこにどういうデータが保存されるかなんて調べるのは面倒だろ
仮想マシンでパッケージ使って起動すりゃいいんだよ。
パッケージ使ってりゃ依存関係とかディストリが解決してくれてんだろ
アップデートもやってくれるだろ

アプリ開発者の場合はアプリを作る。アプリ開発者ならsystemd使わない起動方法だって知ってる。
むしろsystemd使うほうが面倒。どこにデータを保存するかもわかってる。
アプリはディストリが用意するパッケージには依存したくない。アプリを動かすのに必要なものは全部管理したい
だからDocker使ってイメージを作るんだよ。あとはインフラにこのイメージ起動してって
ぽんと渡すだけでよくなる。

488login:Penguin2018/11/07(水) 01:45:23.17ID:v7o9U8jP
>>485
> ずっと、どうしてコンテナに入って作業してはいけないのかが、
> 謎だったんですが、入って作業するのもアリなわけですね。
> ホッとしました。

それを作業って言うのが謎。調査だよ。作業じゃない。
コンテナでやった作業(ではないもの)は全て破棄されるんだから

コンテナに入るのは調査するためだけ

489login:Penguin2018/11/07(水) 01:53:42.95ID:JZV5z18S
>>487
>無理じゃなくて調べろ。systemdを使わずにアプリを(フォアグラウンドで)
>起動するやり方を調べろ。普通はその方法で起動する。

目が覚めました!ありがとうございます。直接起動する方法を調べないと駄目ですね。
Linuxは柔軟ですね。(WindowsならSQL SERVERはフォアグランドで動かせなさそうだもの。)
いわば、クリスマスツリーの電飾から、一つだけ豆球を取り外して、乾電池につないで動かすようなもののように感じます。


>うん、だから、俺はDockerはインフラのためのツールと言うより
>アプリ開発者のためのツールだって言ってるんだよ
>あとはインフラにこのイメージ起動してってぽんと渡すだけでよくなる。

>>484の喩えを使って言えば、
スーパーアプリみたいな感じなのかな。


>アプリ開発者ならsystemd使わない起動方法だって知ってる。

冒頭でいいましたが、これはDockerと付き合う今の私に必要な言葉でした。


>アプリはディストリが用意するパッケージには依存したくない。
>アプリを動かすのに必要なものは全部管理したい
>だからDocker使ってイメージを作るんだよ。

Dockerとは、解体、原点に戻れですね。


丁寧にご指南いただき、本当にありがとございました。
とても勉強になりました!

490login:Penguin2018/11/07(水) 01:54:23.86ID:JZV5z18S
>>488
よくわかります!

491login:Penguin2018/11/07(水) 01:56:23.49ID:v7o9U8jP
> アプリ開発者ならsystemd使わない起動方法だって知ってる。
っていうのは、

自分で開発しているアプリなら、systemd使わない起動方法だって知ってる
っていう意味無

アプリ開発者はすげーから、なんでも知ってるぜーって意味ではないので

492login:Penguin2018/11/07(水) 01:57:11.36ID:v7o9U8jP
訂正(意味無ってなんだよ?)

自分で開発しているアプリなら、systemd使わない起動方法だって知ってる
っていう意味な

493login:Penguin2018/11/07(水) 01:59:57.97ID:JZV5z18S
>>491
>自分で開発しているアプリなら、systemd使わない起動方法だって知ってるっていう意味な

あー、よかった、そうですか。
ちょっと大変そうだと心折れかかっていました。
自分で作るプログラムならよく把握できていますものね。

494login:Penguin2018/11/07(水) 02:08:54.57ID:v7o9U8jP
MySQLとかデータを大切に扱う必要があるものは
どこにデータが保存されてるかとかもしっかり明記されてるから
(クラウド使えよって思うが)Docker化するのは比較的楽だけど

WordPressとかウェブアプリとか、どこに何を保存しているのか
よくわからんものを、Docker化しようと思うよなって
インフラ屋がせっせと既存アプリをDocker化してるのを見てると思うよ

お前それ、信頼できるの?記事データはデータベースに保存されるから大丈夫みたいだが、
アップロードした画像とかデータベースサーバーじゃなくて
ディレクトリに保存されるじゃん? ちゃんと共有ストレージ使うようなってんの?
管理画面からプラグインの導入できるけど、プラグインははデータディレクトリじゃない所に
保存されてるよね?そっちの対応は大丈夫?とか気になってしょうがない

495login:Penguin2018/11/07(水) 09:13:06.91ID:MDpN/AEY
補足だけど、systemdはパソコンの起動時に自動的に起動させるのが主な役目だからDockerのコンテナでも
起動時に起動させるのにsystemdを使ってもいいんですよ。
そのためには起動コマンドを調べる必要があるってことです。*.serviceのファイルを作成するだけで
systemd管理はできますが、*.serviceには当然起動コマンドを書く必要があるので。

496login:Penguin2018/11/07(水) 11:48:41.20ID:v7o9U8jP
>>495
今の話は、Dockerコンテナの中でsystemd使うなって話な

Dockerはそういう用途で使うためのもんじゃないから
そんな事をしようとすると、ハマるんだぞ
追加権限が必要なのが何よりの証拠

497login:Penguin2018/11/07(水) 12:15:05.51ID:MDpN/AEY
>>496
あり、レス読み間違えてたわすまん。
Dockerで中身いじるとしたらgitで遠隔操作するか、DBの永続化ぐらいで対応するのが常套だけど、
コンテナ内ならsystemdじゃなくてSupervisorがdocker公式になかった?

498login:Penguin2018/11/08(木) 00:22:57.37ID:Ueh2RoXc
LXC, LXD(Linux Containers)だと、コンテナ内に入って、
アプリのインストールなど、環境構築できる

AWS でも使っている

499login:Penguin2018/11/08(木) 03:09:23.40ID:NV3KMhMa
>>498
Dockerと、Linux Containerとは、
何が大きく違いますか?
Dockerはネットワークやコンテナの管理が便利だけどなあ。

500login:Penguin2018/11/08(木) 03:11:15.01ID:NV3KMhMa
>>498
DockerもLinux Containerも、共にLinuxの独立分離機能を用いていると言うし。

501login:Penguin2018/11/08(木) 03:29:19.31ID:KwyGHPnO
使ってる機能が同じでも、目的のために最適化されたツールになってる
だから、なにが目的かを正しく理解する必要がある。

Dockerはアプリケーションを仮想化することで
アプリケーションに可搬性をもたせるのが目的
Docker化したアプリはどこでも動かせる
その目的のために使う道具

LXCやLXDだとそれをやるのはとても大変だろう?

502login:Penguin2018/11/08(木) 06:56:36.33ID:8m7pC1YT

503login:Penguin2018/11/08(木) 08:04:08.58ID:AYcFG6pB
ありがとうございます。

>>501
LXCや、LXDだと、別のホストでは動作しないのでしょうか?

>>502
すみません参考になります。

504login:Penguin2018/11/08(木) 08:33:22.59ID:KwyGHPnO
> LXCや、LXDだと、別のホストでは動作しないのでしょうか?

頑張ればできるんじゃね?
とてつもなく頑張ればw

505login:Penguin2018/11/08(木) 15:05:12.27ID:Y2MwyzYh
18.09.0 が来た

506login:Penguin2018/11/08(木) 15:36:35.47ID:rbD7hoQI
>>504
とてつもなく頑張ればw
条件付きだがライブマイグレーションできる>LXD

507login:Penguin2018/11/08(木) 18:42:28.72ID:AYcFG6pB
>>506
マイグレーションが一番の魅力だから、
やっぱりDockerがいいなあ。

508login:Penguin2018/11/08(木) 21:55:42.35ID:y26ltpJb
OpenVZでdocker動くかもと見たんだか、ほんと?

509login:Penguin2018/11/08(木) 22:37:13.81ID:KwyGHPnO
Linuxカーネルに互換性があるなら動くんじゃないの?

510login:Penguin2018/11/09(金) 00:00:17.07ID:0q/3jACl
6使ってたら2.6で当然動かないよ
見たことないけど7使ってるとこなら動くはず

511login:Penguin2018/11/09(金) 08:00:07.01ID:XRMQbvdS
>>510
仮想マシンとは違うものね

512login:Penguin2018/11/10(土) 17:54:47.28ID:ZYfU+HA8
7ですね
あまり需要ないかと思いますが、格安vpsで動くと嬉しい

513login:Penguin2018/11/10(土) 19:16:43.39ID:2zo/Zkkd
格安VPSで7ってどこ?
普通に知りたい

514login:Penguin2018/11/11(日) 14:14:06.80ID:6/dIT6k3
テケトーにググったら
>NTTPCコミュニケーションズ WebARENA VPSクラウド プラン10
ttps://web.arena.ne.jp/pdf/vpscloud_spec.pdf
コレでcentos7動いてるみたいだが
月額\360〜

515login:Penguin2018/11/11(日) 14:29:07.06ID:r372XCNT
>>514
その表を見る限りCentOS7が動いてるのはKVMだけ見たいだしホストがRHEL6なOpenVZでもCentOS7は動くよ(kernelに実装されてない機能は使えないが

516login:Penguin2018/11/11(日) 14:34:03.19ID:r372XCNT
最新のstable採用してるとこんな感じでもちろんdockerは動かない
3.10ベースのtesting使ってサービス提供してるとこがあれば使えるはず
Ubuntu 16.04.5 LTS
Linux 2.6.32-042stab134.3 #1 SMP Sun Oct 14 12:26:01 MSK 2018 x86_64 x86_64 x86_64 GNU/Linux

517login:Penguin2018/11/11(日) 19:52:17.92ID:QlLSzGzd
KVMやXenはデバイスまで分離されてるからいいが、コンテナ環境を他人に貸すってすげぇな

518login:Penguin2018/11/12(月) 04:52:51.03ID:i5PNL/7Q
>>517
共有サーバーだって貸していただろw

519login:Penguin2018/11/13(火) 00:31:59.15ID:7b8arQTr
>>514
国内で360は安い、ありがとー

520login:Penguin2018/11/13(火) 23:30:40.07ID:7+h48abB
>>519
安過ぎて、客が殺到して、
詰め詰めのサーバーのために性能が悪いとかないのかな?

521login:Penguin2018/11/14(水) 00:18:45.33ID:f9otbk49
>>520
あるかもだけど、サービスの初期開発、プログラムの練習には持ってこいじゃないですか?
もしかして、time4vpsより安い?これ

522login:Penguin2018/11/14(水) 07:34:31.11ID:hsvM7qsm
そういう用途ならvps使うよりクラウドのほうが安く抑えられると思うけど

523login:Penguin2018/11/14(水) 07:42:38.54ID:Lj6Hvi7X

524login:Penguin2018/11/14(水) 12:18:34.69ID:fhtTOY8i
使う時だけ起動する感じなら、GoogleComputeEngineのプリエンプティブインスタンスが安く上がりそう

新着レスの表示
レスを投稿する