Windows で Docker をはじめる

重い腰を上げて Vagrant から乗り換えに着手することにする。

まだ Virtual Box + Vagrant の環境を捨てられないのと、 Homeエディションでも Docker を利用したいので、 Hyper-V の使用は行わない。

よって、 Docker Toolbox を利用することになる。

Docker Toolbox は仮想環境として Virtual Box を利用する。

1. インストール

Docker Toolbox overview | Docker Documentation からダウンロードする。

7f263dea
図 1. ダウンロードリンク

ダウンロードした DockerToolbox.exe を実行して、インストールする。

47986a80
図 2. インストールウィザード
55dad27b
図 3. インストールオプション

Virtual Box は既にインストール済なのでチェックを外してインストール対象から外した。

2. Chocolateyによるインストール

管理者権限のコンソールで

choco install -y docker-toolbox docker-kitematic

Virtual Box を導入していない場合は以下でインストールする。

choco install -y virtualbox

3. 初期設定

b85f1d1d
図 4. 起動アイコン

Docker Quickstart Terminal を起動する。

自動的に初期設定が始まり、Virtual Box と 仮想マシンが起動する。

ターミナルに鯨マークが表示されれば成功。

52e3eccc
図 5. 成功時のコンソール

Virtual Box 上では以下のようになっている。

4a4a4fd6
図 6. Virtual Box

4. 動作確認

$ docker run hello-world

以下のように出力されれば成功。

Unable to find image 'hello-world:latest' locally
latest: Pulling from library\hello-world
d1725b59e92d: Pull complete
Digest: sha256:0add3ace90ecb4adbf7777e9aacf18357296e799f81cabc9fde470971e499788
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https:\\hub.docker.com\

For more examples and ideas, visit:
 https:\\docs.docker.com\get-started\

5. CentOSをコンテナで動かしてみる

centos イメージの取得

$ docker pull centos
Using default tag: latest
latest: Pulling from library\centos
256b176beaff: Pull complete
Digest: sha256:6f6d986d425aeabdc3a02cb61c02abb2e78e57357e92417d6d58332856024faf
Status: Downloaded newer image for centos:latest

取得済イメージ一覧表示

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              4ab4c602aa5e        2 weeks ago         1.84kB
centos              latest              5182e96772bf        7 weeks ago         200MB

コンテナを起動する

起動コマンドは docker run <イメージ名> <コンテナで起動するコマンド>

$ docker run centos echo "hello centos"
hello centos

コンテナを起動した直後に echo コマンドを実行してコンテナは終了する。

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

コンテナで対話的に作業をする場合は -it オプションをつけて、コンテナに接続する。

$ docker run -it centos bash
[root@80fdde4b23e4 /]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

コンテナが終了せずに起動中のままとなり、コンテナのbashプロンプトなっている。

別途dockerのターミナルを開いて ps コマンドを実行すると、コンテナが起動中なのが確認出来る。

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS
  NAMES
80fdde4b23e4        centos              "bash"              5 minutes ago       Up 5 minutes
  jolly_yalow

コンテナを停止する。

$ docker stop 90dc6cf4489a
90dc6cf4489a

コンテナへの接続は切れる。

停止したコンテナを start コマンドで再開する。

$ docker start 90dc6cf4489a
90dc6cf4489a
iwase@DP-050:~$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
90dc6cf4489a        centos              "bash"              8 minutes ago       Up 8 seconds                            angry_almeida

開始しているコンテナにアタッチして再び操作できるようにする。

$ docker attach 90dc6cf4489a

コンテナを終了するには stop コマンドでコンテナを停止して、 rm コマンドで削除する。

$ docker stop 90dc6cf4489a
90dc6cf4489a
$ docker rm 90dc6cf4489a
90dc6cf4489a

コンテナを終了すると start コマンドでコンテナの再開が出来なくなる。

$ docker start 90dc6cf4489a
Error response from daemon: No such container: 90dc6cf4489a
Error: failed to start containers: 90dc6cf4489a

6. コンテナのライフサイクル

Diagram
図 7. コンテナのライフサイクル