Docker Part2©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
>>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のようなアプリケーションコンテナを仮想マシンとかして使うな。 無理やり使おうとしたその結果が、お前のその「どうやればわからない」という状況なんだからな >>474 レスありがとうございます。 >Dockerでサービスが起動するコンテナを作ってあとはDockerに >OS起動時に、そのコンテナを起動してもらえばいいだけ ソースで提供されているプログラムをDockerコンテナで使いたい場合、 具体的にどうすればいいでしょうか。 コンテナに入ってから、 コンパイルすることしか想像できない初心者です。 >>475 Dockerfileを使ってビルドするんだよ コンテナの中に入るのは、ビルドがおかしいが原因がよくわからないとかで 調査するため。手作業でコンパイルとかしない 単純にDockerコンテナ内でビルドすると時間がかかったりイメージサイズが膨れ上がったり するから工夫が必要なんだが、とりあえずそれは置いといて、一番単純な方法だ。 まずDockerfielを書く。Dockerfileには基本的に次のようなことを書く ・FROMでどのディストリをベースにしたイメージを作るのかを書く ・RUN(RUN yum〜とか)でイメージの中にコンパイルをするのに必要なパッケージを入れていく ・ソースコードをコンテナの中に配置する (コンテナの外にあるソースをコピーしたりgitでcloneしたり、場合によってはボリュームを使う) ・プログラムをビルドする ・ビルドされたプログラムを起動するためのCMDやENTRYPOINTを書く これで、ソースコードからビルドしたプログラムが入った Dockerイメージが出来上がる。 あとは、dockerコマンドやdocker-composeなどでこれらを起動すれば良い >>476 で書いたように、単純な方法を取ると、 アプリを起動するのに必要ないビルドツールのせいで イメージサイズが大きく膨れ上がる。 レイヤー(例えばRUN)毎に差分が保存されるため ビルドが終わってから削除してもイメージサイズは減らない (一つのRUNの中ですべてを行う方法があるが、 キャッシュも使われなくなるのでイメージのビルド時間が伸びる) こういう場合に使うのが multi stage build アプリを使うためには、アプリの実行ファイル(とランタイム環境)さえあればよいので、 ソースコードから実行ファイルを作る所までをビルド専用イメージで行う そしてその実行ファイルをコピーして使う別のイメージ(ビルドツールなし)を作るという方法 >>476 丁寧なレスをいただき、感謝いたします。 ありがとうございます。しかし、疑問が/// 環境構築は手探りではダメで、 ビルドなどを含む全ての環境構築手順を、 スクリプト化できていないとダメなようですね。 Dockerfileでも、yumコマンドが扱われていることから、 ログインしてビルドコマンドを手打して動作確認するという従来の方法と比べて、 何が本質的に違うのかなと素朴に疑問です。 どうしてわざわざ、Dockerイメージづくりを自動化しなければいけないのですか。 できたイメージはtarで持ち運ぶつもりでいます。 >>477 脹れ上がりですね。 >ビルドが終わってから削除してもイメージサイズは減らない 知りませんでした。ありがとうございます。 英文ですが、さっきこれを見つけたところでした。 https://stackoverflow.com/questions/41688748/should-i-compile-my-application-inside-of-a-docker-image 勉強します。丁寧なレス感謝いたします。 脹れ上がり防止と、 dockerfileによるイメージ作成の自動化が焦点になっているという認識であっていますでしょうか。 ありがとうざいました。 >>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とかでまとめておしまい まあどうしてもわからないなら、コンテナに入りつつ ビルドしていって試してもいいけど、最終的には Dockerfileにビルドするためのコマンドを書く >>474 >Dockerでサービスが起動するコンテナを作ってあとはDockerに >OS起動時に、そのコンテナを起動してもらえばいいだけ ソースのreadmeは、Dockerコンテナを想定していないです。 すると、dockerコンテナ内で、systemctl enable serviceをセットして、 コンテナの起動によってそのサービスが起動するようにするしか私には無理そうです。 とすると、privilegeとか、なにか別の特権を与えてコンテナを起動して、 仮想マシンみたいにコンテナを動かすしか手が見つからないんです。 >>480 >そうすれば、RUN yum install パッケージが >終わった段階のキャッシュの続きから実行されるから、 >手探りでやってるのと大差ない作業になる 続きから継続されるという仕組みがいまひとつピンとこないんですが、 知らなかったです。書籍も読んでいるんですが、あまり実践的ではないものが多いように思います。 最後にyumとかでまとめて御仕舞いというのは、 ワンライナーでかけるところはまとめて、dockerfileを作れということですね。 >>478 > Dockerfileでも、yumコマンドが扱われていることから、 > ログインしてビルドコマンドを手打して動作確認するという従来の方法と比べて、 > 何が本質的に違うのかなと素朴に疑問です。 Dockerは動作確認するためのツールじゃねーし。何かを作るためのもの。 その何かっていうのはDockerイメージでありそこから起動するDockerコンテナ そのDockerイメージやDockerコンテナを作るために、最終的にDockerfileを書くんだよ。 Dockerイメージ = 実行ファイル Dockerコンテナ = 実行ファイルを起動したもの と考える アプリの実行ファイルの中にデータファイルを作成しないのと同様に Dockerコンテナ・Dockerイメージの中にはデータファイルは置かない つまり、Dockerコンテナ(イメージも)は壊してDockerfileから 作り直してもなんの問題もないわけだ なんの問題もないし、実際にそうする。 >>481 ありがとうございます。 ずっと、どうしてコンテナに入って作業してはいけないのかが、 謎だったんですが、入って作業するのもアリなわけですね。 ホッとしました。 >>484 なるほど。 >Dockerイメージ = 実行ファイル >Dockerコンテナ = 実行ファイルを起動したもの とてもわかりやすい喩えです。 >つまり、Dockerコンテナ(イメージも)は壊してDockerfileから >作り直してもなんの問題もないわけだ >なんの問題もないし、実際にそうする。 Dockerfileさえあればいいってことがよくわかりました! >アプリの実行ファイルの中にデータファイルを作成しないのと同様に >Dockerコンテナ・Dockerイメージの中にはデータファイルは置かない ボリューム(あるいはボリュームを用いたデータ専用コンテナ)を使えってことですね。 >>482 > ソースのreadmeは、Dockerコンテナを想定していないです。 > すると、dockerコンテナ内で、systemctl enable serviceをセットして、 > コンテナの起動によってそのサービスが起動するようにするしか私には無理そうです。 無理じゃなくて調べろ。systemdを使わずにアプリを(フォアグラウンドで) 起動するやり方を調べろ。普通はその方法で起動する。 うん、だから、俺はDockerはインフラのためのツールと言うより アプリ開発者のためのツールだって言ってるんだよ インフラはアプリを作らない。だからDockerでアプリを起動しようと思ったら そのアプリの起動方法を調べないといけない。よく知らないアプリの 起動方法やどこにどういうデータが保存されるかなんて調べるのは面倒だろ 仮想マシンでパッケージ使って起動すりゃいいんだよ。 パッケージ使ってりゃ依存関係とかディストリが解決してくれてんだろ アップデートもやってくれるだろ アプリ開発者の場合はアプリを作る。アプリ開発者ならsystemd使わない起動方法だって知ってる。 むしろsystemd使うほうが面倒。どこにデータを保存するかもわかってる。 アプリはディストリが用意するパッケージには依存したくない。アプリを動かすのに必要なものは全部管理したい だからDocker使ってイメージを作るんだよ。あとはインフラにこのイメージ起動してって ぽんと渡すだけでよくなる。 >>485 > ずっと、どうしてコンテナに入って作業してはいけないのかが、 > 謎だったんですが、入って作業するのもアリなわけですね。 > ホッとしました。 それを作業って言うのが謎。調査だよ。作業じゃない。 コンテナでやった作業(ではないもの)は全て破棄されるんだから コンテナに入るのは調査するためだけ >>487 >無理じゃなくて調べろ。systemdを使わずにアプリを(フォアグラウンドで) >起動するやり方を調べろ。普通はその方法で起動する。 目が覚めました!ありがとうございます。直接起動する方法を調べないと駄目ですね。 Linuxは柔軟ですね。(WindowsならSQL SERVERはフォアグランドで動かせなさそうだもの。) いわば、クリスマスツリーの電飾から、一つだけ豆球を取り外して、乾電池につないで動かすようなもののように感じます。 >うん、だから、俺はDockerはインフラのためのツールと言うより >アプリ開発者のためのツールだって言ってるんだよ >あとはインフラにこのイメージ起動してってぽんと渡すだけでよくなる。 >>484 の喩えを使って言えば、 スーパーアプリみたいな感じなのかな。 >アプリ開発者ならsystemd使わない起動方法だって知ってる。 冒頭でいいましたが、これはDockerと付き合う今の私に必要な言葉でした。 >アプリはディストリが用意するパッケージには依存したくない。 >アプリを動かすのに必要なものは全部管理したい >だからDocker使ってイメージを作るんだよ。 Dockerとは、解体、原点に戻れですね。 丁寧にご指南いただき、本当にありがとございました。 とても勉強になりました! > アプリ開発者ならsystemd使わない起動方法だって知ってる。 っていうのは、 自分で開発しているアプリなら、systemd使わない起動方法だって知ってる っていう意味無 アプリ開発者はすげーから、なんでも知ってるぜーって意味ではないので 訂正(意味無ってなんだよ?) 自分で開発しているアプリなら、systemd使わない起動方法だって知ってる っていう意味な >>491 >自分で開発しているアプリなら、systemd使わない起動方法だって知ってるっていう意味な あー、よかった、そうですか。 ちょっと大変そうだと心折れかかっていました。 自分で作るプログラムならよく把握できていますものね。 MySQLとかデータを大切に扱う必要があるものは どこにデータが保存されてるかとかもしっかり明記されてるから (クラウド使えよって思うが)Docker化するのは比較的楽だけど WordPressとかウェブアプリとか、どこに何を保存しているのか よくわからんものを、Docker化しようと思うよなって インフラ屋がせっせと既存アプリをDocker化してるのを見てると思うよ お前それ、信頼できるの?記事データはデータベースに保存されるから大丈夫みたいだが、 アップロードした画像とかデータベースサーバーじゃなくて ディレクトリに保存されるじゃん? ちゃんと共有ストレージ使うようなってんの? 管理画面からプラグインの導入できるけど、プラグインははデータディレクトリじゃない所に 保存されてるよね?そっちの対応は大丈夫?とか気になってしょうがない 補足だけど、systemdはパソコンの起動時に自動的に起動させるのが主な役目だからDockerのコンテナでも 起動時に起動させるのにsystemdを使ってもいいんですよ。 そのためには起動コマンドを調べる必要があるってことです。*.serviceのファイルを作成するだけで systemd管理はできますが、*.serviceには当然起動コマンドを書く必要があるので。 >>495 今の話は、Dockerコンテナの中でsystemd使うなって話な Dockerはそういう用途で使うためのもんじゃないから そんな事をしようとすると、ハマるんだぞ 追加権限が必要なのが何よりの証拠 >>496 あり、レス読み間違えてたわすまん。 Dockerで中身いじるとしたらgitで遠隔操作するか、DBの永続化ぐらいで対応するのが常套だけど、 コンテナ内ならsystemdじゃなくてSupervisorがdocker公式になかった? LXC, LXD(Linux Containers)だと、コンテナ内に入って、 アプリのインストールなど、環境構築できる AWS でも使っている >>498 Dockerと、Linux Containerとは、 何が大きく違いますか? Dockerはネットワークやコンテナの管理が便利だけどなあ。 >>498 DockerもLinux Containerも、共にLinuxの独立分離機能を用いていると言うし。 使ってる機能が同じでも、目的のために最適化されたツールになってる だから、なにが目的かを正しく理解する必要がある。 Dockerはアプリケーションを仮想化することで アプリケーションに可搬性をもたせるのが目的 Docker化したアプリはどこでも動かせる その目的のために使う道具 LXCやLXDだとそれをやるのはとても大変だろう? ありがとうございます。 >>501 LXCや、LXDだと、別のホストでは動作しないのでしょうか? >>502 すみません参考になります。 > LXCや、LXDだと、別のホストでは動作しないのでしょうか? 頑張ればできるんじゃね? とてつもなく頑張ればw >>504 とてつもなく頑張ればw 条件付きだがライブマイグレーションできる>LXD >>506 マイグレーションが一番の魅力だから、 やっぱりDockerがいいなあ。 OpenVZでdocker動くかもと見たんだか、ほんと? Linuxカーネルに互換性があるなら動くんじゃないの? 6使ってたら2.6で当然動かないよ 見たことないけど7使ってるとこなら動くはず 7ですね あまり需要ないかと思いますが、格安vpsで動くと嬉しい テケトーにググったら >NTTPCコミュニケーションズ WebARENA VPSクラウド プラン10 ttps://web.arena.ne.jp/pdf/vpscloud_spec.pdf コレでcentos7動いてるみたいだが 月額\360〜 >>514 その表を見る限りCentOS7が動いてるのはKVMだけ見たいだしホストがRHEL6なOpenVZでもCentOS7は動くよ(kernelに実装されてない機能は使えないが 最新の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 KVMやXenはデバイスまで分離されてるからいいが、コンテナ環境を他人に貸すってすげぇな >>519 安過ぎて、客が殺到して、 詰め詰めのサーバーのために性能が悪いとかないのかな? >>520 あるかもだけど、サービスの初期開発、プログラムの練習には持ってこいじゃないですか? もしかして、time4vpsより安い?これ そういう用途ならvps使うよりクラウドのほうが安く抑えられると思うけど 使う時だけ起動する感じなら、GoogleComputeEngineのプリエンプティブインスタンスが安く上がりそう そりゃまあ仮想マシンなんてアプリに過ぎないので動くやろうな >>526 動くやろうなじゃなくて、 これから主流になるらしいよ Dockerの上で仮想マシンとか これもうわけわかんねえな >>527 ならんよ。嘘ついてもバレる(嘲笑) 仮想マシンをアプリケーション化する意味がない 仮想マシンによって、仮想マシンの中のアプリと外のアプリの 連携が分断されるから、やる価値がない Dockerって、勝手にiptablesの設定を変更するのが気に入らない。 安易に使うとセキュリティーホールだらけになると思う。 Xen+libvirtやLXCもiptablesの設定を勝手に変更するよ(deb系しか試してないけど) でも合ってる設定だし、ポリシーがACCEPTのままなので自分でも設定しなればならないのに変わりがないから異論は無いけど >>531 レスありがとう。 どうせなら、docker runコマンドのポート解放のところで、 パス可能なソースIPでも指定できるようにすればいいのにと思う。 >>532 それはファイアウォールの仕事 Dockerの仕事ではない >>533 だけど、ポートの解放はdocker runで行うよね だけどやっぱりフィルタリングはDockerの仕事じゃないよね。 >>535 せめて、デフォルトで外部から接続させないようにファイアホールを構成していればいいのにと思う。 ユーザーが必要に応じてフィルタリングルールを調整してはじめて、 外部からアクセスできるようにすればいいのにと思う。 フィルタリングが分かっている人が明示的にパスするようにするのがいい。 docker runでポート解放したら無条件でどこからでも通すなんて変だと思う。 >>536 Dockerは仮想マシンじゃないと何度言ったらわかるんだ? Linuxでウェブサーバー起動したら、外部から接続できるのは 当たり前の話だろ >>530 >Dockerって、勝手にiptablesの設定を変更するのが気に入らない。 オプション付けろよ >>538 ん?どんなオプションだったっけ。 iptablesのNAT設定を変更しないやつってあるの? >>539 サーバー系の設定したこと無いんか? MySQLのbind-addressはなんのためにあるのか知らないのか? 127.0.0.1 と 0.0.0.0 の違いを言えるか? >>540 コンテナをホストのプライベートIPに結合するやつかな? >>541 Dockerはシステムコンテナじゃなくて アプリケーションコンテナなんだから、 普通のアプリを起動したのと同じ挙動をするのが一番正しい姿なんだよ やっとコンテナできた。疲れた。12時間ぶっとおし、徹夜した。 同じ挙動ってなんだ? iptablesいじられるのは無しってこと? >>537 ネットワーク繋がなきゃつながらないのが当たり前だろw >>542 「同じ挙動」がどういう挙動か言ってみろよ。 ポート競合するのが正しいと思ってんのか? >>545 > ネットワーク繋がなきゃつながらないのが当たり前だろw デフォルトだと、どのポートでも受け付けてないはずだが? > 「同じ挙動」がどういう挙動か言ってみろよ。 ポート競合するのが正しいと思ってんのか? 同一マシンでポート80で起動するサービスが複数あったら競合するのが正しいですが? 最近俺が見たのはこんな奴だった 公式ドキュメント読まない ヘルプ読まない ぐぐらない ぐぐれない とりあえずやってみない 手順に書いてあることをなぞるだけ コンテナとVMの区別がつかない Docker無しでLA(E)MP環境が建てらんない iptablesを手動でいじれない どうやってDockerを知って、動かすことができたんだ? >手順に書いてあることをなぞるだけ 多分ハケンか何かの業務でとか… [速報]AWS、独自のセキュアなコンテナ実行用マイクロVM「Firecracker」、オープンソースで公開。AWS re:Invent 2018 https://www.publickey1.jp/blog/18/awsvmfirecrackeraws_reinvent_2018.html >>551 コンテナがrootkitなウイルスにやられても 他のコンテナに侵入できない なのに仮想マシンより軽量 普通のコンテナはroot取れば脱出出来る可能性はある 仮想マシンの脱出はそれよりは困難 これぐらいなら馬鹿は出てこないと思って放置していたが ほんとなんにでもくだらないレスするやつ来るな まじでやってるなら本当の馬鹿だな >>550 とりまビルドしてみたらサクっと通った 今時のツールはdockerでビルドなんだな…時代が進んで色々凄いコトになってる つか使い方がよく分からんがw >>554 Dockerねぇぞって弾かれるよなワロタ 大容量のダウソ始まったからビルドやめたわ >>552 それはいいですね。 ハニーポットも運用できる? >>555 つか何をするにもひたすらDLやでw quickstart guide見ながらやってるけどうまく動かんわ >set the guest kernel: ココでハマってる 誰か上手く動かせたヤシ居る? hello-rootfs.ext4 hello-vmlinux.binはDLしたし AppendixにあるKVM Accessのチェックも全部パスした エラーメッセージは↓ HTTP/1.1 400 Bad Request Content-Type: application/json Transfer-Encoding: chunked Date: Fri, 30 Nov 2018 07:20:20 GMT { "fault_message": "The kernel file cannot be opened due to invalid kernel path or invalid permissions." releaseからバイナリ落としてもダメなんで今回は諦めるワ コッチはローカルビルドと違ったメッセージ出てたんでイケそうだったんだが 腐ってやがる早すぎたんだ HTTP/1.1 204 No Content Date: Fri, 30 Nov 2018 07:45:56 GMT つか尼損犬糞でしか動きま千円って書いとけやヴォケ害人どもガイジか? >Linux 4.14+ >KVM 動作環境とは何の関係もありませんが何か?w >>561 今KVM上でDockerホスト運用しているけど。 両方CentOS7でね。 DockerはKVMなどの仮想マシンと組み合わせて 使うのが想定される使い方なんだから最初から動いて当然 KVMなどの仮想マシンで、コンテナ専用の軽いディストリを起動して その上で、Dockerコンテナを起動するんだよ。 Dockerコンテナ(=アプリ)にカーネル以外の動作に必要なものが 全てまとまっており、ディストリ自体にパッケージが不要になることで 実現できる設計 >>563 なるほど。 そのうちDockerホスト専用のディス鳥がでるかもね そんなもんとっくの昔からあるよ で最近になってKVMの上でコンテナ動かすのがバズってきたのは、AWSがコンテナ専用の "KVMホスト" OSをリリースしたことに端を発している これは小数の大きな仮想マシンでクラスタを組んでその上で沢山のコンテナを動かすという従来のやり方とは考え方が大きく違っていて、 コンテナの数だけKVM上で軽量なVMを立ち上げてその中でコンテナを隔離して動かすの でコンテナは本当に単なるパッケージ化技術と成り下がる コンテナによる分離はセキュリティ面でガバガバであり使い物にならない玩具である、というのがITビジネス界の結論というわけ > というのがITビジネス界の結論というわけ という結論を語ってる所はITビジネス界には無いんで 安心して、生暖かく見てやってくださいw コンテナごとにセキュリティソフト入れてますます重くなる未来 そういや仮想マシンごとにセキュリティソフト買ってるらしいな パッケージソフトをウッキウキでクラウドで動かそうとしたら、 ライセンスがコピー単位でオンプレと何ら変わらない運用をするしかないというのはよくある話 だからソフトウェア自体を売るんじゃなくて クラウドサービスとして売る方向になってるのでは? >>565 >パッケージ化技術と成り下がる いいたい事はわかるが、成り下がってはないと思う。 >>570 自分で構築、保守してこそのコンテナの有難味だと思う ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる