2014.6.9-10にサンフランシスコで開催されたdockercon14でDocker 1.0のリリースが発表されました。
開発版である0.x系から話題になっていましたが、ほとんどウォッチできていなかったため備忘録目的で記録します。
Dockerとは
- Linux上に独立した別のLinuxを起動することができるコンテナ型仮想化ソフトウェアの一つ
- Go言語
- Linuxカーネルの機能を利用し、Linux向けファイルシステムに依存
- Linux Namespaces
- Linux cgroups
- AUFS
- Device Mapper Thin Provisioning
- iptables
- Linuxカーネルの機能を利用/Linux向けファイルシステムに依存するため、Linuxでのみ動作
- Apache LIcense 2.0
※上記カーネルの機能とファイルシステムを利用してOSレベルでの仮想化を実現しています。
cgroupsといったLinuxカーネルの比較的新しい機能を使うため対応しているディストリビューションとバージョンに注意が必要です。
試してみる
何はともあれ試してみましょう。
Docker公式サイトにinstall手順が公開されているので、そちらを参考にします。
※EPELリポジトリのDockerバージョンはまだ0.11.1ですが…
今回の構成
# cat /etc/issue
CentOS release 6.5 (Final)
# uname -rm
2.6.32-431.17.1.el6.x86_64 x86_64
手順
# cd /usr/local/src/
# wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
# rpm -ivh ./epel-release-6-8.noarch.rpm
# yum info docker-io
Available Packages
Name : docker-io
Arch : x86_64
Version : 0.11.1
Release : 4.el6
Size : 4.4 M
Repo : epel
Summary : Automates deployment of containerized applications
URL : http://www.docker.io
License : ASL 2.0
Description : Docker is an open-source engine that automates the deployment of any
: application as a lightweight, portable, self-sufficient container that will
: run virtually anywhere.
:
: Docker containers can encapsulate any payload, and will run consistently on
: and between virtually any server. The same container that a developer builds
: and tests on a laptop will run at scale, in production*, on VMs, bare-metal
: servers, OpenStack clusters, public instances, or combinations of the above.
# yum install -y docker-io
# service docker start
Starting cgconfig service: [ OK ]
Starting docker: [ OK ]
# chkconfig --list docker
docker 0:off 1:off 2:on 3:on 4:on 5:on 6:off
# docker pull centos:latest
Pulling repository centos
0c752394b855: Downloading [==================================================>] 43.23 MB/43.23 MB
0c752394b855: Download complete
34e94e67e63a: Download complete
34e94e67e63a: Pulling metadata
# docker images centos
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
centos latest 0c752394b855 5 days ago 124.1 MB
# docker run -i -t centos /bin/bash
bash-4.1#
bash-4.1# ifconfig
eth0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx:xx:xx
inet addr:172.17.0.2 Bcast:0.0.0.0 Mask:255.255.0.0
...
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 hoge.txt
bash-4.1# ls
bin dev etc hoge.txt home lib lib64 lost+found media mnt opt proc root sbin selinux srv sys tmp usr var
bash-4.1# exit
# docker run -i -t centos /bin/bash
bash-4.1#
bash-4.1# ifconfig
eth0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx:xx:xx
inet addr:172.17.0.2 Bcast:0.0.0.0 Mask:255.255.0.0
...
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# exit
runで起動したコンテナにhoge.txtを作成した後にログアウト、再度runしてlsを実行するとIPアドレスは同じですがhoge.txtが存在しません。
runするたびに別コンテナが作成されているイメージでしょうか?
docker psコマンドでコンテナを確認できるみたいなので確認してみます。
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dbf78a9f8038 centos:latest /bin/bash 49 seconds ago Exited (0) 1 seconds ago kickass_babbage
4622e26ea152 centos:latest /bin/bash 18 minutes ago Exited (0) 7 minutes ago furious_wilson
コンテナはdocker rmコマンドで削除可能のようです。
# docker rm 4622e26ea152
4622e26ea152
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dbf78a9f8038 centos:latest /bin/bash 49 seconds ago Exited (0) 1 seconds ago kickass_babbage
試してみて
dockerのインストールとコンテナの起動/停止まで試してみました。
ハイパーバイザー型の仮想化と比べて気軽に環境が作れるのが魅力でしょうか。
コンテナ側のIPアドレスは別セグメントで払い出されているようなので、ホストOSとコンテナの通信はNATするようなイメージなんでしょうか?
次回はこの辺について追っていきたいと思います。