Docker ミドル・ウェア

【初めてのDocker②】コンテナで遊んでみる

右も左もわからないので、以下の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 のアドレス。

image

今回は、以下のように –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:~$

あっさりしている。
他に幾つか覚えておかないといけない基本コマンドがあるが、今日は時間切れでここまで。(後でアップデート予定)

-Docker, ミドル・ウェア

Copyright© エンジニアの何でもメモ帳 , 2020 All Rights Reserved.