右も左もわからないので、以下のUser Guide を順番にやってみる事に。
Working with Containers - Docker Documentation
といいつつ、はじめの方は飛ばして、まずはサンプルの Webアプリが入った Docker コンテナを動かしてみる。
サンプル Web Application をドッカーで動かす
docker run で起動する。
以下のコマンドで、サンプルの Web アプリが入った docker のコンテナをダウンロードしてくれる。
sudo docker run -d -P training/webapp python app.py
、
ここで、
-d は、コンテナをバックグラウンドで動かす
-P は、コンテナ内部からホスト側へ必要なネットワークのポートをマッピングする
だそうだ
ポートをマッピングする・・・
コンテナは単純に起動すればホスト側からポートが見えるというものではなさそうだ。
実際にコマンドを打ってみると、以下のようになる。
「training/webapp」というコンテナが無いので、ダウンロードしてくる所からはじまるため、少し時間がかかる。
docker@boot2docker:~$ sudo docker run -d -P training/webapp python app.py
Unable to find image 'training/webapp' locally
Pulling repository training/webapp
31fa814ba25a: Download complete
31fa814ba25a: Pulling image (latest) from training/webapp
f10ebce2c0e1: Download complete
82cdea7ab5b5: Download complete
5dbd9cb5a02f: Download complete
74fe38d11401: Download complete
64523f641a05: Download complete
0e2afc9aad6e: Download complete
e8fc7643ceb1: Download complete
733b0e3dbcee: Download complete
a1feb043c441: Download complete
e12923494f6a: Download complete
a15f98c46748: Download complete
939b4c150f55464132bbd19c0f982d15a1475bfb462376318f14cfed2cb9c8c0
docker@boot2docker:~$
ここでコンテナの稼働状況を確認してみる。
通常はコマンドが終了したらコンテナも終了するが、今回は「training/webapp」というコンテナの中で「python app.py」というコマンドが動いている。「python app.py」は Webサービスで稼働し続けるため、コンテナ自体も稼働し続ける。
稼働しているコンテナの確認
稼働しているコンテナの確認は・・
docker ps
を使う。 –l オプションを指定すると、詳細な情報を表示してくれるので、以下の例では –l を指定した。
docker@boot2docker:~$ sudo docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
939b4c150f55 training/webapp:latest "python app.py" 3 minutes ago Up 3 minutes 0.0.0.0:49153->5000/tcp backstabbing_fermat
docker@boot2docker:~$
何やら稼働している。
見にくいので整理すると
CONTAINER ID:「939b4c150f55 」
IMAGE:「training/webapp:latest」 (特に latest と付けなかった場合は自動的に latest のイメージになるようだ)
COMMAND:「python app.py」
CREATED:「3分前」
STATUS:「3分間稼働中」
PORT:「0.0.0.0:49153->5000/tcp」
NAME:「backstabbing_fermat」(自動的に付けられる名前で環境によって異なる。すごい名前だ・・・)
という情報が読みとれる。
ここで重要なのは、PORT:「0.0.0.0:49153->5000/tcp」で、これはコンテナの 5000番の TCP ポートが、ローカルDockerホスト(Windows 7) の49513番に割り当てられている事を示している。
なので、Windows 7 から以下の方法でアクセスできる。ここで「192.168.59.103」は、私の環境の WIndows 7 から見た、コンテナをホストしている boot2docker のアドレス。
今回は、以下のように –P オプションで自動的なマッピングをおこなったものの
$sudo docker run -d -P training/webapp python app.py
以下のように1:1で指定してマッピングもできるもよう。(5000番を5000番に割り当てる)
$ sudo docker run -d -p 5000:5000 training/webapp python app.py
但し空いているポートは見つけないといけないわ、複数同時に起動すると衝突するわ。で面倒そう。
本番で使わない限りは、-P でお任せしてしまってよさそう。
コンテナを止める
コンテナの止め方は、
sudo docker stop <コンテナ名>
<コンテナ名> は、sudo docker ps -l を実行した時に「NAME」の所に出てくる名前。この例の場合は、「backstabbing_fermat」になる。環境によって異なってくる。
反対に一度止めたコンテナを再起動するには、restart というコマンドも使える。
sudo docker start <コンテナ名>
コンテナの一覧
コンテナの一覧は、(もし削除してなかったら)
docker ps –a
で確認できるようだ。一瞬で終了したコンテナもリストされているので、かなりの量があるはず。
docker@boot2docker:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fc4f1e9b7759 ubuntu:14.04 "/bin/bash" 9 hours ago Exited (1) 9 hours ago stoic_lumiere
fb8d5575cb9d ubuntu:14.04 "/bin/sh -c 'while t 9 hours ago Up 31 minutes agitated_mayer
d8946fe33fab ubuntu:14.04 "/bin/sh -c 'while t 9 hours ago Exited (-1) 8 hours ago desperate_lovelace
342a0a92e101 ubuntu:14.04 "/bin/bash" 9 hours ago Exited (0) 9 hours ago jolly_babbage
7c2484b7aa6d ubuntu:14.04 "/bin/bash" 9 hours ago Exited (0) 9 hours ago tender_yonath
01dcde5466ce ubuntu:14.04 "/bin/bash" 9 hours ago Exited (130) 9 hours ago jovial_newton
<略>
docker@boot2docker:~$
ちなみに、Docker のイメージの一覧は、docker images で確認できる。
以下では、4つほどイメージがあるのがわかる。
docker@boot2docker:~$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
ubuntu 14.04 826544226fdc 2 days ago 194.2 MB
ubuntu latest 826544226fdc 2 days ago 194.2 MB
hello-world latest 565a9d68a73f 8 weeks ago 922 B
training/webapp latest 31fa814ba25a 3 months ago 278.8 MB
docker@boot2docker:~$
コンテナを削除する
コンテナを削除するには
docker rm <コンテナ名>
実際に試してみると・・・
docker@boot2docker:~$ sudo docker rm backstabbing_fermat
backstabbing_fermat
docker@boot2docker:~$
あっさりしている。
他に幾つか覚えておかないといけない基本コマンドがあるが、今日は時間切れでここまで。(後でアップデート予定)