[過去ログ]
Docker Part2©2ch.net (1002レス)
Docker Part2©2ch.net http://mao.5ch.io/test/read.cgi/linux/1506574845/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
455: login:Penguin [sage] 2018/10/26(金) 09:58:02.43 ID:S+WdRTJT >>454 C言語とかコンパイル言語使ったことある? dockerのbuildは、C言語などのビルド(コンパイル)と同じ 言語はソースコードをビルドして実行バイナリを作成する Dockerはすでにある複数のバイナリをもとに、Dockerイメージを作成する さて、実行バイナリは、データを保存したらどこに保存されるか? 実行バイナリの中に埋め込まれるわけじゃないよね。実行バイナリの外のファイルに保存する。 実行バイナリ自体は読み取り専用。ビルドしたときに作成したバイナリから変更することはない Dockerも同じように考える。Dockerイメージっていうのはビルドして作成した状態から変更しない 内部的には変更されていてそのデータはどこかに残っていたりするが、そういうのは内部の話なんで忘れる Dockerイメージは読み取り専用で、Dockerイメージをrun(実行)するとプロセスが起動する あ、ここも実行バイナリと同じだね。バイナリを実行するとプロセスが起動する Dockerイメージをrunして作ったプロセス(=Dockerコンテナ)はどこにデータを保存するか? Dockerイメージは読み取り専用なので、当然Dockerコンテナの外のファイルに保存する。 C言語 ・・・ ソースコード -> [Makefileでビルド] -> 実行バイナリ Docker・・・ソースコード等 -> [DockerfileでDockerビルド] -> Dockerイメージ Dockerのソースコード等には本当にいろいろ含まれる アプリのソースコードだったり、nginxだったり。カーネル以外の全て で、コード消えるのか?っていう疑問の答えは、実行バイナリ消してもソースコードをビルドすれば作れるでしょう? Dockerも同じでソースコード等をビルドすれば、Dockerイメージができるんだから何も問題ない http://mao.5ch.io/test/read.cgi/linux/1506574845/455
456: login:Penguin [sage] 2018/10/26(金) 10:06:27.87 ID:S+WdRTJT で、ウェブ開発の際に使う場合に、これじゃ使いづらい場合がある C言語の場合、ビルドしないと動く実行バイナリはできないから これで納得するかもしれないけど、ウェブ開発とかしてると ビルドしなくてもソースコードを修正したらすぐに反映されるわけだ 毎回Dockerビルドしないといけないのは辛い。こういう場合にボリュームを使う手がある データはDockerイメージの外に置くといったけど、ソースコードもDockerイメージの外に置けばいい Dockerイメージの中にはPython実行環境などが入っているけど、ソースコードは含めない ホームディレクトリ以下のいつもの場所をそのまま参照する 当然エディタもDockerイメージの中に入れない。 今までどおりエディタで編集して、実行環境がDockerイメージなっただけ ただね。Dockerイメージで作る実行環境は、本番用環境と同じにだいたいするので デバッグなどはし辛い。だから通常のアプリ開発はDockerを使わないほうが楽だろう だが、いつでも本番用環境を手元で作り出せると、本番用環境でのみ発生するバグなど避けられる 他の人も誰でも本番用環境で検証できるようになるわけだ http://mao.5ch.io/test/read.cgi/linux/1506574845/456
457: login:Penguin [sage] 2018/10/26(金) 10:18:44.97 ID:UuZWwwD+ >>456 すごいわかりやすい説明 コンパイラに例えてもらえると分かりやすいわ ありがとう http://mao.5ch.io/test/read.cgi/linux/1506574845/457
458: login:Penguin [sage] 2018/10/26(金) 10:20:16.70 ID:S+WdRTJT >>454 > インフラチームではないから詳しい構造とか構成は知らなくていいんだけど、開発側からして > なにか変わるのか事前に理解したくて。 インフラが全部やりますっていうのなら、開発側に影響はない。今までどおりだ。 そう今までどおり、開発側で新しいライブラリとか追加や更新しようと思たら インフラにこれ変えたいんですけどとお伺いを立てたり 本番用環境とバージョンが違うとかでバグがでたり そういう今ある問題がそのまま残るという意味で開発側に「影響がない」ということだ Dockerfileはソースコードのリポジトリに追加するのが良い (もちろん分離することもできるが、いろんな問題は解決するのが難しくなる) そして開発側で新しいライブラリとか追加するなら、ソースコードのビルドスクリプトと同じように Dockerfile等をインフラチームではなく開発チームがメンテナンスする。 そして最終的にソースコードのリポジトリから簡単な操作でDockerイメージが作れるようになれば インフラチームはそのDockerイメージを動かすことだけに集中すれば良くなる 開発チームとインフラチームのやり取りが、Dockerイメージを実行する手順だけを伝えれば良くなる。 (例えば必要な環境変数など) 理想は 開発チーム・・・Dockerfileのメンテナンス(Dockerイメージを作成できるようにする) インフラチーム・・・Dockerイメージの実行 なのだが、現実としてDockerはインフラチーム主導で導入されることが多いので インフラチームのサポートでDockerfileを作っていくことになるだろう http://mao.5ch.io/test/read.cgi/linux/1506574845/458
459: login:Penguin [sage] 2018/10/26(金) 10:26:18.88 ID:UuZWwwD+ 今までdocker = vmと考えてたのでファイルの保存などが混乱してたけど、virtualenvの凄い版と考えた方がいいのね http://mao.5ch.io/test/read.cgi/linux/1506574845/459
460: login:Penguin [sage] 2018/10/26(金) 10:29:10.46 ID:S+WdRTJT Dockerを仮想マシンの代わりとしてとか考えてると > 調べていくとdocker runした後にdocker container pruneすると実行して終了したcontainerが > パージされて変更内容がリセットされると書いてあったので、コードはdocker image作成時に > コミットしてないとコード消えるのか???ってなってしまったわけなのよ ↑これとかで、混乱する。 Dockerは仮想マシンじゃないんだよ。 Dockerfileから作成したDockerイメージはビルドした状態から変更しないもの。(もちろん再ビルドはOK) Dockerコンテナに乗り込んで、中身を書き換えて再イメージ化なんてこともしない。 できるけど、通常の使い方ではやらない バイナリに例えれば、C言語のプロセスに乗り込んで(デバッガで?) プロセスのメモリを書き換えて、プロセス部分をディスクに書き出すようなもんだよ そんなことしないだろ? http://mao.5ch.io/test/read.cgi/linux/1506574845/460
461: login:Penguin [sage] 2018/10/26(金) 10:34:41.20 ID:S+WdRTJT > 今までdocker = vmと考えてたのでファイルの保存などが混乱してたけど、virtualenvの凄い版と考えた方がいいのね virtualenvといわれると、少し違和感があるな VMよりずっとましだけど virtualenvは実行環境を作るもの Dockerは実行環境を含めた実行イメージ=Dockerイメージ=実行バイナリの凄い版を 作るものだから http://mao.5ch.io/test/read.cgi/linux/1506574845/461
462: login:Penguin [sage] 2018/10/26(金) 10:39:21.79 ID:UuZWwwD+ >>461 やっとそこの理解ができた インフラがDocker推すのわかるわ virtualenvのpython周りをなんとなくコンテナ化したのとはちがって、OS含めた実行環境コンテナを作れるとなると、ほんといろいろ解決できるな! http://mao.5ch.io/test/read.cgi/linux/1506574845/462
463: login:Penguin [sage] 2018/10/26(金) 10:44:35.53 ID:S+WdRTJT 例えばgoで作られたバイナリは、いろんなものがスタティックリンクされるので 単一のバイナリをコピーするだけで、あちこちでそのまま動かすことができる。 それと同じようにDockerもDockerイメージの中に、いろんなものが詰め込まれてるので あちこちで動かすことができる ちなみにDockerfileでビルドしたDockerイメージはDockerリポジトリにpushしておける (パブリックな公式のDocker hubや、各社プライベートリポジトリ等がある) そうしたイメージは手元でDockerfileからビルドしなくてもpullするだけで使える バイナリをコピーするだけで動かすことができるように DockerイメージをDockerリポジトリからpullしてくるだけで動かすことができる こういうのは開発者にとっても便利だよね。 ウェブアプリだけじゃなくCLIコマンドもDockerイメージ化することができるから goみたいにスタティックリンクされたバイナリが作れない言語で作ったアプリでも Dockerだけが入ってるクリーンな環境で、いきなり実行することもできちゃうわけだ http://mao.5ch.io/test/read.cgi/linux/1506574845/463
464: login:Penguin [sage] 2018/10/26(金) 10:56:20.22 ID:S+WdRTJT >>462 Dockerイメージを新しく(バージョンアップ)したから、 次からこれ使ってーって開発チームはインフラチームに依頼するだけでよくなる インフラが気にするのはDockerイメージを実行することだけ だからDockerイメージが起動さえすれば、物理(or 仮想マシン)の OSを変えることだってできちゃう。 そのDockerイメージが動きさえすれば良いんでしょ?程度の気楽なもん 開発チームは開発チームで、物理(or 仮想マシン)のOSの機能に (カーネル以外)依存しているわけじゃないので、 Dockerイメージのベースとなるディストリを変更したりなんでもできちゃう 物理(or 仮想マシン)のOSが変更になったって?別にOSのパッケージに 依存してるわけじゃないのでどうでもいいよ。程度の気楽なもん いままでDebianベースでやってきたけど、ライブラリのバージョンが古いや Ubuntuに乗り換えよう。なんてことも気楽にできちゃう 客先が使ってるマシンがCentOSだって? Dockerがあれば関係ない。 UbuntuベースのDockerイメージが、そのまま動く 本気でやれば、いろいろ解決するよ。ただそのためには インフラチームに丸投げじゃだめだけどね http://mao.5ch.io/test/read.cgi/linux/1506574845/464
465: login:Penguin [sage] 2018/10/26(金) 11:34:43.60 ID:UuZWwwD+ >>464 ほんとベース理解できたら凄いわこれ 細かいホスト側?の設定はインフラに任せるとして 開発に影響のあるdockerfileの作り方も凝らなければストレートだね これで環境周りのめんどくささからは解放される! http://mao.5ch.io/test/read.cgi/linux/1506574845/465
466: login:Penguin [sage] 2018/10/26(金) 13:18:37.63 ID:4wc3titV chrootで仮想化するのを全自動で管理できるようにしたのがdocker、chroot以下構築のbashファイルに相当するのがDockerfile。 ツッコミどころ満載の説明だけど、概念はこれでおk.使い方はコマンド覚えろ。 http://mao.5ch.io/test/read.cgi/linux/1506574845/466
467: login:Penguin [sage] 2018/10/27(土) 19:48:50.40 ID:5pOpML2z は? http://mao.5ch.io/test/read.cgi/linux/1506574845/467
468: login:Penguin [sage] 2018/11/01(木) 11:02:05.82 ID:Ub4h8gMB クソレスのせいで会話とまったな 466は反省しろよ http://mao.5ch.io/test/read.cgi/linux/1506574845/468
469: login:Penguin [sage] 2018/11/05(月) 05:00:26.04 ID:tQ7nIs7Z シェルのコマンドで-pとか-vとか指定するのと Dockerfileに書くのと docker-compose.ymlに書くのと どこにどうすればいいかがわからんわ http://mao.5ch.io/test/read.cgi/linux/1506574845/469
470: login:Penguin [] 2018/11/05(月) 08:23:33.46 ID:R14xwsxg Dockerコンテナってラベル付ける機能あったんだ 長い事使ってるがそんな機能がある事自体初耳 TraefikというDockerコンテナを自動的に登録してルーティング出来るリバースプロキシがあるんだが Dockerのラベルでリバースプロキシの設定が出来る https://docs.traefik.io/v1.7/ 以下docker-compose.ymlの抜粋 ホストヘッダーでのルーティングを設定してる # ... whoami: image: containous/whoami # A container that exposes an API to show its IP address labels: - "traefik.frontend.rule=Host:whoami.docker.localhost" http://mao.5ch.io/test/read.cgi/linux/1506574845/470
471: login:Penguin [sage] 2018/11/05(月) 08:47:09.36 ID:Thuf2ewx >>469 docker-compose.yamlはコマンドのオプションで指定するのと同じ docker-composeコマンドというのはそもそも、 一つのコンテナだけ構成されたものを起動するならdocker runだけでいいけど、 複数のコンテナで構成するときに、docker runで適切なオプションつけて 複数起動するのが面倒って言うときに使うものだから、機能的にはdocker runと同等 run以外にbuildとかもできるけどね。 で、Dockerfileとdocker runの違いだが、Dockerfileはイメージの仕様として ポートを公開しますよ、ボリュームを使用しますよって、明示するときに使う docker runの方は公開されたポートをホスト上のどのポートに割り当てるのか ボリュームをどこのディレクトリに割り当てるのか指定するのに使う 例えば、Dockerイメージとして構成されたものが、どんなポートを公開しているか? っていうのはDockerfileを見ればわかるわけだ。 で、そのイメージを起動する場合、ポートを変更できる機能がなければ、 同一ホストで複数起動することができなくなるだろ? 実際にどのポートを使用するかは実行時にしか決められない。(ボリュームも同じ) Dockerfileではそのイメージがどういうものかを書いて、 docker runはイメージを起動するときのオプションというわけ http://mao.5ch.io/test/read.cgi/linux/1506574845/471
472: login:Penguin [sage] 2018/11/05(月) 08:47:55.99 ID:Thuf2ewx >>470 > Dockerコンテナってラベル付ける機能あったんだ ずいぶんと前についた気がするが? 昔docker-composeはラベル使っていなかったが、 途中でラベル使うように変わったよな http://mao.5ch.io/test/read.cgi/linux/1506574845/472
473: login:Penguin [] 2018/11/07(水) 00:40:27.75 ID:JZV5z18S たとえば、あるソースをコンパイルして、 systemctl start serviceができるようにするには、 どうやってコンテナ作りをすればいいんでしょう。 privilegeを与えて、yumで開発環境投入して、 systemctl がつかえるように、serviceファイル設置して、 systemctl enable serviceのあと、shutdown したのち、 docker image化してはダメなんでしょうか?? http://mao.5ch.io/test/read.cgi/linux/1506574845/473
474: login:Penguin [sage] 2018/11/07(水) 00:52:45.66 ID: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のようなアプリケーションコンテナを仮想マシンとかして使うな。 無理やり使おうとしたその結果が、お前のその「どうやればわからない」という状況なんだからな http://mao.5ch.io/test/read.cgi/linux/1506574845/474
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 528 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.013s