DockerコンテナのIP

最近、仕事でLinuxマシンのOSアップグレードにトライしています。
しかし、壁が多く、トライさんに教えて欲しいって切実に思うようになってきました(笑)

でも、そんなことはできるはずもなく、ググりながらいつも頑張っています。仕事場では、そーゆノウハウを貯める仕組みを用意しそこに貯めるようにしているのですが、なかなかプロジェクトメンバに定着化しないですね、しかも、上司がそーゆのを評価もしてくれない。。。ということで、これからは、備忘録、はたまた、どこの誰かのお役に立てればってことで、ここにノウハウを貯めていこうと思います。

ということで最初は、Dockerについて残していきたいと思います。

Dockerの詳細はググってくれれば、わかりやすく説明しているサイトが見つかると思うのですが、あんな感じです、VMみたいなもの(正確には違いますが)です。
Dockerにはあらかじめ設定が済んですぐ使えるイメージが公開されていて、それを利用することもできるのですが、Linuxのデストリビューションが違ってたりするので気を付けましょう、あるコンテナはCentOSだけど、あるコンテナはUbuntuuだとか、動作させたいコマンドが変わるので注意してください、yumコマンドはなく、apt-getコマンドだったとか。

DockerコンテナのIP取得

DockerホストとDockerコンテナとは別なIPアドレスとなっています、通常はね。なので、一生懸命、Docker外からコンテナにアクセスしてもできません、Dockerホスト側でコンテナ側のIPに置き換えてくれてればアクセスできるんですけどね、この辺(IP関係)のトラップに引っ掛かりやすいのでお気を付けを。
Dockerホストからこんな感じでコンテナのIPが取得できます。

docker inspect –format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}’ [コンテナID/コンテナ名]

最後の[コンテナID/コンテナ名]はdocker ps -aで出力される一覧の対象となるコンテナのCONTAINER_IDかNAMEのいずれかを設定してください。

Dockerコンテナって最低限のコマンドしか入っていないのでCentOS7のコンテナに入ってipコマンドとかたたいてもコマンドが無いよ的なエラーが出ます。
コマンド入れればいいだけの話ですが、いちいちコンテナに入って確認も面倒なのでそんな時は外からinspectコマンドで一発取得が便利かと。

それから、Dockerコンテナの/etc/hostsに、コンテナのIPとDokcerコンテナIDが対応付けされており、環境変数「HOSTNAME」を利用することで、HOSTS経由で名前解決もできるようです。