Dockerでコンテナを作成してみる

Docker-docs-jaのコンテナで Hello worldを読みつつ、コンテナの作成・起動を3つに分けてトライしています。

▶ ①実行して終了するコンテナ
▶ ②インタラクティブなコンテナ
▶ ③バックグラウンドで動くコンテナ

サンプルそのままではなく、コンテナの再利用などのコンテナ操作できることを確認しながら進めます。

①実行して終了するコンテナ

コンテナ内でアプリケーションを実行するには、docker run コマンドを実行するだけです。

[~] $ docker run ubuntu:14.04 /bin/echo 'Hello world'

Unable to find image 'ubuntu:14.04' locally
14.04: Pulling from library/ubuntu
8284e13a281d: Pull complete
26e1916a9297: Pull complete
4102fc66d4ab: Pull complete
1cf2b01777b2: Pull complete
7f7a2d5e04ed: Pull complete
Digest: sha256:71529e96591eb36a4100cd0cc5353ff1a2f4ee7a85011e3d3dd07cb5eb524a3e
Status: Downloaded newer image for ubuntu:14.04
Hello world

補足

  • runでコンテナ実行。
  • ubuntuがイメージでタグを14.04を指定。指定しないとlatestになる。
  • /bin/echo ‘Hello world’を実行

コンテナはどこへ?

実行後のコンテナは、消えたわけではなく、残っています。
下記のように実行後のコンテナを見ると、Exitedなコンテナが1つあります。これが上記のrunで作られたコンテナです。

[~] $ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS               NAMES
67c5258bd66f        ubuntu:14.04        "/bin/echo 'Hello wo…"   4 minutes ago       Exited (0) 4 minutes ago                       xenodochial_knuth

再利用してみる

先程はrunでコンテナ作って実行しましたが、今度はstartでコンテナ起動してみます。

[~] $ docker start -a 67c5258bd66f
Hello world

オプション「-a」は「Attach STDOUT/STDERR and forward signals」で標準出力とエラーへアタッチしてフォアグラします。ですが、このコンテナは「/bin/echo ‘Hello world’」するだけで作られているので、Hello worldを出力して終了します。

コンテナの状況見ると、ステータスは同じくExitedですが、1秒前にExitなので再度起動して終了したことがわかります。

[~] $ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                    PORTS               NAMES
67c5258bd66f        ubuntu:14.04        "/bin/echo 'Hello wo…"   10 minutes ago      Exited (0) 1 second ago                       xenodochial_knuth

②インタラクティブなコンテナ

対話可能なコンテナを作成・起動するには「-it」オプションを付けます。

[~] $ docker run -it ubuntu:14.04
root@074a9057f0f2:/# 

プロンプトが出て、lsとかできるシェル環境っぽいのが出ます。
とりあえずexitして抜けます。

補足

  • -i 標準入力を双方向に接続(Keep STDIN open even if not attached)
  • -t 疑似ターミナルを割り当てる(Allocate a pseudo-TTY)

コンテナを確認してみる

[~] $ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                    PORTS               NAMES
074a9057f0f2        ubuntu:14.04        "/bin/bash"         13 hours ago        Exited (0) 13 hours ago                       eager_boyd

cmdは入れていないですが、「/bin/bash」になっていました。省略すると何かしらbashなど選んでくれるみたいです。

あと、exitして抜けたので、exitedなステータスになっています。

再利用してみる

インタラクティブな操作になるので、オプション「-i」を指定してスタートします。

[~] $ docker start -i 074a9057f0f2
root@074a9057f0f2:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

抜けるにはexitするので、コンテナのステータスはまたexitedに戻ります。

③バックグラウンドで動くコンテナ

オプション”-d”をつけて起動します。dateで時刻を表示し続けるコマンドを指定しています。

[~] $ docker run -d ubuntu:14.04 /bin/sh -c "while true; do date; sleep 1; done"
d4e470945b4e181f5e4aba5778696b1b919507859b48dff0040a25c1d9858dc2

補足

  • “-d” バックグラウンド起動(Run container in background and print container ID)

ログで状況を確認

コンテナのIDを確認し、”logs -f”で”tail -f”でコンテナのログを確認できます。

[~] $ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
d4e470945b4e        ubuntu:14.04        "/bin/sh -c 'while t…"   12 minutes ago      Up 12 minutes                           vigorous_bose

[~] $ docker logs -f d4e470945b4e
Sun Aug 12 05:28:56 UTC 2018
...
Sun Aug 12 05:41:30 UTC 2018
Sun Aug 12 05:41:31 UTC 2018

停止と起動

“docker run -d”で起動すると、ステータスは”Up 14 minutes”と起動したままになっています。

停止するには、”docker stop”で停止でき、ステータスはexitedになります。

[~] $ docker stop d4e470945b4e
d4e470945b4e

[~] $ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS               NAMES
d4e470945b4e        ubuntu:14.04        "/bin/sh -c 'while t…"   16 minutes ago      Exited (137) 29 seconds ago                       vigorous_bose

“docker logs -f”でもdateの出力が停止できていることが確認できます。

再起動するには、”docker start”です。再びステータスはupで起動中になります。

[~] $ docker start d4e470945b4e
d4e470945b4e

[~] $ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
d4e470945b4e        ubuntu:14.04        "/bin/sh -c 'while t…"   18 minutes ago      Up 4 seconds                            vigorous_bose

Dockerまとめ記事へのリンク

Dockerの他のネタを纏めています。参考になれば嬉しいです。

↓↓↓検証まとめページはこちら↓↓↓
【保存版】Dockerまとめ

シェアする

  • このエントリーをはてなブックマークに追加

フォローする