ようへいの日々精進XP

よかろうもん

docker のタメにならないヲレの小小技集

はじめに

docker を使う上で自分が使っているシチュエーション別 の一般的にはタメにならない小小技を披露。尚、試した環境は以下の通り。

  • Ubuntu 13.10(ホストマシン)
  • Docker 0.7

もっと効率良い方法があるだらう。


参考


自分は何に docker を使っているのか?

  • ツールの簡単なテスト(最近だと fluentd とか elasticsearch とか大体は docker で片付ける)
  • Chef単体テスト的なこと(test-kitchen

まあ、大体のことが docker で片付くが docker ではその性質上(コンテナ型仮想環境)片付けられないこともあるんだろうなあと思っているが、今のところそんな状況に出会ったことは無い。


小小技

コンテナの IP を知る

コンテナに ssh でアクセスする時に、「あれ、コンテナの IP って?」という時に以下を実行する。

docker inspect ${コンテナの ID} | jq '.[] .NetworkSettings |{IPAddress}'

jq が必要になるけど以下のような結果になる。

{                          
  "IPAddress": "172.xxx.xx.xx"
}                          

ついでにホスト名も知りたい場合には以下のようにする。

docker inspect ${コンテナの ID} | jq '.[].Config, .[].NetworkSettings|{Hostname, IPAddress}'

以下のような結果となり研究が必要...

{
  "IPAddress": null,
  "Hostname": "212e80737ca2"
}
{
  "IPAddress": "172.xxx.xxx.xxx",
  "Hostname": null
}

ちなみに、以下のようにすればちょっとマシになる。

docker inspect xxxxxxxxx | jq '.[].Config.Hostname, .[].NetworkSettings.IPAddress'

以下のように出力される。

xxxxxxxxx
172.17.xx.xx

ちょっとマシ。

jq を使った方法については以下のようにすると良さそう。

docker inspect xxxxxxxxx | jq '.[].NetworkSettings.IPAddress' | cut -d\" -f2

コンテナの IP を知る(2)

こちらこちらの記事で docker inspect--format というオプションがあり以下のようにしても IP アドレスが取得可能と教えて頂いた。(当初、手元の docker 0.7.0 では取得することは出来なかったが docker 0.7.2 で試したところ取得出来た。詳細はこちら。)

docker inspect -format="{{ .NetworkSettings.IPAddress }} ${container_ID}"

おお、素晴らしい。ちなみに go 言語の構文が使えるとのこと。やっぱり、go なんだなー。

稼働中のコンテナを一気に停止したい

コンテナの停止には docker stop を利用するが、これを for で回せば一気に止めることが出来る。

for i in `sudo docker ps -q | grep -v 'CONTAINER ID'`; do sudo docker stop $i; done

応用で使ったコンテナを一気に消す場合には以下のようにする。

for i in `sudo docker ps -a -q`; do sudo docker rm $i; done

ただし、STATUSGhost になっているコンテナはこの方法ではムリ(エラーになる)。

CONTAINER ID        IMAGE                              COMMAND                CREATED             STATUS              PORTS                   NAMES
ba111474b065        2d59c9c741bb                       /usr/sbin/sshd -D -o   5 days ago          Ghost               0.0.0.0:49171->22/tcp   high_babbage        
2081454160cd        2d59c9c741bb                       /usr/sbin/sshd -D -o   5 days ago          Ghost               0.0.0.0:49169->22/tcp   prickly_poincare

さて、困った。

Ghost になったコンテナを葬る

Ghost になってしまっているコンテナに成仏して頂く為には以下のようにしている。

docker を停止する

sudo service docker stop

コンテナを物理的に削除する

消してもまた作ればいいという発想でイジれるのが docker のまたいいところだと思っているので...

sudo su -
cd /var/lib/docker/containers
rm -rf *

docker を再開する

sudo service docker start

但し、これはベストプラクティスではないはずなので、引き続き、ちゃんとした方法を模索中。

dockerui を試す

以前に試した時にはうまく動いていたけど、現状、手元の環境では動いていない...。docker 0.7 だからかなと思ったり。


最後に

  • docker オモロイ