10分でdocker入門
近年、Linuxカーネが導入したcgroupなどの機能によって、コンテナによる仮想化が可能になった。 OSのファイルシステムや、CPU、メモリなどのリソースをプロセスごとに割り振り、お互いを孤立されることができるようになったことで、 1つのマシンの中にコンテナと呼ばれる仮想のマシン環境を作っていくことができるらしい。VMwareやVirtualBoxとくらべて、区画を作るだけな分、リソースの使用効率が良く、高速らしい。 使ってみた感想は、兎に角速い。VMwareやVirtualBoxに比べて、とにかく仮想環境の作成が早くできる。 コンテナはむこうと違って異るカーネルの環境は作れないが、この速さは一定の環境でのソフトウェアの動作を検証したい時などにとても便利。 たとえばインストーラの動作確認をするなら是非使いたい。
###インストール
cat >/etc/yum.repos.d/docker.repo <<-EOF
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF
yum install docker-engine -y
###起動
docker daemon
(service docker startでも良いはずだがそっちはエラーが出た)
###イメージのダウンロード
https://hub.docker.com/explore/でイメージを探して
sudo docker pull centos
sudo docker images
コンテナの中でshellを立ち上げて、ユーザーを作ってみる。
07:15:19 sato@localhost docker $ sudo docker run -i -t centos /bin/bash
[sudo] password for sato:
[root@d0f14de7ac35 home]# useradd nyanchu
[root@d0f14de7ac35 home]# su - nyanchu
[nyanchu@d0f14de7ac35 ~]$
[nyanchu@d0f14de7ac35 ~]$ exits
[root@d0f14de7ac35 /]# exit
exit
###さっき抜けたコンテナを確認
07:16:26 sato@localhost docker $ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d0f14de7ac35 centos "/bin/bash" About a minute ago Exited (130) 44 seconds ago hopeful_engelbart
###再度コンテナに接続
終了しているので最初に起動してやる必要がある。 さっき作ったユーザーが存在しているのがわかる。
07:17:17 sato@localhost docker $ sudo docker start d0f
d0f
07:17:27 sato@localhost docker $ sudo docker attach d0f
[root@d0f14de7ac35 /]# su nyanchu
[nyanchu@d0f14de7ac35 /]$ ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
###コンテナからイメージを作成
12:28:49 root@localhost ~ $ docker commit d0f my_image
d583edebf68931c8aa5b52565a3b0182f759a79b4b0924d040468c8241bfa19a
###docker imagesでできたイメージの確認
12:29:10 root@localhost ~ $ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
my_image latest d583edebf689 10 seconds ago 263.7 MB
centos latest e9fa5d3a0d0e 3 days ago 172.3 MB
###作ったイメージからコンテナを作成 作成したイメージに作って置いたユーザーが最初から存在することが確認できる。
12:30:36 root@localhost ~ $ docker run -i -t my_image /bin/bash
[root@e12f0ec2d79f /]# su - nyanchu
Last login: Sat Oct 17 03:22:52 UTC 2015 on console
[nyanchu@e12f0ec2d79f ~]$
ホストのディレクトリをマウント
SELinuxを切っておかないとマウントしたフォルダにアクセスできない。
setenforce 0
こんな感じで開始する
sudo docker run -it -v ~/work:/root my_image /bin/bash
Dockerfileからのイメージの作成
docker buildの引数にはDockerfileの存在するディレクトリを指定する。
$ ls -la
Dockerfile
sudo docker build .
あとは普通につなぐ。
docker run -it my_image /bin/bash