Docker Part2©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
動くコンテナのイメージ作るのがアプリエンジニアの仕事なら、結局必要なミドルをアプリエンジニアが入れる事になってそれこそインフラエンジニアの作った本番環境と差異が出てしまうと思うのですが。 まあ新規や中小規模のサービスならそれでも問題無いと思うけど。 大きい会社だとIDEしか使ったことがない、CUI触ったこと無いアプリエンジニアとか普通に居りましてですね まあその程度のアプリエンジニアはいずれ淘汰されると切り捨てるなら問題無いんですけどね。 アプリ動かすのに必要なミドルウェアをバージョンも含めて熟知してるアプリエンジニアって相当優秀だと思う。 取りあえずアプリ動く程度に適当にミドル入れまくるアプリエンジニアいるけど、それができるアプリエンジニアすらそこそこ出来る評価なんだけど。 >>272 やっぱお前使い方間違ってるわ 答えだけ言っておくね。本番環境と全く同じ環境になる >>274 > アプリ動かすのに必要なミドルウェアをバージョンも含めて熟知してるアプリエンジニアって相当優秀だと思う。 お前の会社の人間が馬鹿だってことかな? そうなんだろうな。 ミドルウェアのバージョンを把握してないで どうやってアプリが正しく動くことを保証するのか? 言ってみ コンテナの中にミドルウェアが入ってしまってるのに どうやってインフラエンジニアがミドルウェアを入れ替えるんだ? コンテナに手を入れてミドルウェアを差し替えるんか?w え、もしかして自分でミドル入れずにDockerhubに落ちてるミドル入りコンテナ使ってるクチだったりするの? コンテナの中庭ミドルが入ってしまっているのにって、じゃあそのミドルは誰が入れるの? アプリエンジニアが適当に入れたミドルをそのまま本番に使ってたりするんですか? インフラエンジニアの居ない規模の企業でアプリエンジニアが勉強して開発から本番運用までやってるって言うなら分かるけど。 インフラエンジニアいるのにミドル部分までアプリエンジニアが制御するって問題無いの? 部署をまたいだアプリエンジニア同士で宗教論争はじまってまとまらないと思うんだけど。。 最終的にはインフラ分からないアプリはフェードアウトするって意見に異論はないけど、まだその時ではないと思ってる。中小規模やベンチャーは知らない。 >>280 > アプリエンジニアが適当に入れたミドルをそのまま本番に使ってたりするんですか? なんで適当に入れるんですか? お前じゃあるまいしw >>281 お前さ、アプリケーションが動くサーバー作ったことないだろ? どうせデータベースサーバーのセットアップぐらいしかしてねーだろ? データベースサーバーのセットアップなんて簡単だもんな 設定ファイルをいじるだけ。そんな簡単な仕事はお前にやらせるよ で、アプリ開発してないやつが、どうやってアプリケーションが 動くサーバーを作れるっていうの? あぁ、どうせお前、オープンソースのアプリ動かしてるだけだっけ?w 俺が作ったアプリ、そのアプリが動くのになんのライブラリが必要か言ってみ? アプリを開発してる俺は当然わかるが、教えないからなw アプリのコード読んで必要なものを調査するとかやんなくていいよ 俺がコンテナのイメージつくってやっからさ、 お前はそれ動かすだけ。おまえにできないことはやらなくていい お前はDockerr動くLinuxマシンだけ用意してればいい あなたがよくても他のアプリエンジニアから不満でたりしないの? あなたのレスみる限り大きな声で周りねじ伏せて自分凄いって思ってるタイプの人に見えますが。 周りは従ってるんじゃなくて腫れ物には触らないようにしてるだけっていうオチじゃないですか? それだけDockerの理解・運用は難しいということだな 俺本読んでもさっぱりわからんかったもん コンテナがIPアドレスを持つって聞いて、ファッ?ってなったわ コンテナ=アプリとその動作環境をパックにしたものと ここで教わったが、アプリがIPアドレスを持つわけないだろう containerizedされたアプリケーションならdocker-composeなりkubernetesなりでミドルウェアごと構成管理するのが普通 この場合はインフラ屋の役割は主としてdockerなりkubernetesクラスタの管理になると思うのだけれど 単に共通テスト環境としてコンテナを使っていて, アプリケーションをcontainerizedせずにリリースするとか単体のコンテナとして配布して使う側で上手に組み合わせてねってものならインフラ屋が実動環境に合わせてコンテナ構成をすることもある Travis CIとかGitLab CIでビルド環境として使うコンテナはこっちの場合が多そう テスト/開発環境でもdocker-composeかVagrantした方がいいと思うけども >>288 UNIXソケットを使わない場合にアプリケーション間のデータのやり取りはTCPやUDPで行われることが多いと思うのだけれど, そうするとIPアドレスがないと困るだろう 特にロードバランシングしていると同一ホスト上でないことが普通なので, ソケットが使えないことが多い >>286 人間の問題と技術の問題は切り離して考えましょう 俺の周りがどうこうとか聞く必要ないだろ? お前には関係ない話なんだから。俺の周りが凄くて 全員がDockerを使いこなしていて、誰も文句言わなくても、 「お前の」周りではそうじゃないんだろ? なら、それはお前の周りでの問題であって。 その問題の原因は人間だって素直に認めればいいじゃないか? 下には下なんていくらでもいるんだから、素人集団には 使えませんと言われても、それ技術となんの関係もないやん >>288 > コンテナがIPアドレスを持つって聞いて、ファッ?ってなったわ > コンテナ=アプリとその動作環境をパックにしたものと > ここで教わったが、アプリがIPアドレスを持つわけないだろう そう。認識としてはIPアドレスを持ってないと考えていい。 内部の仕組みの話だから。 コンテナ = アプリで、環境の仮想化を行っているため、 そのコンテナ(=アプリ)は自由にサービスを提供するポートを変更できる。 仮にコンテナの中で80番ポートでアクセスを受け付けているからって、 コンテナ(=アプリ)は80番ポートでアクセスを受け付ける必要はない。 コンテナが受け付けるポートは自由に変更できる。 それが「仮想化」で実現している機能の一つ それを実装するために、内部的にルーティングしているというわけ Dockerの仕組みに詳しい人はネットワークについても勉強するだろうけど Dockerを使っている段階では、コンテナがどのIPアドレスを 持ってるかなんて意識していない >>288 > それだけDockerの理解・運用は難しいということだな 技術職っていうのはそういうもんだよ。 ソフトウェアにおいて技術=知識 知識を得て楽をするか、知識ない人は力ずくで頑張れと >>291 いや、関係あるでしょ。 元々ある程度のリテラシーのエンジニアに使ってもらうこと前提の話をしてるのに、あなたは俺が俺がばっかりで使い手に対する配慮がほとんど感じられない。 さっきもいったようにあなたは腫れ物か、もしくは本当に周りがDockerくらい使いこなせるみたいな優秀なエンジニアばかりの職場で働いてるからそういう考えになるんでしょうね。 せいぜいその職場から振り落とされないようにしてくださいね。 普通の職場で働くと、たぶんあなたは腫れ物扱いされます。 >>294 > 元々ある程度のリテラシーのエンジニアに使ってもらうこと前提の話をしてるのに、 だから、それ、人間の話ですよね? 技術の話をしてください ほんとDockerの話しろっていってるのに、 俺の周りの人間は〜馬鹿ばかりだから〜 人間の話ばっかりw 全く興味ない第三者だが、いちおう荒れた懲罰としてうんこ置いとくな? _人 ( ) (へ ノ) ヽ( ´ 」`)ノ ( `ー ) 【いけめんウンコ】 そこで働く人間無視して仕事できる訳ないし、やってるつもりなら大した仕事してない。 勝手なことやるなら本当にインフラも含めて別予算で独自にやってほしい。 えらそうな事言って勝手な事やって、結局尻拭いはインフラ側に押し付ける勝手なアプリエンジニア見ると文句の一つも言いたくなる気持ち分かるでしょ。 インフラエンジニア要らないってのは理想。ただ、その理想を妨げる事が多いのが声がでかいアプリエンジニア。 大概やりたいようにやって自分では運用回らなくなって、別の誰かに運用を押し付けて自分はフェードアウトするってのがお決まりのパターン。 >>300 そういう話じゃねーよ 人を持ち出してきたら、どんな結論でも覆せるんだからここで話す意味ないだろってこと 例えばウェブサーバー運用するのにLinuxが適しているとなっても うちではLinux使える人がいないので、Linuxはだめなんですってなるだろ Javaが適していてもうちではJava使える人がいないでJavaだめなんです。 COBOL使ってください。ってなるだろーが。 もはや適しているかどうかの話じゃなくなるんだよ。 「Dockerの適している使い方は○○です」って結論した後 心の中で「でもうちでは技術者のスキルが低くて使えるやついないんだよ。」って泣けばいいだろ 他の人には関係ない話だ >>300 > インフラエンジニア要らないってのは理想。 そんなこと言ってない。アプリエンジニアがやるべきことはアプリエンジニアがやって インフラエンジニアがやるべきことはインフラエンジニアがやれってだけ アプリがなんの言語で使ってるかなんて、アプリエンジニアが知っていればいい情報だろ 言語もそうだしアプリ動かすのにインストールしなきゃいけないライブラリやパッケージを、 アプリエンジニアに聞かないでわかると思うか? インフラエンジニアにはコンテナのイメージ渡すから、それを動かす環境を作ってくれればいい 中が何で動いているかなんか、知ったこっちゃねーだろ? それとも勝手にディストリやパッケージを適当に入れた挙げ句、ライブラリのバージョンの違いで 動かなかくて、その責任をとってくれんのか? どうせこういうことすら思いつかなかったんだろ? だからお前がアプリケーションが動くサーバー作ったことねーだろってわかるんだよ。 数日かけてDocker使って個人用のミニアプリ書いたぜ 内容はサーバーのとある情報を、別のマシンからブラウザで グラフで見れるようにする一種の監視ツール zabbix や nagios みたいに本格的な物はいらない。むしろおもすぎて邪魔 先に結論から言うと、このアプリを新しいサーバーで動かすには docker run -d -p80:80 -vなどのオプション --restart=always コンテナ名 とdockerサーバーが動くマシンで、たった一行実行するだけでデプロイは完了する (docker hubにイメージ置けるのであれば、本当にこの一行で終わり。 置けないならばプライベートレジストリから取ってくるように少し準備がいるだろう) これは個人用のアプリで1人でやっているが、もしインフラエンジニアに伝えるとすれば、 このコマンドとどんなオプション(環境変数)があるかを伝えるだけで終わり あとは必要なサーバーにデプロイしてくれるだろう もしDockerを使わずにインフラエンジニアがデプロイをしようとしたら大変なことになるだろう。 なぜかって?だってこれだけの情報じゃ、どんなサーバーを構築すればいいか インフラエンジニアにはわからないでしょ?何をインストールする必要があるのか? なんの言語が必要でどのパッケージを入れておかないといけないのか? スクリプトのパスは?どんなコマンドが必要なのか?などなど docker使えば、さっき書いたdocker run〜のコマンドだけで構築できるというのに。 >>304 めちゃくちゃ便利やでw 今(個人的に)作ってるのはアプリじゃないんだけど とあるサービスを特定の用途向けにカスタマイズしたもの 起動時に自作スクリプトで独自フォーマットの簡易な設定ァイルを解析して サービス本来の設定ファイルを生成してから起動する仕組みで、通常なら/etc/以下にある 設定ファイルをいじらなきゃならないのが、簡易な設定ファイルを書くだけでよくなる 中身は既存のプログラムの組み合わせだけど、同じサービスを提供する 別のプログラムを作ったかのように使える Docker使いこなせる人ってすごいな(皮肉ではなく) わざわざdocker使わんでもchrootでいいことにdocker使ってる人が結構いる chrootの親戚のGUIなし仮想アプライアンスに情熱を燃やせる謎 別スレではviの話で盛り上がるし日本人はビルジョイが好きなんだな >>308 chroot使うぐらいならDocker使うなー chroot用のディレクトリを準備するのでさえめんどくさい debootstrapだっけ、懐かしいな。 /procや/devのマウントとかも必要だし。 同じdebianでもDockerだと最小構成で用意されてるから ダウンロードの時間からして差があるし 誰かがDockerfileのようなものを公開してくれてるわけでもないし 懐かしくてちょっとググってみたけど、 あんな面倒なことやってたのかって思った >>309 自分だけの仮想アプライアンスを簡単に自作できるからねー 同じものを何度もセットアップしてるなら それが簡単になるので楽だよ せっかく頑張って構築したサーバーも HDDが壊れたとかOSのアップデートでおかしくなったとか 古くなってリプレイスで再インストールとかで やり直しになってしまうのはダルい 一度Dockerでイメージ作ってると 同じことを何度もやらなくてすむようになるからね それだけのことならVMや自作rpmでもあんま変わらん… あんまり変わらないから、何倍も簡単なDockerの方が良いよね まあ一応VMや自作PRMが何故Dockerに太刀打ち出来ないかと言うと、 まずVMは仮想マシンなんだ。だから既存のマシンに導入することが難しい 既存のマシン上で動いても、仮想マシン故にネットワークに新たなマシンが登場するのと一緒だし、 NATで動かすならDockerに近い形状になるがメモリリソースを無駄に消費するし起動が遅い。 Dockerみたいにコマンド実行の速度で起動できない 自作RPMはDockerと真逆の考え方だな。実行環境を含めて依存しないようにしてるのに 頑張って他のパッケージとの依存関係を解決しないといけない 適切な依存関係になるように自作PRMを作る大変な作業が待ってる。 自作PRMは可搬性がないからWindowsで動かせないってのもあるな ようするに、 1. 既存の○○と同じことができる 2. かつ既存の○○の問題を解決できる これがセットになってるのがDockerなわけで 1.の既存の○○でもあんま変わらんと言われても 既存の○○は2.の問題があるでしょって話 ___ / ノ '' ⌒\ / ( ● ) (● )\ ドヤーーーーー / :::::⌒, ゝ⌒:::::\ ーーーーーーー!!!! | ト==ィ' | _,rーく´\ \,--、 `ー' / . ,-く ヽ.\ ヽ Y´ / ー ´ノ ` ー-、 { -! l _」_ノ‐′/\― 、 ,−/_| ∧ . ヽ ゙ー'´ ヽ / フ \ /ヽ /ハ `ゝ、 ノ ノ \ ヽ / / _|\∧∧∧MMMM∧∧∧/|_ > < . | ヽヽ | _/_ヽヽ | ヽ| |ヽ ム ヒ | | . ├─  ̄T ̄/ / /  ̄フ| ̄ | ̄| ̄ 月 ヒ | | . |. \ / ノ / | / | ノ \ ノ L_い o o 一生懸命に覚えたことをレポートにまとめてるんだよ。 見守ってやろうぜ。 >>322 知ってる。昔会社で使ってた。 だけどあれじゃ俺がやりたいことを満たせないんだよ 機能は高機能だけど、あそこまでいらない いわゆるインフラ屋はDockerを使って ディストリによってパッケージが用意されてるようなものを Dockerイメージ化するという発想になりがちに思える つまりDocker使わなくても、普通にパッケージ入れたり VM使えばいいだろという発想 違うんだよね。Dockerは独自に開発したアプリのために使う 独自に開発したアプリは、誰かが依存関係を 解決したりしてくれないからね だからアプリが動く環境も含めてDockerイメージにする そうすりゃDockerさえ動いていれば、簡単にどこでも動くものが作れる >>324 ___ / ノ '' ⌒\ / ( ● ) (● )\ ドヤーーーーー / :::::⌒, ゝ⌒:::::\ ーーーーーーー!!!! | ト==ィ' | _,rーく´\ \,--、 `ー' / . ,-く ヽ.\ ヽ Y´ / ー ´ノ ` ー-、 { -! l _」_ノ‐′/\― 、 ,−/_| ∧ . ヽ ゙ー'´ ヽ / フ \ /ヽ /ハ `ゝ、 ノ ノ \ ヽ / / _|\∧∧∧MMMM∧∧∧/|_ > < . | ヽヽ | _/_ヽヽ | ヽ| |ヽ ム ヒ | | . ├─  ̄T ̄/ / /  ̄フ| ̄ | ̄| ̄ 月 ヒ | | . |. \ / ノ / | / | ノ \ ノ L_い o o VMはカーネルやデバイスノードがゲストに独立して用意されているからサンドボックスとして安心できる これらをホストゲストで共有してるDockerは、ライフラインを共有しているゲストハウスみたいなもの カーネルぶんのメモリ(敷金礼金)は浮くがinit以降のメモリ(賃料)は当然払わなければならない 起動も10秒以下の差 つまりデスクトップならVM常道 あぁ、またこれな > 1. 既存の○○と同じことができる > 2. かつ既存の○○の問題を解決できる > これがセットになってるのがDockerなわけで VMでもDockerでもサンドボックスとして安心できる その上で、VMよりも軽いのがメリットなわけで 起動も10秒以下の差とかそれで勝負になると思ってるのか? Dockerは1秒以下 $ time docker run -it alpine echo ok ok real 0m0.924s user 0m0.046s sys 0m0.031s メモリ使用量はこんなもん $ docker stats CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS d68483bb9e21 vibrant_raman 0.00% 868KiB / 30.38GiB 0.00% 5.89kB / 0B 0B / 0B 1 $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d68483bb9e21 alpine "sleep 1000" About a minute ago Up About a minute vibrant_raman ディスク使用量も少ない $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE alpine latest 11cd0b38bc3c 4 weeks ago 4.41MB マシンリソースを無駄にすること無く、サンドボックスを動かせる > CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS > d68483bb9e21 vibrant_raman 0.00% 868KiB / 30.38GiB 0.00% 5.89kB / 0B 0B / 0B 1 ちなみにこれ、メモリリミットが30.38GiBとなってる GPUメモリに1GB使ってて、つまり32GBのメモリを搭載したマシンなんだ なんで(個人PCなのに)こんなにあるのかと言うと、 6年ぐらい前にOpenStack使ってプライベートクラウドを作るために たくさんの仮想マシンを起動できるようにとMAXまで積んだんだ (ちなみにDockerの登場は5年前の2013年) 仮想マシンだと、最低でも1台で数GBは欲しいでしょ? VM1台で平均2〜4GB割り当てるとして、約10台分。 プライベートといってもクラウドならこれぐらいほしいよね。 でもDockerが登場してプライベートクラウドの熱も冷めた (本物のクラウドを使うようにしたのでもはやプライベートで作る気はない) DockerならVM単位での起動じゃなくて、アプリ単位での起動になるので、 メモリは実際に使用した分しか使わず必要なメモリ量もぐんと減った 用途に対してかなりオーバースペックなPCになってしまったよw > カーネルぶんのメモリ(敷金礼金)は浮くがinit以降のメモリ(賃料)は当然払わなければならない あ、ちなみにこれ間違い 仮想メモリ間でのメモリ共有は一部のVMに搭載されているが(セキュリティのためにデフォルトは無効のようだね) https://docs.vmware.com/jp/VMware-vSphere/6.5/com.vmware.vsphere.resmgmt.doc/GUID-F9111E35-E197-46EC-8350-77827A5A2DEC.html#GUID-F9111E35-E197-46EC-8350-77827A5A2DEC 基本的に仮想メモリ間でメモリは共有されないし、 当然空きメモリも共有されない 2GBのメモリを割り当てたVMは、その中でどんなに小さいプログラムを 実行しようがメモリは2GB使用する VM(カーネルメモリ + プロセスメモリ + 空きメモリ) VS Docker(プロセスメモリ) という比較になる。 Dockerだってカーネルメモリ使用するじゃん、なんで右側に書いてないのか?と 思うかもしれないが、ホストのカーネルを共有してるんだからこれで良い。 VMだって同じようにホストのカーネルメモリ書いてないだろ? ___ / ノ '' ⌒\ / ( ● ) (● )\ ドヤーーーーー / :::::⌒, ゝ⌒:::::\ ーーーーーーー!!!! | ト==ィ' | _,rーく´\ \,--、 `ー' / . ,-く ヽ.\ ヽ Y´ / ー ´ノ ` ー-、 { -! l _」_ノ‐′/\― 、 ,−/_| ∧ . ヽ ゙ー'´ ヽ / フ \ /ヽ /ハ `ゝ、 ノ ノ \ ヽ / / _|\∧∧∧MMMM∧∧∧/|_ > < . | ヽヽ | _/_ヽヽ | ヽ| |ヽ ム ヒ | | . ├─  ̄T ̄/ / /  ̄フ| ̄ | ̄| ̄ 月 ヒ | | . |. \ / ノ / | / | ノ \ ノ L_い o o ま、そもそもVMとDockerは違うもので、両方を組み合わせて使うものなんだけどね クラウドを使っていればわかるはず。 VMを増やすと金はかかるが、新しいスペックのマシンを 手に入れることで、クラスタの合計性能が増える Dockerコンテナを増やすだけじゃ、クラスタの合計性能は増えない Dockerコンテナは一つの(仮想)マシンの中でCPUやメモリを 無駄にすることなく(サンドボックス化された)プロセスを複数起動したり アプリのデプロイを用意(手元で動いたイメージをそのまま使うとか)にするために使う 目的が違うものなんで、Dockerの代わりにVMを使うとか VMの代わりにDockerを使うとかいう発想がそもそもズレてる >目的が違うものなんで、Dockerの代わりにVMを使うとか >VMの代わりにDockerを使うとかいう発想がそもそもズレてる そこだけは同意だな そこまで理解できたなら賢いじゃないか >>334 何年も前から理解してるぞw VMとコンテナをごっちゃにするなって書いたのは、違うスレだったか? 例えば>>76 とか書いたの俺だが > なぜならkubernetesの場合コンテナのオートスケールになるわけだけど > 起動しているVMの中でコンテナをオートスケールするだけなので > VMの数もオートスケールしないとコストは下げられないから VMとコンテナは使い方が明確に違う(ことを理解してなきゃこんなこと書けない) 物理マシンもVM(仮想マシン)も、俺にとっては同じマシン扱いなんだわ 形あるハードウェアで形作られてるかそうでないかの違い。 そのマシンにアプリをデプロイする時にDockerを使えば、 そのアプリは同じマシンの他の環境の影響を受けないので 簡単にデプロイできる。 Dockerのメリットはアプリの配布と実行環境なんだよ 「アプリ+実行環境」でコンテナ化されるから、 LinuxやMacやWindowsに持っていっても動く。 簡単にまとめるなら、 マシン(物理 or 仮想)の中 に アプリ(パッケージ or Dockerイメージ)をインストール ってこと。 アプリをサンドボックス化するためにマシンを作るとか重すぎでしょw まさに牛刀割鶏、鶏をさばくのに大きな牛刀を使うようなもの それから「デスクトップ環境」の話 これはアプリか?って問われれば、アプリだと思う人はいないよね 複数のアプリを連携して作られた環境 仮にデスクトップ環境を作るならば、Dockerコンテナはアプリに相当するのだから、 複数のDockerコンテナを連携させるという話になる。 デスクトップ環境を構成する複数のアプリを一つ一つDockerコンテナ化していって 連携させるとか、大変なだけの環境の再発明でしか無い ここからもわかるように、デスクトップ環境(=複数のアプリ+連携)なので Dockerコンテナ(=アプリ)と比べるものでないのは言うまでもない話。 デスクトップ環境は誰かが大変な思いをして構成したものを使っていればいい。 物理マシン or 仮想マシン で動いてるデスクトップ環境やらCLIやらsystemdやら。 そこから起動する一つのアプリ、それがDockerコンテナ相当なんだよ GitLab運用してるんだが, CIで使うビルド環境とかは明らかにDockerないしはKubernetesが優秀 一時Docker-Compose on VMでやってたけど使い捨てVMを構築する処理が重くてしょうがなかった(しかも遅い) スタンバイ状態のビルド環境VMを2つも作るともう限界だが, Kubernetesなら5個くらいPodをスタンバイさせてても余裕だし新規Pod作成も早い(Docker単体なら10コンテナ並走でもいける) 夏休みだな お前らが当たり前過ぎて書かないこともこうやって書いてあれば誰かの役に立つのだろう >>339 Kubernetesって使用メモリ多くない?1GBぐらい使ってた気がするんだが だから使わないってわけじゃなく、もうデファクトスタンダードに なりつつあるから避けようがないと思ってるけど Docker-Composeは開発者用だと思ってるよ。 ローカルマシンで複数コンテナを組み合わせる時の面倒さを解決するもの >>340 お前のその書き込みは誰の役にも立たんけどなw Docker-composeで使い捨てVMを構築するのが遅いというところがよくわからない。VM(dockerホスト)は一回構築したら終わりで、後はそこにコンテナを作ったり消したりするだけじゃないの? >>343 今までの話の流れからすると、CIでテスト実行するたびにVMの作成と破棄をしていたってことでしょ? >>327 がVMでも10秒以下の差しか無いから問題ないみたいなことを言ってるから (VMの中でDocker-Composeが動いてるのは、この話にあまり関係ない) 当たり前だけどDockerコンテナの起動に比べればVMの起動は遅い 起動の差を10秒以下にするには、VMのイメージを作ってないと不可能 あとできればSSDとかクラウド使うとか。それでもDockerの1秒に比べたら遅い そして肝心のVMのイメージを作成するのに時間がかかるっていうねw Dockerの場合はアプリの実行環境が含まれる。だから構築に時間がかかるVMは 色んな種類のアプリのテストに使い回すことができる。 Dockerを使わないなら、アプリを動かすためにVMのイメージに 実行環境を含めないといけない。当然アプリごとにVMのイメージが必要になる。 DockerでもアプリごとにDockerイメージが必要になるのは同じだが Dockerはキャッシュがあるから、Dockerイメージの作成は短時間でできる。 VMだとキャッシュはないし起動に10秒かかるし、作成したイメージの サイズもでかいし頻繁にVMイメージの作成なんかやってられないよ 今までVPSとかで動かしていたものをコンテナ化してGCE辺りに移そうと思うんだけど DBの保存や出力したファイルの保存はみんなどうやってるの? 結局マウントできるディスクが必要なんじゃないかってところで今頭を抱えてる >>345 まずアプリサーバーとデータサーバーを分けて考える。 Dockerでやる価値が高いのはアプリ アプリサーバーには原則としてデータは保存しない その前提を守っているならば、簡単にスケールできる (VMインスタンスやDockerコンテナを追加することで性能をあげられる) という話。 その場合にデータはどうするかと言うと、 データサーバーはアプリサーバーみたいに簡単に 台数を増やしたりできない 一番楽なのは、難しいそれらをクラウドが提供するサービスに置き換えてしまうこと。 つまりGCPであればCloud SQLやCloud Storageを使う これらは信頼性も性能も(金額次第だが)高くできる。 >>345 どうしても自力でやりたいならば、Dockerのボリュームという 機能を通してホスト上に保存するのが一番手っ取り早い 例えばMySQLであれば データディレクトリである /var/lib/mysql をホスト上のディレクトリにボリュームで マッピングさせる MySQL ぐらいだったらシンプルだし事例も多いので簡単なんだが 何処に何を保存するのかよくわからんようなアプリは それを把握することに時間を奪われるだろう >>345 > 結局マウントできるディスクが必要なんじゃないかってところで今頭を抱えてる 結局マウントできるディスクが〜というのは 初心者がよく考えてしまうことなんだけど、 これは当たり前 なぜなら(物理マシン or 仮想マシン上で動く)Dockerコンテナっていうのは (物理マシン or 仮想マシン上で動く)アプリと同質のものだから。 単にアプリの実行環境が、コンテナとしてアプリに一体化してるに過ぎない アプリはデータを何処に保存する? 物理マシン or 仮想マシン上のディスクでしょう? だからDockerコンテナもそれは同じことなんだよ Dockerコンテナを使った時データの保存先をどうすれば良いのか悩むのは Dockerコンテナがアプリと同質のものであることを理解してない証拠 最近コンテナってものを知ったんだけど、上の説明だとフラットパックってのとの違いがわからない スタンダロンなアプリじゃなく、ソフトウェア群の、何かしらのフロントエンドにドッカーが向いてるってこと? コンテナ自体が非常に難しい概念なんだよ どうもLinuxの世界で発祥したもので、昔からLinuxやってる人でないとわからないらしい 「最近流行りのDockerなるものをやってみたい」というヤツには到底無理(俺含め) Solarisのゾーンがコンテナの先駆けじゃない? FreeBSDのjailとか? cgroupの概念は含まれてないけどね >>350 説明してる奴が「難しいこと理解した俺スゲー」ってのを 自慢げに小難しく語るのが問題なだけ プロセス分離のためにcloneを拡張して名前空間を追加したよ cloneだけだと不便だからunshareとsetns追加したよ cgroupでVMのごとくリソース分配可能にしたよ コイツラ直接イジるのは面倒だからコンテナエンジン作ったよ 基本この4ステップだけじゃねぇの? …って言う俺もコンテナのこと全然知らんのだが >>350 技術を理解するのと目的を理解するのをごっちゃにしてるから Dockerが解決する問題は(主に自分が作った)アプリをいろんな環境で 動かそうとしたら、アプリをぽんとインストールするだけじゃ動かなくて、 そのアプリが依存してるなにかまで環境を整えなきゃならないだろ? だから発想の転換でアプリ自体に環境を入れてしまえばいいじゃないかってこと。 外部ライブラリを全部アプリに静的リンクするの発展形だよ まずそこを理解しないといけない 技術だけ理解すると、やれjailがなんだとかcgroupがなんだとか、 そればっかり言って、なんのために作られたのかという目的を見失う。 その結果、同じ技術を使った応用例のVMの代わりにするのが目的だと勘違いする コンテナという技術を知るのではなくて、どんな問題があって それを解決するものがDockerなんだって理解するのが先 補足だが、 > (主に自分が作った)アプリをいろんな環境で なんで「自分が作った」と書いているのかというと 他人が作って、ディストロに収録されているものは、 それ動かすための、環境もすでに整えてあるから それがディストロの大変な仕事なわけで。 だから自分が作ってないものを動かしてるだけの人は (物理マシン or 仮想マシンの上に)ディスロの環境整えられてる パッケージ入れて使っても同じじゃんって思ってしまう。 技術は理解していても、そもそもの問題を理解していから Dockerが必要な理由もわからない >>349 フラットパックってのがよくわからない。 一般的な用語?ググっても見つからないんだが。 > スタンダロンなアプリじゃなく、ソフトウェア群の、何かしらのフロントエンドにドッカーが向いてるってこと? 既存のいろんなものをつく合わせて スタンドアロンなアプリを作りましょうって話。 何かをやるためにDockerを使うと便利なんじゃなくて、 Dockerは「とある物」を作るための道具だよ その「とある物」っていうのがスタンドアロンなアプリ 動かしたいアプリが、動かすのにアプリ以外の環境を整えることが 必要なアプリであっても、Dockerを使えばアプリに組み込んで スタンドアロンなアプリに作り変えることができる Dockerはスタンドアロンなアプリを「作るもの」 であって「動かす環境」ではないんだよ そこを根本的に間違ってる人がいる。 カタカナでググったから見つからなかったのかw Linuxデスクトップ向けアプリケーション仮想化機構「flatpak 0.6.13」リリース https://mag.osdn.jp/16/10/26/153000 > Linux向けのアプリケーション仮想化技術「flatpak」開発チームは10月25日、 > 最新版「flatpak 0.6.13」を公開した。プロジェクトのWebサイトより入手できる。ライセンスはLGPL。 > > flatpak(旧名称「xdg-app」)は、Cで実装されたLinuxデスクトップアプリケーション向けの > 仮想化機構。アプリケーションをOS環境とは切り離されたサンドボックス環境内で > 実行することでセキュリティを高め、またほかのアプリケーションからの干渉を最小限にできる。 > サンドボックス環境の構築にはcgroupsやseccomp、ネームスペース、バインドマウントなどの > Linuxカーネル技術やOpen Coutainer InitiativeのOCIフォーマットなどを利用しており、 > 単一のアプリケーションパッケージをさまざまなLinuxディストリビューションで動作させることができるという。 Dockerのアイデアをパクってデスクトップアプリ用にした技術だね 技術的にはかなり近いものを使ってるし、OCIフォーマットは Docker社 vs CoreOS社の標準化争いで生まれたものだし 違いがわからないというのなら、その言うべき相手は 後から登場したflatpakに言うべき言葉だろう なんでflatpak作ったの?Dockerでいいじゃない?と。 > なんでflatpak作ったの?Dockerでいいじゃない?と。 この質問に自己レスする前に 第513回 新しいパッケージの仕組み,Flatpakを使用する http://gihyo.jp/admin/serial/01/ubuntu-recipe/0513 > FlatpakとSnapsの最大の違いは,Flatpakはアプリケーション専用で > あることでしょう。よって,GUIアプリケーションであれば > Flatpakのほうが快適に使用できるものが多いのですが,実際はケースバイケースです。 本当にGUIアプリ専用だったのか? Flatpak・Snaps も Docker も「使う側」の視点と「作る側」の視点がある Flatpak・Snapsはどちらかといえば「使う側」が焦点となっており こんなパッケージを用意しましたから使ってくださいって感じだろう。 エンドユーザーがデスクトップPCで使うアプリ用 Dockerはどちらかといえば「作る側」がメインなのでアプリのインストールや実行はCLI、 そしてGUIアプリは作れなくはないがメインのターゲットではない。 主に開発用のツールや自社開発のウェブサービスを構築のためによく使われている Dockerは「作る側」がメインなので何度も言ってるように、アプリエンジニアにこそ必要なもの。 だからパッケージ入れて(ちょっと設定して)使うだけのインフラエンジニアはVMの役割とごっちゃにしやすい 自分専用にカスタマイズしたアプリを作りたい人はDockerを選ぶのでは? Flatpakでパッケージの作り方を調べてみたが、 Dockerfile書くだけで作れるDockerよりも大変そうに思える なんでflatpak作ったの?の答えは、エンドユーザーのために作ったパッケージを、 もっと使いやすく提供したいためだろう。 別にコンテナの用途限定する必要は無いと思うけどなぁ。便利に使えたらそれでいいし。Dockerを○○に使うなって言うならその代替案も言って欲しいけど言わないし、仮に言えたとしてもそれはDockerで実現した方が簡単というオチになるのが目に見えてるし。 正しさとは都合。正しさを振りかざすのは自己満足を他人に押しつける行為。 ドッカーのスレだから、ドッカー万歳な人がいてもおかしくないよ >>368 > 別にコンテナの用途限定する必要は無いと思うけどなぁ。 制限なんかしてないよ? コンテナの用途は、アプリケーションコンテナや システムコンテナといった使い方がある。 だがここはDockerのスレなんだからDockerの話をするべきで、 Dockerはアプリケーションコンテナとして設計されてるのは事実 だからコンテナを違う用途で使いたいなら、 別のスレに行くのが適切ってだけの話 > Dockerを○○に使うなって言うならその代替案も言って欲しいけど言わないし 何に使いたいのか言わないから言いようがない どうせシステムコンテナなんだろうが、 システムコンテナとして使いたいなら LXD や OpenVZ を使えばいいだろ? ほらよ。スレ立ててやったから コンテナを仮想マシン代わりとして使いたいならそっちに移動しろ LXD コンテナを仮想マシンとして使う (Not Docker) https://mao.5ch.net/test/read.cgi/linux/1534223977/ LXDやOpenVZなんて知らんし、もしスレたてるとすれば仮想マシンとしてDockerを使うスレにするべきでしょ? なんでそんなにDockerを仮想マシンとして使わないように誘導するの?おかしくない? Googleクラウドは仮想化なんか使ってなくて、物理サーバにコンテナ立ち上げてるらしいけど、あなたはGoogleがコンテナ使い方間違ってるからGoogleのインスタンス使うなって言うわけ? Dockerの使い方を縛らないと言いつつサーバ用途には使わせないように誘導するのすごく卑怯だよね。 声がでかくて社内政治だけがうまい奴に似てて、あなたに物凄い嫌悪感を持ったよ。 https://stackoverflow.com/questions/17989306/what-does-docker-add-to-lxc-tools-the-userspace-lxc-tools > Versioning. Docker includes git-like capabilities for tracking successive versions of a container, inspecting the diff between versions, committing new versions, rolling back etc. > The history also includes how a container was assembled and by whom, so you get full traceability from the production server all the way back to the upstream developer. > Docker also implements incremental uploads and downloads, similar to "git pull", so new versions of a container can be transferred by only sending diffs. サンドボックスとしてDockerを使うメリットってこれかな? コンテナ知らん俺でも強力だとわかる お前ら暑いからってイライラするなよな… git likeを謳ってるからDocker hubなんかもあるのな flatpakのflathubよりは随分開発寄りな印象を受ける…サインインしてないけど ご興味のある方はどーぞ https://hub.docker.com/ https://flathub.org/ >>366 > LXDやOpenVZなんて知らんし、 無知を告白されても、勉強したら?で終わる話なんだが 知らないほうが悪いんですよ >>366 > なんでそんなにDockerを仮想マシンとして使わないように誘導するの?おかしくない? なんで仮想マシンの代わりとしてコンテナ技術を使うものがあるのに 仮想マシンの代わりとして使うことを想定してないDockerを無理やり使うわけ? その方がおかしいでしょ。 どうせ間違った使い方をして、使いづらいと文句をいうのが目的なんだろう? ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる