Docker Part4
■ このスレッドは過去ログ倉庫に格納されています
Linuxが持つコンテナ技術を使った、仮想マシン必要ないアプリケーション仮想化技術で アプリケーションのデプロイが用意になります Docker(アプリ仮想化)は仮想マシンと併用して使うことで最も効果を発揮し 開発・テストで使ったDockerイメージと全く同じものを本番環境で使えます さらにWindowsとmacOSでも同じDockerイメージが動きます。 (Linuxは仮想マシンが不要ですが、WindowsとmacOSは仮想マシン技術を併用して実現しています。) Dockerイメージ(Dockerfile)はアプリケーション開発者が作成します 動かすのに必要なもの全てがDockerイメージに含まれるので インフラ担当者はそれを動かすだけ、本来のインフラの作業に集中できるようになります Dockerは主にウェブ業界でサービスのデプロイの必須技術になりました 情報共有しましょう http://www.docker.io/ 前スレ Docker Part3 https://mao.5ch.net/test/read.cgi/linux/1552023620/ 注意 同じコンテナ技術を使うが異なるアプローチで仮想マシンの 代替を目指しているのがLXC。目的が全く異なるので注意 LXC(Linux Containers) https://mao.5ch.net/test/read.cgi/linux/1330826939/ 外部に公開するのは、 BB ルーターのポートフォワーディング・ポートマッピング・静的IP マスカレードの設定とか、 ファイアウォールのufw, netsh とか でも、素人が公開すると、すぐに乗っ取られるw ssh で、リモートログインの方が安全 nginx, python の組み合わせは、珍しい。 普通は、web サーバーと、フレームワークの組み合わせ nginx, Ruby on Rails とか、 Apache, WordPress とか >>726 ググってみたが、資格のページ無くないか? podman 見た感じだとわるくないんだけど、Red Hat のかじ取りというかやり方が微妙であんまり流行らないだろうなとは思う pythonでdjangoとか使いますし nginxと組み合わせるなんて珍しいとは思いませんよ >>734 > podmanになるかは知らないけどDockerが何かに置き換えられるの可能性はあるだろうね。 当たり前だろ。「いつまでに」って期限をつけないならいつかは置き換えられる。 Linuxだって置き換わるだろ。100年後、200年後までLinuxのままだとは思えない。 >>742 https://prod.examity.com/docker にある。アカウント作ったら入れる。トラブったらチャットの人が即座に解決してくれる。 >>745 そういう非現実的な話はしてないな。 デーモンじゃマズイ、と言っているんだからその問題が無視できくなれば 置き換わるだろ、と言うか自分たちが作ってるクラスタは置き換わってるし。 (あるバージョンからコンテナランタイムのDockerが消えた) >>744 まあそうだよね。 nginx+pythonで珍しいとか意味が解らんね。 自分が使ったことない物をめずらしいって言ってるだけだろうから無視していいよ >>747 だから世間がいつまでに置き換わるか言ってみ 当たるか当たらなかいかじゃなくて、お前がどれだけ 自分の説に自信と信念を持ってるかを判断してるんだよ それとDockerはrktに置き換わるんじゃなかったっけ?w pylay with dockerでdjango+mysqlいけたけど ロケットのおなじみの画面が表示されなくてALLOWED_HOST=['*']にすればいけた あとchromeだとhttp:// が弾かれることに気づかず(表示できたりできなかったりするので)めちゃくちゃハマった糞が >>731 知識は役に立たないけど、経験は役に立つということなんだろうな。 Dockerコンテナ作れるから、もう安心ということにはならないな。 また、別の新しい技術が登場する。 前の知識は役に立たない。 役に立つのは、試行錯誤や理解に必要な経験だなあ。 こういうのを結晶化なんとかというのだろう。 表面的な知識は異なれども、それを成り立たせる思想には共通するものがある。 こう考えると、特定のアプリ技術に関する資格なんて無意味だな。 IPとか、低レベルの技術はなかなか変容しないから、そのあたりの資格はあっても良いと思う。 >>753 代替ツールを流行っても居ないのに、これからはこれ!とか 言ってる奴は大概、役に立たない知識で終わっちゃうよね ツールの使い方じゃなくて、考え方を理解してる人は、 後からでもすぐに理解できるから、焦って未熟な段階で使う必要がない ノウハウがたまってバグがあらかた解決してからでも遅くないし Docker, Docker Compose は、本番では使えないから、 最も重要なものは、AWS, Kubernetes Linux 財団のCloud Native Computing Foundation(CNCF)の卒業プロジェクトも。 Kubernetes, Prometheus, Envoy, CoreDNS, containerd, Fluentd dockerの入門書にk8sも記述されていることもあるけど k8s使う場合って複数サーバが必要になりますよね? k8sって重過ぎじゃね? 特にetcdが minikubeも色々入れたらすぐ遅くなった k3sだと小さなサーバー1台でも使える、データベースにsqliteとか他のも使えるらしいが デメリットある? sqliteはHAに対応してない dqliteはsqliteの分散版で、HAに対応してるが実験的 と言うのは知ってる https://rancher.com/docs/k3s/latest/en/installation/ha-embedded/ >>761 そのとおり。VMインスタンスで最小スペックだとメモリ4GBほどだが k8sはそのうち1GBほどかっさらっていく 最小スペックのマシンは実質使い物にならなくなる k3sはdqliteじゃなくてembedded etcdになるらしい それって軽いの? k8sもメモリ食い過ぎだが、fluentdも酷い たかがCPUとかメモリ使用率を取得するだけで数百MBもメモリを使用する Ruby製なのが原因か知らんがC言語で作っていれば10MB程度しか食わないだろう fluentd_v1.11使っているが2週間くらいでElasticにデータ渡さなくなる症状に悩まされているよ docker-compose restartを定期期にする必要がある k8sとかが、いったい何をしてくれるのか全然わからない。 全然わからないから、使う気にもなれない。 概要を読んでみても、まるで遠い話をしているみたいに聞こえて、必要性を感じられない。 だから、自分は素のままでDockerコンテナ使ってますよ。 何か一つこんなことができるよ的なことってないですかね。 クラスタ組まないならcomposeでおk クラスタ組む場合も自前ならswarmのほうが何かとお手軽で安定してる composeもほとんどそのまま流用できる AWSなんかはcomposeにも対応してるから今は無理してk8sを使う必要はない k8s は、Auto Scale, Rolling Update, blue/green deployment データセンター分離・ラック分離、多数決で意思決定 可用性・スケールアウトとか、全体の安全性が高い Terraform も良い >>770 やっぱり、遠い話、雲の上の話 ぜんぜんぴんとこない docker環境で開発をしている人に質問なのですが 本番環境は別にdockerfile(もしくはdocker-compose.yml)を作っていますか? 本番環境ではソースコードをイメージの中に入れたいのですが 開発環境ではソースコードはホスト側に置いて、マウントしたいです (開発中に1行書き換える度にイメージ作り直す訳にいかんし) とはいえ別ファイルにすると(ソースコードをマウントしている)開発環境では動くけど、(ソースコードをイメージの中に含んでいる)本番では動かない という可能性も出てきてしまう気がして、一般的にはどうしているのかを知りたいです 動画配信サイトとか高負荷かつ安定稼働を求められるシステムなら採用する価値はあるかもね でもなんとなくK8S使ってみたかった程度の気持ちで無意味に使ってる人も多い >>772 開発と言っても「実機と同等の構成で動かしてみる」というのも含まれるけど 一般にソースコードを修正してデバッグしてみたいな開発作業中は Dockerを使わないよ 今はWindowsでもWSLがあるし、Dockerを使わないで開発やテストができる いちいちDockerの中に開発ツール(ビルドツールやらlintツールやや) 入れなくていいから一番快適だしね。 その上で開発プロセスの一環として実機に近い環境で テストしたいときはDockerを使う >>772 テストはイメージ作ってやるから問題ないよ K8Sは金がふんだんに有り余ってるようなところが使うようなイメージ 金を使って広大なK8S用クラスタを組んで、必要になったらコンテナ起動するけど 普段はクラスタの中に空きがあって、その部分にも金がかかってる それでもOKな所が使ってる それともK8Sを使ってコストを最小化するような話聞いたことある? >>772 Dockerfileは同一で、開発時はソースコードをADDしてるディレクトリに、バインドマウントしてあげるだけで良いのでは。 >>777 そう簡単な話ではない。開発用イメージには、運用用イメージに加えて 開発用のツールやライブラリを含めなければいけない どちらにしろ、開発用イメージはそのまま運用で使うことはできない これが大前提。だから別々に作らなければいけないが それするぐらいなら開発にはDockerを使わないほうがいい 使用する言語のバージョンやライブラリを統一するのは Dockerを使わずともできる >>778 うん、そういうケースがあるのは分かるけど、ライトなWeb開発とかだとこれで必要十分なことも多いよね。 あとは商用向けはマルチステージビルドで成果物だけ持ってくるとかできるし。 開発者の裁量で好きなように開発すればいい テストさえしっかりしてれば何も問題はない しかし好きにしろとは言ってもプロジェクトとして推奨構成をas codeで提示したほうが親切だろうな ならDockerfileとdocker-compose.ymlが最も手軽だろう >>772 >本番環境は別にdockerfile(もしくはdocker-compose.yml)を作っていますか? 別です。 開発環境のDockerは本番機よりもっと簡略化されている サーバー証明書もオレオレ。 あくまでも、うちのケースの話ね。 >本番環境ではソースコードをイメージの中に入れたいのですが >開発環境ではソースコードはホスト側に置いて、マウントしたいです それで良いんじゃないの? 開発環境はdocker-compose.override.ymlで開発担当部分のみvolumesで上書きとか。 >とはいえ別ファイルにすると(ソースコードをマウントしている)開発環境では動くけど、(ソースコードをイメージの中に含んでいる)本番では動かない という可能性も出てきてしまう気がして.. 何故、開発機の次が本番機なのさw? テスティングやステージングは?問題があるなら、そこでわかるでしょう。 k8s は、マスターは多数決で決めるから、分散数は奇数にして、3, 5, 7 個 ラックの電源断に備えて、ラックも別々。 データセンターの災害に備えて、データセンターも別々 こんな安全性を考えるのは、大企業 Ruby on Rails の場合は、Heroku, Cloud9 が最短。 git push するだけで、デプロイ完了! 他には、CircleCI, Capistrano Chef, CookPad 製のItamae Terraform ネットワーク分断の場合に、 どれがマスターに格上げされるかを、多数決で決める 多数決には過半数が必要だから、ミニマムで、2:1。 だから分散数は、3, 5, 7 個と奇数にしておく 2個は、1:1 になるから、過半数を取れない。 4個でも、1:3 なら過半数を取れるが、2:2 になったら過半数を取れない Raft という分散合意システムで、HashiCorp のConsul でも使っている そろそろスレチと言う気がしてきたな。 k8sの話したいのなら、航海1日目に行けよ。 >>786 奇数から1台死んだら偶数になって多数決で分断が起こるのでは? docker pull django:latestってやるとバージョンが1なんですけど 古くないですか? >>789 多数決と言っているのはクラスタを構成するノードに対する比率を言っているのでは? 3ノード構成で2ノード生きているなら継続するよ、と。 あと分断耐性で言っているのはネットワークなので必ずしもノードが死んでいるとは限らない様な気がする。 クライアントからノード1、2には到達できるけど、3に到達する為のルーターが障害とかね。 >>792 いえ、どうして2でもなく3でもないのかな、と。 これならdockerhubからよりもベースpythonでpipしないといけないような >>793 django2とか3とをpullすりゃ良いんじゃね? https://hub.docker.com/_/django DEPRECATED と大書きているだろうが。 はい非推奨は知っていたのですが オフィシャルイメージかつcopy and paste to pull this imageのプリントがそのままなので 他の方法やバージョン1でも問題がないのかと思っていました 非推奨と書いてあるのが読めて最終更新日からどれだけメンテナンスされてないか確認できたら 問題ないかどうか判断できるよね その判断の仕方だとどちらにも取れるのでは 問題かどうかは主にpythonのバージョンに依存するような・・ 要は問答無用で1は非推奨なのか、安定版なのか みたいな 「自分の環境にとって許容範囲かどうか判断できるだろ」って意味じゃないの だからどちらとも言う必要がない それはdjangoのほぼ全部の仕様把握してないと無理 Django のバージョンが分からないのは、おかしい。 自分で使うバージョンを決めるものだから Ruby on Rails なら、6 の本が有名著者で、6冊以上出ている。 黒田努、掌田津耶乃、パーフェクト・シリーズなど それに、5・6 の違いをまとめた本も出ている。 だから、4 は相当古いと誰でも分かる どうして急にRoRの話しだすの... こわいんだけど RoRの事しか知らないからだろ。 わかって無いけど会話に参加したい(デキる男感をアピールしたい) 初心者心理。 Dockerを仮想マシンのよう使う人って未だに居るんだな べつにいいでしょ ツールが使い方を決めるんじゃなくて人が使い方を決めるんやで 仮想マシンのように使うって具体的にはどういうことなんだろ Docker, Kubernetes は、immutable。 状態を持たない すべて破棄してから、作るのが基本。 サイボウズのkintone では毎日、破棄してから作っている AWS などを知らない香具師が、コンテナ内に状態を持とうとする。 クラウド・コンテナの機能の、区別ができない香具師 Cloud Native Computing Foundation(CNCF)の卒業プロジェクト、 Kubernetes, Prometheus, Envoy, CoreDNS, containerd, Fluentd 他には、はてなのMackerel, DataDog, Elasticsearch などを、知らない香具師。 コンテナを仮想マシンのように使うなって、延々と言われているw ググった単語を色々並べて、頑張ってるなw 散文詩みたいで意味がさっぱり通じないw 匿名掲示板でそんなに俺できるぜ感をアピールしたいの?なんで? その心理がサッパリ分からないw >>739 すいませんポート開くの忘れてただけだった $ docker run -itd -v /root:/var/www/html [イメージID] bash を $ docker run -itd -v /root:/var/www/html -p 8000:8000 [イメージID] bash とやればできた が、今度はcgi-bin内にアクセスしようとするとダウンロードになってしまう ・cgi-binとcgi-bin/sample.pyのパーミッションを755 ・sample.pyの一行目に#!/usr/bin/env python ・改行コードはLF とやっても PermissionError: [Errno 13] Permission denied: '/var/www/html/cgi-bin/sample.py' が出てしまう 自分のホストPCでローカル環境なら大丈夫だった あとplay with dockerでnginxを介した場合は大丈夫だった >>810 pythonのhttpdって誰の権限で動いてるんだろう? (分からないけど)/root/cgi-bin/ (?)に対する権限を持っているのだろうか? 結局コンテナに入ってプロセスの実行者とディレクトリの権限を確認しないと分からない気がする。 >>812 /var/www/html/cgi-bin/sample.py のvarもwwwもhtmlもcgi-binも 全部 chmod 755したら無事 ウェブからsample.py実行できた・・ 権限許可はvar/www/htmlの下のcgi-bin以下だけでいいのかと思ってた >>813 で、誰が動かしているのか理解して、0755にしたの? Docker compose stopでコンテナ止める時って結構時間掛かるのに OSに対してシャットダウン掛けると即時停まるんだけど これは本来保存されるべきデータが消えてる可能性ってある? サービスかなんかでシャットダウン時に自動で何かデータを書き出すような処理入れるべきなのかな? >>815 >Docker compose stopでコンテナ止める時って結構時間掛かるのに docker stopコマンドは10秒程度で止まるように優先度を掛けてくるから。 https://www.ctl.io/developers/blog/post/gracefully-stopping-docker-containers/ When you issue a docker stop command Docker will first ask nicely for the process to stop and if it doesn't comply within 10 seconds it will forcibly kill it. docker-compose stop --time=1 とかすれば、結構即時に近い形で止まるように見える。 動いてるコンテナの重要度は自分で把握しているだろうから、永続データ無いのなら time=1で良いんじゃね?とはいえmysql postgresとかあるなら危ないだろうけど。 VM上で動かしたとしても、そんなに早くは落ちないだろうし。 Dockerコンテナ内のcrontab -eで、デーモンのスケジュール再起動を任せたら、 oom Killerでホストが倒れてしまった。ホストにsshログインもできない状態に陥って大変あせった。データもっていかれるかと思ったが、再起動でなんとか復帰できた。 ホストは2GB程度だが、そのコンテナ内でこのデーモンは1G程度も消費する。 デーモンの再起動のタイミングで、メモリ溢れが発生したようだ。 そこで、ホストにおいて、docker restart コンテナとするようにした。 そうすると、メモリ溢れなく、安全にコンテナごとデーモンの再起動ができたので報告しておく。 >>811 香具師/野師/野士/弥四(やし)とは。 意味や解説、類語。盛り場・縁日・祭礼などに露店を出して商売したり、 見世物などの興行をしたりする人。 また、露天商の場所割りをし、世話をする人。 的屋 (てきや) 。 - goo国語辞書 そういうことじゃないから... アスペムーブやめてほしい >>818 コンテナ内で何のプロセス動かしてんの? >>822 iaxmodemだけなら小さい消費だが、 それらをfaxgettyさせてhylafaxに接続すると、 5倍くらいに膨れ上がった。 コンテナ内でのサービス再起動時にメモリが溢れるってのもよくわからんが、そのサービスの再起動の動作が特殊なのかね 再起動のための停止時には一時的にメモリ使うとか? コンテナごと再起動するなら内部のサービスは通常の停止(あるいは強制停止?)+起動だろうから、メモリに問題ないのはまあわかる どっちにしろdockerというよりサービス固有の事情に見える >>824 参考になります。 iaxmodemが始動されると、プロセスが生成されます。 その後、hylafaxを始動させて、 さらに別途faxgettyによって、両者を連結させるイメージです。(3者登場します。そのうち、iaxmodemと、faxgettyはたくさん。hylafaxとは、多対1の関係になっています。) >>823 のように、iaxmodemだけでは専有容量は僅かなんですが、 faxgettyさせると、膨れ上がります。 faxgettyは、hylafaxの関係者なので、 hylafaxがガーベージコレクトするようです。 以前テストした結果は、hylafaxの再起動時には、直ちにfaxgettyプロセスは消滅しました。 しかし、今回の環境ではそういう風にならなかったようです。 前回の環境はCentOS6でネイティブ、今回はCentOS7でコンテナです。 iaxmodemや、hylafaxのバージョンも上がっています。 いずれにしても、デーモンの再起動が特殊です。 逆に考えて、ネイティブ環境でも他の要因で同じ問題を引き起こすなら、 コンテナ環境であってよかったと思います。 docker restart faxContainerをcrontabでコンテナの外側ホストでスケジュールすれば良いのですから。 コンテナ内部でそういうデーモンの消滅のスケジュールを組むと、イメージ化されていることからタイミングの変更が困難になるので、 せっかくの利便性を損なうと思いました。 docker restart faxContainer は素晴らしいです。 俺はどちらかといえば「Dockerコンテナは仮想マシンじゃない」方の思想に近いから コンテナごと再起動するのは普通というか自然だけど荒れるかな そもそも個別ソフトの事情でメモリ食いすぎるなら、ホストでOOM起こすくらいならコンテナにリソース制限するのがいいのでは Linux上でchrootを仮想マシンと思うやつは、どうにかしている。 >>826 荒れるっていうか・・・・ その事に対してコダワリ持ってるのって一人だよね? 殆どの参加者は、そもそもどうでもいい話題で、そいつの書き込みに 反応するのは、そいつがなぜ、VMじゃないからどうのこうのと反発する 必要があるのか分からないから。 イスラム原理主義者に向かって暴力行為やめろよ。そもそも宗教なんて どうだって良いだろ?と言うのと変わらない。 0番の親プロセスから連鎖的に、必要な環境(ディストリ標準体系)を組みた立てていくということを、「仮想マシン」とよんでいるだけですよね。 それに対して、例えば、helloworldバイナリを実行するだけなのが、非「仮想マシン」ということですよね。 前者は、systemctlによるコントロールができて楽です。 また、アプリを構成するデーモンに依存関係がる場合はとても楽です。 しかし、後者はそういう構成を組むのに別途考慮が必要になるのでお手軽さがなくなり、せっかのコンテナがとっつきにくくなってしまいます。 こういう認識を持っているのです。 >>829 必要な環境(ディストリ標準体系)と言いましたが、最初にcentos7をdocker ハブから引っ張ってきているので、標準体系にはならないですよね。 最初に何が入っているのか知らないけど、 docker run --privileged -d --net=mynetwork --name centos7 centos:centos7 /sbin/init のようにすれば、いわゆる「仮想マシン」風の操作性のコンテナができます。 あとは、yumなどでパッケージを導入すれば、 systemctlで制御ができます。 --net=mynetwork に指定するネットワークは、自分で作成が必要になります。 LAN に対して、ポート開放もいらなくなります。 ipfilterで制御するだけです。 --net=ネットワーク名 を指定しないと、インターネットへの穴を開けてしまって危険。 ネットワークの知識がいるので、 これが唯一難しい点ではないかと思います。 個々のコンテナの中でsystemd動かしてrsyslogdでログ出してlogroteteまてやるとか無駄の極み 動かすプロセスは複数でもいいけど必要なものだけ動かすのがdocker的な考え方だよ systemctlに頼らず起動コマンドくらい自分で調べろ そんなにsystemd入れてinitしたいならlxcを熱烈推奨 コンテナ内でsupervisordとか動かすのはアンチパターン >>833 ごった煮版は手軽に試したい人向けだろ まともに使いたい人はhelmチャート版か よそのDockerイメージ使えって事だろう >>834 つまりマルチプロセスなら手軽に使えるコンテナが作れるわけだよね ということはコンテナ分割と利便性はトレードオフの関係なんだよ このことを無視してごった煮はダメだアンチパターンだとわめき散らすのは典型的な解ってない人 >>835 helmチャートとかdocker-compose.ymlで配布してくれた方がカスタムしやすい。 ログやCPU使用率も各コンテナで分かれるので見やすい よって利便性も複数コンテナの方が上 docker-composeで試せるものが docker runで試せるようになったからって そんな楽になったとは思えない むしろ不便になってる件 ほれみろ。仮想マシンのような使い方をした結果 いつものように苦しんでるではないかw >>836 カスタムはある程度は環境変数とかでできる 高度なカスタムが必要なら勝手に非公式で頑張れ ほとんどの人は公式ので十分だ オーケストレーターごとにマニフェストを用意しなきゃならんのは面倒だ オーケストレーターを選択するのも負担になる マルチプロセスならdocker runだけでOK これ以上にかんたんなものはない >>837 コンポーズだとファイルが必要だし内容の理解も必要 docker runはファイル不要で面倒なことは考えなくていい これ以上楽なことはない ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる