Dockerを触ったメモ

環境構築(CentOS6.5)

それではCentOS6.5 64bit上にDockerをインストールするところから始めてみましょう。Dockerのインストールはすこぶる簡単で、以下のコマンドを順番に実行するだけで出来てしまいます。

# wget http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
# rpm -ivh epel-release-6-8.noarch.rpm
# yum install xz docker-io -y
# service docker start

プロキシ配下で行う場合は、dockerを起動させる前に「/etc/sysconfig/docker」に対して以下を追記しておいてください。

# /etc/sysconfig/docker
#
# Other arguments to pass to the docker daemon process
# These will be parsed by the sysv initscript and appended
# to the arguments list passed to docker -d
# ↓の行を追加。
export http_proxy="http://[IP]:[PORT]"

other_args=""

コンテナイメージのダウンロードと起動

dockerで利用するコンテナのイメージについては、以下のコマンドで取得できます。

# docker run centos /bin/echo Hello

centosというイメージを取得してくるのですが、これはhttps://index.docker.io/で提供されているコンテナイメージを取得しています。

このサイトに「centos」という名前でコンテナのイメージが登録されているので、今回はそれを利用してみます。

ちなみにここからは「docker」というユーザを作成しておこなっています。

[docker@localhost ~]$ docker run centos /bin/echo Hello Docker!!
docker run centos /bin/echo Hello Dockerdocker images
Unable to find image 'centos' locally
Pulling repository centos
0b443ba03958: Download complete
539c0211cd76: Download complete
511136ea3c5a: Download complete
7064731afe90: Download complete
Hello Dockerdocker images

さて、これでイメージができた筈なので、以下のコマンドで確認してみます。

[docker@localhost ~]$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos              centos6             0b443ba03958        13 days ago         297.6 MB
centos              latest              0b443ba03958        13 days ago         297.6 MB
centos              6.4                 539c0211cd76        13 months ago       300.6 MB

なぜか3つぐらいイメージが出来ていますが、何故3つも出来ているのかは勉強不足で不明です。調べておきます。

とりあえずイメージが取れたので、それでは中に入ってみましょう。仮想マシン中に入るには次のようにします。

[docker@localhost ~]$ docker run -i -t centos /bin/bash
bash-4.1#

はい、これで先ほどインストールした仮想マシンの中に入ることができました!exitなどを打てはこのマシンから抜けることが出来るのですが、抜けた瞬間にこの仮想マシン上で行った操作は破棄されます。適当にテキストファイルを作成した跡に、もう一度同じマシンに入って確認してみてください。作成したファイルが無いことを確認できます。

[docker@localhost ~]$ docker run -i -t centos /bin/bash
bash-4.1# touch test
bash-4.1# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  sbin  selinux  srv  sys  test  tmp  usr  var
bash-4.1# ls -la
total 8040
dr-xr-xr-x.  21 root root    4096 Apr 30 02:00 .
dr-xr-xr-x.  21 root root    4096 Apr 30 02:00 ..
-rw-rw-rw-.   1 root root     115 Apr 30 01:56 .dockerenv
-rwx------.   1 root root 8073215 Apr 28 02:54 .dockerinit
dr-xr-xr-x.   2 root root    4096 Apr 12 01:10 bin
drwxr-xr-x.   4 root root   81920 Apr 30 01:56 dev
drwxr-xr-x.  40 root root    4096 Apr 30 01:56 etc
drwxr-xr-x.   2 root root    4096 Sep 23  2011 home
dr-xr-xr-x.   7 root root    4096 Apr 12 01:09 lib
dr-xr-xr-x.   5 root root    4096 Apr 12 01:10 lib64
drwx------.   2 root root    4096 Apr 12 01:06 lost+found
drwxr-xr-x.   2 root root    4096 Sep 23  2011 media
drwxr-xr-x.   2 root root    4096 Sep 23  2011 mnt
drwxr-xr-x.   2 root root    4096 Sep 23  2011 opt
dr-xr-xr-x. 117 root root       0 Apr 30 01:56 proc
dr-xr-x---.   2 root root    4096 Apr 12 01:10 root
dr-xr-xr-x.   2 root root    4096 Apr 12 01:10 sbin
drwxr-xr-x.   3 root root    4096 Apr 12 01:10 selinux
drwxr-xr-x.   2 root root    4096 Sep 23  2011 srv
drwxr-xr-x.  13 root root       0 Apr 28 02:16 sys
-rw-rw-rw-.   1 root root       0 Apr 30 02:00 test
drwxrwxrwt.   2 root root    4096 Apr 12 01:10 tmp
drwxr-xr-x.  13 root root    4096 Apr 12 01:07 usr
drwxr-xr-x.  17 root root    4096 Apr 12 01:07 var
bash-4.1# exit
exit
[docker@localhost ~]$ docker run -i -t centos /bin/bash
bash-4.1# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  sbin  selinux  srv  sys  tmp  usr  var

はい、見事に元通りです。では仮想マシンでの操作を残したい場合はどうすれば良いのでしょうか?それは、docker runのときに-dオプションをつけて、仮想マシンでの操作が終わっても、破棄せずに残しておくようにします。

[docker@localhost ~]$ sudo docker run -i -t -d centos /bin/bash
3fed51cddea37cfe0dafe264c6eeb2e0b0e29255dfa1bb37fc8da83d7ad13c2b
[docker@localhost ~]$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
3fed51cddea3        centos:centos6      /bin/bash           7 seconds ago       Up 6 seconds                            hopeful_wozniak

さきほどは、仮想マシンのコンソールに移動しましたが、今回は移動しませんでした。また、docker psコマンドを打つと、ひとつ3fed51cddea3というCONTAINER IDが追加されていることがわかります。このコマンドではdockerで稼動中のコンテナを表示することができます。

では、この可能マシンにアタッチしてみましょう。

[docker@localhost ~]$ docker attach 3fed51cddea3
bash-4.1# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  sbin  selinux  srv  sys  tmp  usr  var
bash-4.1# touch docker
bash-4.1# ls
bin  dev  docker  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  sbin  selinux  srv  sys  tmp  usr  var
bash-4.1# [error] client.go:2268 Couldn't send EOF: use of closed network connection

[docker@localhost ~]$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
3fed51cddea3        centos:centos6      /bin/bash           About a minute ago   Up About a minute                       hopeful_wozniak

コンテナを稼動させたままコンソールから抜けるにはCtrl-p、Ctrl-qで抜けて下さい。

次にこの変更をコミットしてみましょう。

[docker@localhost ~]$ docker commit -m "new textfile docker." 3fed51cddea3 hasehiro/centos6_test
411d681d9ab08ee5d4aa50aea0485f4b73e3eea35421026d77d76f372cd938b9
[docker@localhost ~]$ docker images
REPOSITORY             TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
hasehiro/centos6_test   latest              411d681d9ab0        20 seconds ago      297.6 MB
centos                 centos6             0b443ba03958        13 days ago         297.6 MB
centos                 latest              0b443ba03958        13 days ago         297.6 MB
centos                 6.4                 539c0211cd76        13 months ago       300.6 MB
[docker@localhost ~]$ docker run -i -t hasehiro/centos6_test /bin/bash
bash-4.1# ls
bin  dev  docker  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  sbin  selinux  srv  sys  tmp  usr  var

はい、dockerというファイルが存在しているコンテナイメージが出来上がって、かつ作成したファイルが残っていることを確認できます。

まとめ

かなり気軽にかつ、高速に仮想マシンを弄れる環境を整えることができました。気軽すぎるがゆえにプロダクション環境での利用が敬遠されそうな気もしますが、今後の流れに注目です。