私が言うまでもありませんが、仮想化環境は日進月歩で進化しており、
メイン業務の環境ではこれまではサーバ仮想化が幅を利かせていましたが、
ぼちぼちコンテナ型仮想化のDockerが乗り込んで来そうな雰囲気です。
その昔、サーバ仮想化にのめり込んで自宅にサーバルーム(大した設備ではないです)を構築し、
VMwareとHyper-Vで遊んできた私ですが、この度、Hyper-V上にDocker環境を構築して、
学習を始めてみることにしました。
1.CentOSの準備
Hyper-V上にCentOSを準備します。
執筆時点(2018.04.01)ではCentOS7.4が最新版でした。
CentOSは「サーバー(GUI使用)」でベース環境を選択しました。
この時点で特には他に何も入れておりません。
ちなみにホスト名は「centos74-docker」です。
2.Dockerのセットアップ
こちらを参考にDockerのセットアップを行いました。
(@inakadegaebalさん)
https://qiita.com/inakadegaebal/items/be9fecce813cebec5986
Dockerのパッケージは執筆時点では以下の通りでしたので、最新版(18.03.0)を導入しました。
[root@centos74-docker ~]# yum list docker-ce.x86_64 --showduplicates | sort -r
利用可能なパッケージ
読み込んだプラグイン:fastestmirror, langpacks
docker-ce.x86_64 18.03.0.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.12.1.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.12.0.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.09.1.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.09.0.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.06.2.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.06.1.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.06.0.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.03.2.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.03.1.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.03.0.ce-1.el7.centos docker-ce-stable
[root@centos74-docker ~]# systemctl status docker.service
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
Active: active (running) since 日 2018-04-01 18:25:39 JST; 1min 43s ago
Docs: https://docs.docker.com
Main PID: 5244 (dockerd)
Memory: 49.8M
CGroup: /system.slice/docker.service
├─5244 /usr/bin/dockerd
└─5248 docker-containerd --config /var/run/docker/containerd/containerd.toml
4月 01 18:25:35 centos74-docker dockerd[5244]: time="2018-04-01T18:25:35.656787401+09:00" level=info msg="Loading containers: start."
4月 01 18:25:37 centos74-docker dockerd[5244]: time="2018-04-01T18:25:37.598452144+09:00" level=info msg="Default bridge (docker0) is assigned with an IP address 172.17.0.0/16. Daemon optio...d IP address"
4月 01 18:25:38 centos74-docker dockerd[5244]: time="2018-04-01T18:25:38.967115625+09:00" level=info msg="Loading containers: done."
4月 01 18:25:39 centos74-docker dockerd[5244]: time="2018-04-01T18:25:39.170452711+09:00" level=info msg="Docker daemon" commit=0520e24 graphdriver(s)=overlay2 version=18.03.0-ce
4月 01 18:25:39 centos74-docker dockerd[5244]: time="2018-04-01T18:25:39.171334883+09:00" level=info msg="Daemon has completed initialization"
4月 01 18:25:39 centos74-docker dockerd[5244]: time="2018-04-01T18:25:39.344098963+09:00" level=info msg="API listen on /var/run/docker.sock"
4月 01 18:25:39 centos74-docker systemd[1]: Started Docker Application Container Engine.
4月 01 18:25:57 centos74-docker dockerd[5244]: time="2018-04-01T18:25:57+09:00" level=info msg="shim docker-containerd-shim started" address="/containerd-shim/moby/da1dff6785b1f98fe76607ca5...sks" pid=5381
4月 01 18:25:59 centos74-docker dockerd[5244]: time="2018-04-01T18:25:59+09:00" level=info msg="shim reaped" id=da1dff6785b1f98fe76607ca54472c2b5dde531db6caea92fdd594a5c57394dc module="containerd/tasks"
4月 01 18:25:59 centos74-docker dockerd[5244]: time="2018-04-01T18:25:59.266404647+09:00" level=info msg="ignoring event" module=libcontainerd namespace=moby topic=/tasks/delete type="*events.TaskDelete"
Hint: Some lines were ellipsized, use -l to show in full.
3.DockerにApache(httpd)をセットアップ
これだけではどうなっているかよく分からないので、オーソドックスにApacheを導入してみました。
こちらの「docker コンテナの作成・実行」から参考にさせて頂きました。
(fnyaさん)
http://fnya.cocolog-nifty.com/blog/2016/03/centos7-docker-.html
httpdという名前でイメージを作成して動かすように変更しています。
[root@centos74-docker home]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a0db7f26d277 centos "/bin/bash" 8 minutes ago Exited (1) 12 seconds ago centos7
da1dff6785b1 hello-world "/hello" 30 minutes ago Exited (0) 30 minutes ago practical_ptolemy
[root@centos74-docker home]# docker commit centos7 httpd
sha256:1fd7501390ba665118cd2dbf9554a6518e8f8a4e4cfdafa7bbd2fc807702c779
[root@centos74-docker home]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a0db7f26d277 centos "/bin/bash" 10 minutes ago Exited (1) About a minute ago centos7
da1dff6785b1 hello-world "/hello" 31 minutes ago Exited (0) 31 minutes ago practical_ptolemy
[root@centos74-docker home]#
[root@centos74-docker home]#
[root@centos74-docker home]# docker run --privileged -d -p 80:80 --name httpd httpd /sbin/init
9f8db5a1dec893bb890b1e56f4db5571acad0ff80dc2d4e247dc6386c53d6a0f
[root@centos74-docker home]# docker exec -it httpd /bin/bash
[root@9f8db5a1dec8 /]# systemctl enable httpd.service
[root@9f8db5a1dec8 /]# systemctl start httpd.service
[root@centos74-docker home]# curl -s http://localhost/ | head -n 1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><html><head>
[root@centos74-docker home]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9f8db5a1dec8 httpd "/sbin/init" About a minute ago Up About a minute 0.0.0.0:80->80/tcp httpd
a0db7f26d277 centos "/bin/bash" 14 minutes ago Exited (1) 5 minutes ago centos7
da1dff6785b1 hello-world "/hello" 35 minutes ago Exited (0) 35 minutes ago practical_ptolemy
curlコマンドの結果でhttpのレスポンスが返ってきているので動作しているのは明白ですが、一応ブラウザでもチェック。
無事トップページを見ることができました。
4.Dockerコマンド他
Dockerへのログイン
[root@centos74-docker home]# docker exec -it httpd /bin/bash
[root@9f8db5a1dec8 /]# ps -ef | grep httpd
root 50 1 0 10:00 ? 00:00:01 /usr/sbin/httpd -DFOREGROUND
apache 64 50 0 10:00 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 66 50 0 10:00 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 67 50 0 10:00 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 68 50 0 10:00 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 69 50 0 10:00 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 103 50 0 10:03 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 104 50 0 10:03 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 105 50 0 10:03 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
root 120 106 0 11:17 pts/1 00:00:00 grep --color=auto httpd
Dockerからのログアウト
[root@centos74-docker home]# docker exec -it httpd /bin/bash
[root@9f8db5a1dec8 /]# ps -ef | grep httpd
root 50 1 0 10:00 ? 00:00:01 /usr/sbin/httpd -DFOREGROUND
apache 64 50 0 10:00 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 66 50 0 10:00 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 67 50 0 10:00 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 68 50 0 10:00 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 69 50 0 10:00 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 103 50 0 10:03 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 104 50 0 10:03 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 105 50 0 10:03 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
root 120 106 0 11:17 pts/1 00:00:00 grep --color=auto httpd
[root@9f8db5a1dec8 /]# read escape sequence (「Ctrl+p」+「Ctrl+q」を押下でログアウト)
[root@centos74-docker home]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9f8db5a1dec8 httpd "/sbin/init" 2 hours ago Up 2 hours 0.0.0.0:80->80/tcp httpd
a0db7f26d277 centos "/bin/bash" 2 hours ago Exited (1) 2 hours ago centos7
da1dff6785b1 hello-world "/hello" 2 hours ago Exited (0) 2 hours ago practical_ptolemy
Dockerのスタート・ストップ
docker start {コンテナー名}|{コンテナーID}
docker stop {コンテナー名}|{コンテナーID}
[root@centos74-docker home]# docker stop httpd
httpd
[root@centos74-docker home]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9f8db5a1dec8 httpd "/sbin/init" 2 hours ago Exited (137) 9 seconds ago httpd
a0db7f26d277 centos "/bin/bash" 3 hours ago Exited (1) 3 hours ago centos7
da1dff6785b1 hello-world "/hello" 3 hours ago Exited (0) 3 hours ago practical_ptolemy
[root@centos74-docker home]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
# dokcer ps は稼働中のモノだけみせてくれるそうです。
[root@centos74-docker home]# docker start httpd
httpd
[root@centos74-docker home]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9f8db5a1dec8 httpd "/sbin/init" 2 hours ago Up 5 seconds 0.0.0.0:80->80/tcp httpd
[root@centos74-docker home]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9f8db5a1dec8 httpd "/sbin/init" 2 hours ago Up 10 seconds 0.0.0.0:80->80/tcp httpd
a0db7f26d277 centos "/bin/bash" 3 hours ago Exited (1) 3 hours ago centos7
da1dff6785b1 hello-world "/hello" 3 hours ago Exited (0) 3 hours ago practical_ptolem
今後の学習
Webサーバは導入できたので、今後はアプリケーションサーバやDBなどを導入して遊んでみたいと思います。
また、アップデート差分の抜き出し・反映や別の環境へのインポートなど。