「Docker入門」を購入したので、docker
に入門したいと思います。
参考資料:
「Docker入門」
Docker 0.9.0 for CentOS6.5
環境
項目 | 値 |
---|---|
ホストOS | Windows 7 Professional 64bit |
プロバイダ | VirtualBox 4.3.8 |
ゲストOS | CentOS 6 |
Docker | docker-io-0.9.0-3.el6.x86_64 |
Image | centos |
インストール手順
今回はepelからパッケージインストールにて構築。
Vagrantfile
(中略)
docker.vm.provision "chef_solo" do |chef|
chef.cookbooks_path = ["cookbooks/", "site-cookbooks/"]
chef.add_recipe "base::yumupdate"
chef.add_recipe "docker::default"
chef.add_recipe "docker::centos"
end
(中略)
Berksfile
site :opscode
cookbook 'yum-epel'
site-cookbooks/base/recipes/yumupdate.rb
execute "yum update" do
command "yum update -y"
end
site-cookbooks/docker/recipes/default.rb
include_recipe 'yum-epel::default'
package "docker-io"
service "docker" do
action [:enable, :start]
end
site-cookbooks/docker/recipes/centos.rb
execute "pull centos" do
command "docker pull centos"
end
<2014/05/21追記>
32bitのepel
にはdocker-io
パッケージがないので、上記のレシピではインストールできません。
別環境の32bit機で実行して見事にこけました。。。
コマンドリファレンス
Dockerの情報を取得:docker info
[vagrant@localhost ~]$ sudo docker info
Containers: 0
Images: 26
Driver: devicemapper
Pool Name: docker-253:0-263291-pool
Data file: /var/lib/docker/devicemapper/devicemapper/data
Metadata file: /var/lib/docker/devicemapper/devicemapper/metadata
Data Space Used: 2333.3 Mb
Data Space Total: 102400.0 Mb
Metadata Space Used: 2.5 Mb
Metadata Space Total: 2048.0 Mb
Dockerイメージの取得:docker pull
イメージはデフォルトだとDockerの公開しているdocker indexから検索する。
# centosのイメージを取得
[vagrant@localhost ~]$ sudo docker pull centos
0b443ba03958: Download complete
539c0211cd76: Download complete
511136ea3c5a: Download complete
7064731afe90: Download complete
対話的にコンテナを実行:docker run -i -t <イメージ名> /bin/bash
# -hはホスト名を指定
# docker run -i -t -h <ホスト名> <イメージ名> /bin/bash
[vagrant@localhost ~]$ sudo docker run -i -t -h test centos /bin/bash
bash-4.1# hostname
test
バックグラウンドでコンテナを実行:docker run -d
[vagrant@localhost ~]$ sudo docker run -d centos /bin/sh -c "while true; do echo Hello; sleep 10; done"
d95c283fb002c9ceae9f85f9d56df77b006af6a6b290c243ce19a731a9af1626
稼働中のコンテナの実行状態を確認:docker ps
[vagrant@localhost ~]$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d95c283fb002 centos:centos6 /bin/sh -c while tru 9 hours ago Up 9 hours insane_ritchie
# 稼働中のコンテナのIDのみを取得:-q
[vagrant@localhost ~]$ sudo docker ps -q
d95c283fb002
# 停止中のコンテナも含めて取得:-a
[vagrant@localhost ~]$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6a3a913b0f8f centos:centos6 /bin/sh -c 'while tr 5 minutes ago Up 3 minutes pensive_wozniak
68bd42d503c1 centos:centos6 /bin/bash 6 minutes ago Exited (0) 6 minutes ago insane_carson
00daefab7cc5 centos:centos6 /bin/bash 12 minutes ago Exited (0) 12 minutes ago ecstatic_fermi
9d3e11b7bedc centos:centos6 /bin/bash 12 minutes ago Exited (0) 12 minutes ago angry_goldstine
コンテナの標準出力を確認:docker logs -f <CONTAINER ID>
[vagrant@localhost ~]$ sudo docker logs -f d95c283fb002
Hello
Hello
Hello
Hello
Hello
Hello
コンテナの停止:docker stop <CONTAINER ID>
# コンテナの停止
[vagrant@localhost ~]$ sudo docker stop d95c283fb002
d95c283fb002
# 稼働中の全てのコンテナを停止
[vagrant@localhost ~]$ sudo docker ps -q | sudo xargs docker stop
d95c283fb002
コンテナの再実行:docker start <CONTAINER ID>
、docker restart <CONTAINER ID>
# 停止中のコンテナを確認
[vagrant@localhost ~]$ sudo docker ps -a | grep Exit | awk '{ print $1 }'
d95c283fb002
5d9e80c64382
582a23bf9161
0c5a68e78a70
# d95c283fb002を実行
[vagrant@localhost ~]$ sudo docker start d95c283fb002
d95c283fb002
# 最初の1件を実行
[vagrant@localhost ~]$ sudo docker ps -a | grep Exit | head -1 | awk '{ print $1 }' | sudo xargs docker start
d95c283fb002
# restartで実行
[vagrant@localhost ~]$ sudo docker restart d95c283fb002
d95c283fb002
バックグラウンド実行中のコンテナにアタッチ:docker attach <CONTAINER ID>
# バックグラウンド実行しているプロセスがある状態でアタッチ
[vagrant@localhost ~]$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d95c283fb002 centos:centos6 /bin/sh -c while tru 3 days ago Up 13 hours insane_ritchie
[vagrant@localhost ~]$ sudo docker attach d95c283fb002
Hello
Hello
Hello
コンテナの強制終了:docker kill <CONTAINER ID>
[vagrant@localhost ~]$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d95c283fb002 centos:centos6 /bin/sh -c while tru 3 days ago Up 13 hours insane_ritchie
# 起動中のコンテナを強制終了
[vagrant@localhost ~]$ sudo docker kill d95c283fb002
d95c283fb002
[vagrant@localhost ~]$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
コンテナ内のプロセスの監視:docker top <CONTAINER ID>
[vagrant@localhost ~]$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d95c283fb002 centos:centos6 /bin/sh -c while tru 3 days ago Up 4 seconds insane_ritchie
[vagrant@localhost ~]$ sudo docker top d95c283fb002
UID PID PPID C
STIME TTY TIME CMD
root 3822 3817 0
12:15 ? 00:00:00 /bin/sh -c while true; do echo Hello; sleep 10; done
root 3884 3822 0
12:15 ? 00:00:00 sleep 10
コンテナの詳細な情報を取得:docker inspect [<CONTAINER ID>|<IMAGE>]
[vagrant@localhost ~]$ sudo docker inspect d95c283fb002
[{
"ID": "d95c283fb002c9ceae9f85f9d56df77b006af6a6b290c243ce19a731a9af1626",
"Created": "2014-05-13T14:31:54.284329622Z",
"Path": "/bin/sh",
"Args": [
"-c",
"while true; do echo Hello; sleep 10; done"
],
"Config": {
"Hostname": "d95c283fb002",
"Domainname": "",
(省略)
コンテナのコミット:docker commit -a "作者" -m "コミットメッセージ" <CONTAINER ID>
[vagrant@localhost ~]$ sudo docker commit -a "author" -m "test" d95c283fb002
ccfe0e061be58bc1ff8b3694e06ed9179899be12d76c7b0a68c57a322e0aeb08
[vagrant@localhost ~]$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
<none> <none> ccfe0e061be5 32 seconds ago 297.6 MB
コンテナの削除:docker rm <CONTAINER ID> [<CONTAINER ID>]
# 稼働中のコンテナは削除できない(`-f`オプションをつければ削除できる)
[vagrant@localhost ~]$ sudo docker ps -q | xargs sudo docker rm
Error: Impossible to remove a running container, please stop it first or use -f
2014/05/17 20:08:37 Error: failed to remove one or more containers
# 稼動していないコンテナの一覧を表示
[vagrant@localhost ~]$ sudo docker ps -a | grep Exit
582a23bf9161 centos:centos6 /bin/bash 3 days ago Exit 130 furious_hawking
0c5a68e78a70 centos:centos6 /bin/bash 3 days ago Exit 0 hopeful_brattain
# 0c5a68e78a70を削除
[vagrant@localhost ~]$ sudo docker rm 0c5a68e78a70
0c5a68e78a70
イメージの削除:docker rmi <IMAGE ID> [<IMAGE ID>]
# イメージの一覧を表示
[vagrant@localhost ~]$ sudo docker images | awk '{ print $1,$2,$3 }'
REPOSITORY TAG IMAGE
<none> <none> ccfe0e061be5
ubuntu 13.10 5e019ab7bf6d
ubuntu saucy 5e019ab7bf6d
ubuntu 12.04 74fe38d11401
(省略)
centos centos6 0b443ba03958
centos latest 0b443ba03958
centos 6.4 539c0211cd76
# ubuntu 13.10のイメージを削除
[vagrant@localhost ~]$ sudo docker rmi 5e019ab7bf6d
Untagged: ubuntu:13.10
Untagged: ubuntu:saucy
Deleted: 5e019ab7bf6deb75b211411ef7257d1e76bf7edee31d9da62a392df98d0529d6
Deleted: 2209cbf9dcd35615211a2fdc6762bb5e651b5c847537359f05b9ab1bc9a74614
Deleted: f0ee64c4df74c766a16faebfb5123e2b67192eff4a82aa70d0d2081681200a79
Deleted: e2aa6665d37109cd6d196eec32c98d8f4412325cb2dc1588e5eb27cae4beb836
Vagrant 1.6
からはVagrantでもDockerを扱えるようですし、AWS Beanstalk
がDockerをサポートするなど、Dockerが盛り上がってきてますね。
Dockerfile
を触った後にVagrant
でのDocker操作に着手したいなと思います。
プロキシ環境におけるDocker
利用の注意点
イメージをダウンロードできない
外部接続にプロキシの必要な環境の場合、yum
等を実行する際には環境変数http_proxy
やhttps_proxy
にプロキシ情報を設定しますが、
上記環境変数を設定してもdocker pull
の実行に失敗します。
[vagrant@localhost ~]$ sudo docker pull centos
Pulling repository centos
2014/05/23 16:58:36 Get https://index.docker.io/v1/repositories/centos/images: dial tcp: lookup index.docker.io on ***.***.***.***:53: no answer from server
プロキシ環境でイメージをダウンロードする場合、/etc/sysconfig/docker
にプロキシ情報を設定する必要があります。
また、docker
を起動済みの場合はservice docker restart
を実行するなどして、docker
を再起動する必要があります。
/etc/sysconfig/docker
export http_proxy=http://<ユーザ名>:<パスワード>@<プロキシサーバ>:<ポート>
export https_proxy=http://<ユーザ名>:<パスワード>@<プロキシサーバ>:<ポート>