Docker 101

Dockerとは

PaaS を提供していた dotCloud 社が、2013年3月に発表したオープンソースの仮想化ソフトウェア。同年10月には社名を Docker に変更し、 Docker のビジネスにフォーカスしていく方針を発表した。

dotCloud, Inc. is Becoming Docker, Inc. | Docker Blog

Dockerを使用することで、アプリケーションとその実行環境を「コンテナ」という単位で管理できる。コンテナは軽量で可搬性が高く、開発環境から本番環境まで一貫した環境を提供できる点が特徴。

今回達成したいこと

MacOS 上で boot2docker を利用し Docker 環境を構築する。また、CentOS のコンテナ立ち上げるまでの動きを見ていく。

環境構築手順

1. 必要なソフトウェアのインストール

今回利用するソフトウェアとバージョンは以下の通り:

  • VirtualBox 4.3.14
  • Docker 1.1.1
  • boot2docker 1.1.1

VirtualBox のインストール

$ brew cask install virtualbox

Docker/boot2docker のインストール

$ brew install boot2docker

※ boot2docker をインストールすると、依存関係にある docker も自動的にインストールされる。

2. boot2docker の初期化と起動

初期化

$ boot2docker init

このコマンドにより boot2docker 用の仮想マシンが作成され、必要な設定が行われる。

起動

$ boot2docker up
2014/07/27 11:22:59 Waiting for VM to be started...
...........
2014/07/27 11:23:32 Started.
2014/07/27 11:23:32 To connect the Docker client to the Docker daemon, please set:
2014/07/27 11:23:32     export DOCKER_HOST=tcp://192.168.59.103:2375

boot2docker が起動すると、Docker daemon に接続するための環境変数が表示される。この環境変数を .bash_profile に追記する。

$ echo 'export DOCKER_HOST=tcp://192.168.59.103:2375' >> ~/.bash_profile
$ source ~/.bash_profile

3. Docker 環境の確認

環境が正しく構築できているか確認する:

$ docker version
Client version: 1.1.2
Client API version: 1.13
Go version (client): go1.3
Git commit (client): d84a070
Server version: 1.1.2
Server API version: 1.13
Go version (server): go1.2.1
Git commit (server): d84a070
$ docker info
Containers: 0
Images: 0
Storage Driver: aufs
 Root Dir: /mnt/sda1/var/lib/docker/aufs
 Dirs: 0
Execution Driver: native-0.2
Kernel Version: 3.15.3-tinycore64
Debug mode (server): true
Debug mode (client): false
Fds: 10
Goroutines: 10
EventsListeners: 0
Init Path: /usr/local/bin/docker
Sockets: [unix:///var/run/docker.sock tcp://0.0.0.0:2375]

4. CentOSコンテナの実行

イメージのダウンロード

$ docker pull centos
Pulling repository centos
cd934e0010d5: Download complete
1a7dc42f78ba: Download complete
511136ea3c5a: Download complete
34e94e67e63a: Download complete

これにより、CentOS 6とCentOS 7のイメージがダウンロードされた:

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos              centos7             1a7dc42f78ba        2 weeks ago         236.4 MB
centos              latest              1a7dc42f78ba        2 weeks ago         236.4 MB
centos              centos6             cd934e0010d5        2 weeks ago         206.9 MB

コンテナの起動

CentOS 6の場合:

$ docker run --interactive --tty centos:centos6 /bin/bash

CentOS 7の場合:

$ docker run -it centos:centos7 /bin/bash

--interactive (-i) と --tty (-t) オプションにより、対話型の bash 環境が提供される。

5. コンテナの管理

実行中のコンテナの確認

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
0cfd8af88b83        centos:centos7      /bin/bash           2 minutes ago       Up 14 seconds                                   hopeful_yonath

コンテナの停止

$ docker stop 0cfd8af88b83
0cfd8af88b83

コンテナの再起動と接続

$ docker start 0cfd8af88b83
0cfd8af88b83
$ docker attach 0cfd8af88b83
bash-4.2#

コンテナの削除

起動中のコンテナを削除しようとすると失敗する:

$ docker rm 0cfd8af88b83
Error response from daemon: Impossible to remove a running container, please stop it first or use -f
614c80e55e30
2014/07/27 11:41:03 Error: failed to remove one or more containers

一度停止し、状態を確認したうえで再度削除する:

$ docker stop 0cfd8af88b83
0cfd8af88b83

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                      PORTS               NAMES
0cfd8af88b83        centos:centos7      /bin/bash           5 minutes ago        Exited (-1) 7 seconds ago                       hopeful_yonath

$ docker rm 0cfd8af88b83
0cfd8af88b83

イメージの削除

$ docker rmi centos:centos7
Untagged: centos:centos7
Deleted: 1a7dc42f78ba213ec1ac5cd04930011334536214ad26c8000f1eec72e302c041