タグ

ブックマーク / toromoti.hatenablog.com (4)

  • Docker の CMD と ENTRYPOINT - 技術野郎の復習

    Dockerなんかやっとわかった。DockerのCMDとENTRYPOINTってこう説明されてる。ENTRYPOINTはrun時の引数がENTRYPOINTの引数になるよ。CMDのときはrun時の引数がそのまま置き換わるよ。だいたいこんな感じの説明だけなので、よくわからなかった。要するにENTRYPOINTってのは絶対なわけだ。runする人が変えられない。Dockerfile作者が絶対に実行したいコマンドってこと。CMDは、runする人しだいで置き換えられるもの。で、ENTRYPOINTは絶対なんだけど、それに対する引数はユーザに選んでもらってもいいってときは、併用するんだ。 ENTRYPOINT ["ls", "-l"] CMD ["-a"] いい例が浮かばなかったけど、ls -lは変えられない。run時になにも指定しなければls -l -aになる。run時に-tを指定したらCMDが置き

  • Dockerを触ってみたので、書きまとめる。 - おもいつきでおもちつき

    Docker青二才なのでいろいろと解釈が間違っている部分もあるかと思いますが、ご指摘あればお願いします。コンテナ型仮想化は一日にしてならず職場じゃ一番若手の部類なのですが、最近仕事もあんまり忙しくないから、業務に関係しているという意味でDockerの勉強をしてる、仕事中に。勉強した成果を会社で話せないかなーとか思ってる。まぁ、こんな新しい道具、すぐに使えないんですけど。たぶんDockerとか触ってる人って、それなりに知識も豊富な人が多い気がしますね。なので、ちょっと僕は素人なりに素朴にDockerを見ていきたいと思います。Dockerとはホストと共通のカーネル上でプロセスとファイルスペースを分離するLXCを使いやすくしたツール。あと、重ねあわせできるファイルシステムが特徴。Goで書かれてる。Apacheライセンス。コンテナ型仮想化と言われるように、ハイパーバイザ型の仮想化とはかなり仕組みが

  • Dockerコンテナ内の子プロセスを安全に殺してから親が死ぬ実装 - 技術野郎の復習

    Docker, Immutable Infrastructure, Linux, Bash, Tool前段今日のタイトル怖い。この前、こんなの書いた。supervisordを使わずにコンテナ内で安全に複数のプロセスを走らせる - 技術野郎の復習このなかで、「コンテナ内の子プロセスを安全に止めるには親のSIGINTをトラップして、子プロセスを安全に殺してから親が死ねばいいじゃん。で、それやるんだったらsupervisordとかのプロセス管理ツール使えばいいけど、ちょっと大げさじゃね?」っていう話をした。*1ディスポーザブルなのに再起動supervisordとかmonitのやってくれるプロセス再起動がそんなにおいしいもんじゃなくね?って言ったのはあんまり深い意味はなくて、再起動してくれたら嬉しい場面もあるけど嬉しくない場面もあるし、ディスポーザブルって考えると死んじゃったらあっさり捨てて作りな

  • supervisordを使わずにコンテナ内で安全に複数のプロセスを走らせる - 技術野郎の復習

    Docker, Bash 親はSIGINT、子はSIGKILLコンテナは基的には One Work, One Container であるべきなんだけど、現状コンテナ内で複数のプロセスを走らせたいという状況はよくあると思う。Dockerコンテナ内で複数のプロセスを走らせるのなら、supervisordを使うと良いよっていうのは公式に書いてある。なんでかっていうと例えば、docker run -d centos multiexec.shとやってmultiexec.shの中で複数のプロセスをフォークさせていた場合、普通にdocker stopでコンテナを停止させると親プロセスにはSIGINTが送られるが、親プロセスの停止と同時に子プロセスはSIGKILLになるという動作になるからだ。 supervisordでプロセス管理…はやりすぎつまり、これでは子プロセスが安全に停止する猶予がないので、su

  • 1