okochangの馬鹿でありがとう

ふらふら適当に世間を生きる日々でございます

CentOS6.5でDockerを少しだけ使ってみた

試してみたいなと思いつつ手をつけられていなかったDockerを少しだけ触ってみたので、ログを残しておきたいと思います。
DockerDocker inc.社がオープンソースで公開しているコンテナ型の仮想化ソフトウェアですが、以下の記事などを見たらイメージがしやすかったです。

環境

VagrantでVMを起動したり、OSX上で直接使ったりなど色々方法があると思いますが、私の環境は以下のとおりです。

リポジトリの追加

Cent OSでDockerをインストールするためにEPELのリポジトリを追加します。

[root@centos.okochang.com ~]# rpm --import http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-6
[root@centos.okochang.com ~]# yum install -y http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

Dockerのインストールと起動

リポジトリの追加が出来たら以下のようにインストールが出来ます。

[root@centos.okochang.com ~]# yum install docker-io
[root@centos.okochang.com ~]# docker -v
Docker version 0.7.2, build 28b162e/0.7.2
[root@centos.okochang.com ~]# service docker start
[root@centos.okochang.com ~]# chkconfig docker on

動作確認

起動直後はもちろん特にコンテナやイメージは存在しません。

[root@centos.okochang.com ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@centos.okochang.com ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE

新しいコンテナを作成してでbashを使ってみます。

[root@centos.okochang.com ~]# docker run -t -i centos /bin/bash 
bash-4.1# echo "Hello World"
Hello World
bash-4.1# yum install tree
# tree /home/
/home/

0 directories, 0 files
bash-4.1# exit
exit

再度同じコマンドでコンテナにアクセスした場合の動作を確認します。

[root@centos.okochang.com ~]# docker run -t -i centos /bin/bash
bash-4.1# tree
bash: tree: command not found
bash-4.1# exit
exit

先ほどのリンクの記事にあるように、同じコマンドでアクセスしていても新しいコンテナにアクセスするようです。
以下のコマンドでコンテナの一覧が確認出来ます。

# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
3625e3064dc3        centos:6.4          /bin/bash           28 seconds ago      Exit 127                                suspicious_brown    
267c7bb6fa21        centos:6.4          /bin/bash           2 minutes ago       Exit 0                                  boring_euclide 

コンテナを再利用したい場合は、リポジトリにコミットしたうえで新しくコンテナを作成するようです。
コミットをする場合はコンテナIDを指定して以下のように実行します。

[root@centos.okochang.com ~]# docker commit 267c7bb6fa21 okochang/centos
c1896ddfe6e49977edbdd60d18c0c404a66be6ed6bba0257e1a038b57109578c

コミットされるとその状態がイメージとして保存されます。

# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
okochang/centos     latest              c1896ddfe6e4        32 seconds ago      337.1 MB
centos              6.4                 539c0211cd76        9 months ago        300.6 MB
centos              latest              539c0211cd76        9 months ago        300.6 MB

以下のようにコンテナを再利用します。

[root@centos.okochang.com ~]# docker run -t -i okochang/centos /bin/bash
bash-4.1# tree /home/
/home/

0 directories, 0 files
# exit
exit

コンテナの削除を行う場合はrmコマンドにコンテナIDを指定します。

[root@centos.okochang.com ~]# docker rm 03e8a848d495
03e8a848d495

イメージの削除をする場合はrmiコマンドにイメージIDを指定します。
※イメージを使用しているコンテナが削除されている必要があります。

[root@centos.okochang.com ~]# docker rmi c1896ddfe6e4
Untagged: c1896ddfe6e49977edbdd60d18c0c404a66be6ed6bba0257e1a038b57109578c
Deleted: c1896ddfe6e49977edbdd60d18c0c404a66be6ed6bba0257e1a038b57109578c

Dockerfileというテキストファイルを作成して自分用にカスタマイズしたイメージを作成することも出来ます。
書き方はこちらに記載されていますが、そんなに難しいものではないですね。
Dockerfileを作成したらテキストファイルがあるディレクトリでビルドすればOKです。

[root@centos.okochang.com ~]# cat Dockerfile 
FROM centos

RUN yum install -y openssh openssh-client openssh-server emacs tree
EXPOSE 22
[root@centos.okochang.com ~]# docker build -t okochang/base
[root@centos.okochang.com ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
okochang/base       latest              040477d29dd1        2 minutes ago       536.5 MB
centos              6.4                 539c0211cd76        9 months ago        300.6 MB
centos              latest              539c0211cd76        9 months ago        300.6 MB