Docker 入門ハンズオン資料

  • 1292
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

Docker 入門ハンズオン資料

JAWS-UG CLI専門支部 #23 - ECS 入門用の資料です。
https://jawsug-cli.doorkeeper.jp/events/24371

このハンズオンの前に説明として使ったスライドも公開しました。

目的

Docker の「速さ」と「効率性」を体験するために、コンテナやイメージの作成と実行、Dockerfile を使った環境の管理、簡単なウェブサーバの起動を試します。

前提知識

  • Linux のコマンドラインを操作できる
  • Docker についての知識は不要

ハンズオン手順

A-1. コンテナ・イメージの確認と取得

docker images コマンドを実行し、ローカル上の Docker イメージを確認します。今回は ECS を使って環境を構築したので、初期段階からイメージが1つだけ置かれています。

REPOSITORY                TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
amazon/amazon-ecs-agent   latest              68c50c0e92df        2 weeks ago         8.26 MB

もし、ECS を使わずに、はじめて実行する環境では、次のように何も表示されません。

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE

次に docker pull コマンドで、CentOS のイメージを取得してみます。デフォルトでは、公開レポジトリ(DockerHub)からダウンロードします。

$ docker pull centos
latest: Pulling from centos
f1b10cd84249: Pull complete
c852f6d61e65: Pull complete
7322fbe74aa5: Already exists
centos:latest: The image you are pulling has been verified. Important: image verification is a tech preview feature and should not be relied on to provide security.
Digest: sha256:a4627c43bafc86705af2e8a5ea1f0ed34fbf27b6e7a392e5ee45dbd4736627cc
Status: Downloaded newer image for centos:latest

再び docker images を実行すると、ローカル上に CentOS (centos:latest = CentOS 7 )のイメージがダウンロードされたことが確認できます。

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos              latest              7322fbe74aa5        2 weeks ago         172.2
amazon/amazon-ecs-agent   latest              68c50c0e92df        2 weeks ago         8.26 MB

イメージを取得するとき「イメージ名:タグ」の形式を指定すると、同じイメージで名でも異なったバージョンのものを入手できます。例えば CentOS 6 のイメージを入力するには、次のようにします。

$ docker pull centos:6

この状態で「docker images」を実行すると、2つのイメージがダウンロードされていることが確認できます。レポジトリ名は「centos」で共通ですが、タグや ID が異なっていることが分かります。

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos              6                   a005304e4e74        2 weeks ago         203.1 MB
centos              latest              7322fbe74aa5        2 weeks ago         172.2 MB
amazon/amazon-ecs-agent   latest              68c50c0e92df        2 weeks ago         8.26 MB

このコンテナ・イメージが誰によって作られたかを確認するには docker history <イメージID> を実行します。次の例では、イメージは CentOS Project によって作成されたものをベースに、変更が加えられていることが分かります。

$ docker history a005304e4e74
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
a005304e4e74        2 weeks ago         /bin/sh -c #(nop) CMD ["/bin/bash"]             0 B
fb9cc58bde0c        2 weeks ago         /bin/sh -c #(nop) ADD file:36d5dedfe60e45e7be   203.1 MB
f1b10cd84249        10 weeks ago        /bin/sh -c #(nop) MAINTAINER The CentOS Proje   0 B

A-2. コンテナの起動と停止

最もシンプルな、「Hello World」と画面に表示するだけのコンテナを実行してみましょう。コンテナの起動は docker run <オプション> <イメージ名:タグ> <コマンド> <引数> の形式です。

$ docker run centos echo "Hello World"
Hello World

これはcentosイメージ上で、コマンド echo "hello wolrd" を実行するという命令です。画面上に文字列を表示し、コンテナは終了します。

コンテナ内のプロセス状況を見てみましょう。次のように PID が1でコマンドが実行されていることが分かります。

$ docker run centos ps ax
  PID TTY      STAT   TIME COMMAND
    1 ?        Rs     0:00 ps ax

操作環境上でどのようなコンテナが稼働しているか確認するには、docker ps コマンドを使います。

$ docker ps
CONTAINER ID        IMAGE                            COMMAND             CREATED             STATUS              PORTS                        NAMES
d6a33b8c0147        amazon/amazon-ecs-agent:latest   "/agent"            38 minutes ago      Up 38 minutes       127.0.0.1:51678->51678/tcp   ecs-agent

何も引数を指定しないと「稼働中」のコンテナしか表示しません。今表示されているのは、ECS 用のエージェントであり、システムで自動起動しているものです。

終了したコンテナも含めて表示するには docker ps -a を実行します。

$ docker ps -a
CONTAINER ID        IMAGE                            COMMAND             CREATED             STATUS              PORTS                        NAMES
d6a33b8c0147        amazon/amazon-ecs-agent:latest   "/agent"            38 minutes ago      Up 38 minutes       127.0.0.1:51678->51678/tcp   ecs-agent
c89b318326c9        centos              "ps ax"                4 minutes ago       Exited (0) 4 minutes ago                       kickass_banach
c0963adcc32e        centos              "echo 'hello world'"   4 minutes ago       Exited (0) 4 minutes ago                       distracted_sammet

ターミナルでコンテナを操作することもできます。このとき -i (標準入力)と -t(疑似ターミナル)のオプションを指定します。今度は Ubuntu の環境を起動してみます。docker run -i -t ubuntu bash を実行します。コンテナ起動時に、ローカルにイメージが存在しない場合、自動的に Docker Hub からイメージを取得した後、コンテナを起動します。

$ docker run -i -t ubuntu bash
root@d7d20a8e7bb7:/# cat /etc/issue
Ubuntu 14.04.2 LTS \n \l

このとき exit を入力すると、コンテナは停止します。停止せずに元のターミナルに戻るには Ctrl + P + Q キーを押します(この作業を、コンテナからデタッチする、と呼びます)。

ここまではコンテナは実行して終了するか、直接コンテナを操作してきました。画面に何も表示させず、バックグラウンドでデーモンとして動作させる -d オプションを使うこともできます。これはデタッチ・モードとしてコンテナを起動します。

例えば ping を実行してみます。

$ docker run -d ubuntu ping 127.0.0.1 -c 120
7bc2a8876520d19c08d2f71641eacaf643910ebac2cfa79870e4a7ef50dc6815

先ほどとは異なり、画面にコンテナ ID が表示されました。この ID は docker ps で表示されるものと同じです。

$ docker ps
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS               NAMES
7bc2a8876520        ubuntu              "ping 127.0.0.1 -c 6   36 seconds ago      Up 35 seconds                           stoic_brattain

また、このコンテナ ID は何度も使用するものなので、環境変数で指定しておきます。※重要:この例では「7bc2a8876520」ですが、ID は環境によって異なります。自分の環境の ID を次のように入力します。

$ export CONTAINER=<自分の操作しているコンテナID>

このコンテナは、しばらく起動していますが、120秒経過すると自動的にコンテナが停止します。コンテナの中で、どのような処理が行われているかは docker logs <コンテナID> コマンドで確認できます。

$ docker logs $CONTAINER
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.196 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.129 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.101 ms
64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.098 ms
...

リアルタイムで見たい場合は docker logs -f <コンテナID> を実行します。あるいは docker attach <PID> を実行してコンテナにアタッチし、直接コンテナ内のターミナルから内容を確認することもできます。このとき実行中に Ctrl + Cを押すと ping は中断し、コンテナも終了します。

また、docker logs --tail コマンドや docker logs --tai l <行数> -f を組みあわせることもできます。

$ docker logs --tail 5 $CONTAINER
64 bytes from 127.0.0.1: icmp_seq=60 ttl=64 time=0.104 ms

--- 127.0.0.1 ping statistics ---
60 packets transmitted, 60 received, 0% packet loss, time 59000ms
rtt min/avg/max/mdev = 0.074/0.100/0.196/0.017 ms

稼働中のコンテナを停止するには docker stop または docker kill を使います。stop は SIGTERM シグナルで停止しますが、stopSIGKILL で停止します。

先ほどの ping コンテナがまだ稼働しているようであれば、次のように停止できます。

$ docker stop $CONTAINER

A-3. コンテナの詳細情報を確認

コンテナに関する情報は、docker inspect <コンテナID> で確認します。自分の環境で docker ps -a コマンド等を実行し、任意のコンテナ情報を表示します。

$ docker inspect $CONTAINER
[
{
    "Id": "7bc2a8876520d19c08d2f71641eacaf643910ebac2cfa79870e4a7ef50dc6815",
    "Created": "2015-07-06T03:43:46.882917122Z",
    "Path": "ping",
    "Args": [
        "127.0.0.1",
        "-c",
        "120"
    ],
    "State": {
        "Running": false,
        "Paused": false,
...

画面に多くの情報が表示されます。この情報は --format コマンドを使ってフィルタすることもできます。

$ docker inspect --format='{{.Config.Cmd}}' $CONTAINER
‘{[ping 127.0.0.1 -c 120]}

また表示形式の切り替えも可能です。JSON 形式で表示するには、次のように指定します。

$ docker inspect --format='{{json .Config.Cmd}}' $CONTAINER
["ping","127.0.0.1","-c","120"]

A-5. 不要なコンテナの削除

Docker コンテナを停止しても、コンテナ内での処理結果(ログ)やファイル差分などの情報はデータとして残り続けます。特に使わない場合は docker rm コマンドで停止します。次のコマンドは、停止した(コンテナの status が exited のもの)全てのコンテナをフィルタし、対象を削除するものです。

$ docker rm $(docker ps -aq --filter='status=exited')
ea13ae07f702
7bc2a8876520
d7d20a8e7bb7
c89b318326c9

この状態で docker ps -a コマンドを実行すると、停止したコンテナは全て削除されています。

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
d6a33b8c0147        amazon/amazon-ecs-agent:latest   "/agent"            38 minutes ago      Up 52 minutes       127.0.0.1:51678->51678/tcp   ecs-agent

A-6. イメージの内容確定(コミット)や変更差分

コンテナは起動し直すと、内容が削除されることを確認しましょう。ubuntu イメージ上で /hello.txt を作成し、exit でコンテナを終了します。

$ docker run -i -t ubuntu bash
root@8a8828e2bdfa:/# echo "hello world" > /hello.txt
root@8a8828e2bdfa:/# ls -al /hello.txt
-rw-r--r-- 1 root root 12 Jul  6 04:06 /hello.txt
root@8a8828e2bdfa:/# exit

再び ubuntu イメージを起動しても、先ほどの内容は記録されていません。

$ docker run -i -t ubuntu bash
root@eb0942edc229:/# ls -l /hello.txt
ls: cannot access /hello.txt: No such file or directory

もう一度、/hello.txt を作成し、コンテナを停止してみましょう。

$ docker run -i -t ubuntu bash
root@728c30a9d97d:/# echo "hello world" > /hello.txt
root@728c30a9d97d:/# ls -al /hello.txt
-rw-r--r-- 1 root root 12 Jul  6 04:32 /hello.txt
root@y:/# exit

コンソールに戻ってきたあとは、docker ps -l を実行し、最後に実行したコンテナIDを確認します。

zem@ubuntu:~$ docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                     PORTS               NAMES
728c30a9d97d        ubuntu              "bash"              About a minute ago   Exited (0) 6 seconds ago                       pensive_goldstine

それから docker diff <コンテナID> を実行すると、どのような変更が加わったかが分かります。

zem@ubuntu:~$ docker diff <コンテナID>
A /hello.txt
C /root
A /root/.bash_history

そして、内容を確定するには docker commit <コンテナID> <レポジトリ名:タグ> の形式で指定します。以下は実行例です。<ユーザ名>の箇所は、任意のものに置き換えます。ここではecsdocker/myapp:1.0としていますが、任意のレポジトリ名:タグを利用できます。

$ docker commit $CONTAINER ecsdocker/myapp:1.0
1b07ddefe341abdae8f497a4dea24b2fef46a2a32621a0998fb0e7e8c2fbf666

コミットしたイメージは、docker images コマンドで確認できます。

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ecsdocker/myapp      1.0                 1b07ddefe341        17 seconds ago      188.3 MB

作成された IMAGE ID は環境変数に入れます。

$ export IMAGEID=<作成したイメージの IMAGE ID>

この作成したコンテナを使えば、先ほどの /hello.txt を確認できます。

$ docker run ecsdocker/myapp:1.0 cat /hello.txt
hello world

また、docker history コマンドで、これが centos をベースとしたイメージであることも分かります。

$ docker history $IMEGEID
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
1b07ddefe341        2 minutes ago       bash                                            66 B
6d4946999d4f        3 weeks ago         /bin/sh -c #(nop) CMD ["/bin/bash"]             0 B
9fd3c8c9af32        3 weeks ago         /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$/   1.895 kB
435050075b3f        3 weeks ago         /bin/sh -c echo '#!/bin/sh' > /usr/sbin/polic   194.5 kB
428b411c28f0        3 weeks ago         /bin/sh -c #(nop) ADD file:b3447f4503091bb6bb   188.1 MB

A-7. Dockerfile で wget・ping のコンテナを構築

Dockerfile は、どのような Docker イメージを構築するかを指示する設定ファイルです。都度 docker イメージを作成して commit するのは大変ですが、Dockerfile であれば、迅速・手軽に環境を構築します。

まず、作業用のディレクトリを作成し、移動します。基本的に、1つのディレクトリの中に、1つの Dockerfile を置きます。

$ mkdir dev
$ cd dev

ここでは Ubuntu で wget を実行する、シンプルなコンテナを作成します。テキストエディタを開き、Dockerfile という名前で次の内容を保存します。

FROM ubuntu:14.04

RUN apt-get install -y wget
CMD /usr/bin/wget

FROM は、Docker イメージ構築時に元となるイメージ名やタグを指定します。

RUN はコンテナの中で実行するコマンドを記述します。ただし、このコマンドを使ってデーモンを起動することはできません。

CMD はコンテナ内で PID 1 として実行されるコマンドを指定します。

次に docker build コマンドを使って構築します。「<名前>/wget」というイメージで構築してみましょう。画面上には構築時の経緯が表示されます。もし、指示が間違っていたり、何らかのエラーがあれば画面上に表示し、処理は中断します。

$ docker build -t ecsdocker/wget .
Sending build context to Docker daemon 2.048 kB
Sending build context to Docker daemon
Step 0 : FROM ubuntu:14.04
(省略)
Running hooks in /etc/ca-certificates/update.d....done.
 ---> 7e1de0cfab32
Removing intermediate container 3689bf774a1c
Successfully built 7e1de0cfab32

この構築されたイメージを使って、コンテナを起動します。特に何も無ければ、自動的にコンテナ内の wget が実行され、その結果が表示されます。

$ docker run -ti ecsdocker/wget
wget: missing URL
Usage: wget [OPTION]... [URL]...

Try `wget --help' for more options.

ここでは CMD を使いましたが、似たようなものに ENTRYPOINT があります。これは、予めパラメータを決めておくことができます。もし、コンテナ起動時に何らかのオプションがあれば、CMD 同様にコマンドを実行しますが、何も引数が無ければ ENTRYPOINT で指定したものを実行します。

例として、ping を実行するコンテナを作成します。Dockerfile は次の通りです。

FROM ubuntu:14.04

ENTRYPOINT ["ping", "-c", "60"]

docker build でイメージを作成します。

docker build -t ecsdocker/ping .

あとは docker run でコンテナを実行します。引数は 127.0.0.1 のみ指定すると、先ほど ENTRYPOINT に記述した -c 60 オプションが自動適用されます。

$ docker run ecsdocker/ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.067 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.102 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.108 ms

もちろん、-c 10 など、任意のオプションを指定することもでき、その場合はそのオプションが優先されます。

$ docker run ecsdocker/ping -c 1 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.092 ms

--- 127.0.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.092/0.092/0.092/0.000 ms

なお、ENTRYPOINTDockerfile で指定されている場合でも、Docker コンテナ起動時に --entrypoint コマンドで設定を変更できます。以下のように、ping コンテナに bash で操作できるようになります。

$ docker run -t -i --entrypoint bash  ecsdocker/ping
root@cb197726e198:/#

A-8. Dockerfile で Nginx のコンテナを構築

ローカルの静的ファイルをコンテナ内に送ることもできます。DockerfileADDを使います。似たようなものに COPY がありますが、ADD のほうが URL や圧縮ファイルも指定できるので、より汎用的です。

まず、コンテンツを作成します。

$ mkdir contents
$ echo "hello world" > ./contents/index.html

そして、Dockerfile は次のように編集します。オフィシャルの nginx レポジトリを使ってイメージを作成し、./contents ディレクトリの中身を、ドキュメントルート /usr/share/nginx/nginx にコピーします。

FROM nginx
ADD ./contents /usr/share/nginx/html

次に構築します。

$ docker build -t ecsdocker/web .

次にコンテナを起動しますが、-p オプションを使います。これは、ホスト側とコンテナ内のポート・マッピングを行うもので、-p ホスト側のポート:コンテナ内のポートの形式で任意の指定ができます。

$ docker run -d -p 80:80 ecsdocker/web
010a5fbd22acbfab818541e3f07055b5338f9fa010ee9a26899423dd5944938c
$ docker ps
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                         NAMES
010a5fbd22ac        ecsdocker/web        "nginx -g 'daemon of   3 seconds ago       Up 2 seconds        0.0.0.0:80->80/tcp, 443/tcp   determined_albattani

このようにコンテナが起動したら、ホスト側の curl やブラウザ上で hello world が表示されることが分かります。

$ curl http://127.0.0.1/
hello world

確認したら、一旦docker stop <コンテナID> でコンテナを停止します。この例では 010a5fbd22ac ですが、各々の環境で docker ps を実行して確認します。

$ docker stop <コンテナID>

Dockerfile でコンテンツをコピーしなくても -v オプションでホスト側とコンテナ内でボリュームを共有する機能もあります。ボリューム機能を使えば、コンテンツだけでなく、ログなど動的に変わるデータをコンテナ内ではなくホスト側に保管します。

使うにはコンテナ起動時、-v ホスト側のパス:コンテナ内のパス の形式で指定します。ホスト側のパスは、各々の環境にあわせて書き換えてください。

$ docker run -d -p 80:80 -v /home/<自分の環境のパス>/contents:/usr/share/nginx/html ecsdocker/web
21e7709d3aa9a1cd012dd5ba1343653dae49f81bbd75b1fd54e57598b2d8db13

このように指定すると、ホスト側の contents を編集すると、コンテナの応答内容も同時に変わることが分かります。あとは、色々操作して動作をみてみましょう。

zem@ubuntu:~/dev$ date > ./contents/date.txt
zem@ubuntu:~/dev$ curl http://127.0.0.1/date.txt
Mon Jul  6 00:55:49 EDT 2015
zem@ubuntu:~/dev$ rm ./contents/date.txt
zem@ubuntu:~/dev$ curl http://127.0.0.1/date.txt
<html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.9.2</center>
</body>
</html>

nginx コンテナの詳細はこちらです。 ほかにも様々なアプリケーションやミドルウェアだけでなく、データベースも含めた幅広いイメージが Docker Hub 上に公開されています

ハンズオン手順は以上です。お疲れさまでした。

番外編

X-1. Docker Machine を使った EC2 上の Docker 環境構築

Docker Machine を使い、Amazon EC2 上に Docker Engine をすぐに利用可能な環境を構築し、リモートでの操作、ログイン、削除を行います。

まず、Docker Machine のバイナリをダウンロード・セットアップを行います。以下は Linux (64bit) での実行例です。その他の OS 環境はダウンロード用ページを参照ください。

$ curl -L https://github.com/docker/machine/releases/download/v0.3.0/docker-machine_linux-amd64 > ./docker-machine
$ chmod +x ./docker-machine

ダウンロード後は、バージョンが表示されることを確認します。

$  docker-machine -v
docker-machine version 0.3.0 (0a251fe)

docker-machine コマンドを使い、EC2 インスタンスを自動起動します。次のコマンドを実行すると「ec2docker」というインタンスを起動します。本来は様々なリージョンやインスタンス・タイプを選択できますが、ここではデフォルトの US-EAST リージョンで、t2.micro インスタンスを起動します。リージョン等の様々なオプションについてはドキュメントをご覧ください。

$ docker-machine create --driver=amazonec2 \
    --amazonec2-access-key=<アクセス・キー> \
    --amazonec2-secret-key=<シークレット・キー> \
    --amazonec2-vpc-id=<VPC ID>  \
       ec2docker

起動までに時間がかかります。これは、EC2 インスタンスの起動後、Docker 実行環境のプロビジョニングも同時に行われるからです。

暫く待つと、次のような画面が表示されます。

Creating CA: /root/.docker/machine/certs/ca.pem
Creating client certificate: /root/.docker/machine/certs/cert.pem
Launching instance...
To see how to connect Docker to this machine, run: docker-machine env ec2docker

これで環境が利用可能になりました。リモートの Docker を操作できるように docker-machine env ec2docker を実行します。

# docker-machine env ec2docker
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://54.152.12.116:2376"
export DOCKER_CERT_PATH="/root/.docker/machine/machines/ec2docker"
export DOCKER_MACHINE_NAME="ec2docker"
# Run this command to configure your shell:
# eval "$(docker-machine env ec2docker)"

画面に表示される export 行または eval "$(docker-machine env ec2docker)" を実行します。あとは、通常通り docker コマンドが利用できます。

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
$ docker info
Containers: 0
Images: 0
Storage Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Backing Filesystem: extfs
 Dirs: 0
 Dirperm1 Supported: false
Execution Driver: native-0.2
Logging Driver: json-file
Kernel Version: 3.13.0-53-generic
Operating System: Ubuntu 14.04.2 LTS
CPUs: 1
Total Memory: 992.5 MiB
Name: ec2docker
ID: 64Q4:ZURU:X4FL:BFPV:QWMW:NUBP:B2QB:JIYE:V4EI:PLKH:NSNT:5YVC
WARNING: No swap limit support
Labels:
 provider=amazonec2

docker-machine コマンドを使い、どの環境で、どのようなコンテナが起動しているか確認します。

$ docker-machine ls
NAME        ACTIVE   DRIVER      STATE     URL                        SWARM
ec2docker   *        amazonec2   Running   tcp://54.152.12.116:2376

リモートに SSH ログインしてみます。

$ docker-machine ssh ec2docker
Welcome to Ubuntu 14.04.2 LTS (GNU/Linux 3.13.0-53-generic x86_64)

 * Documentation:  https://help.ubuntu.com/

  System information as of Mon Jul  6 02:34:02 UTC 2015

  System load:  0.65              Processes:              107
  Usage of /:   9.1% of 15.61GB   Users logged in:        0
  Memory usage: 11%               IP address for eth0:    10.0.1.244
  Swap usage:   0%                IP address for docker0: 172.17.42.1

  Graph this data and manage this system at:
    https://landscape.canonical.com/

  Get cloud support with Ubuntu Advantage Cloud Guest:
    http://www.ubuntu.com/business/services/cloud


*** System restart required ***
ubuntu@ec2docker:~$ uptime
 02:36:37 up 5 min,  1 user,  load average: 0.05, 0.27, 0.16

最後にインスタンスを削除するため、docker-machine rm を実行します。

$ docker-machine rm ec2docker
Successfully removed ec2docker

docker-machine ls で何も表示されていなければ、対象インスタンスは Terminate 済みです。マネジメント・コンソロール上でも、同様に停止していることが確認できます。

# docker-machine ls
NAME        ACTIVE   DRIVER      STATE     URL                        SWARM

X-2. もくもく自習用

更に Docker と連携する、Docker Machine、Docker Swarm、Docker Compose のオーケストレーションを試すこともできます。

X-3. おまけ

$ docker run -it --rm supertest2014/nyan

Ctrl+C で終了