学习更新虚拟化环境技能:在CentOS中体验Docker
毋庸置疑,虚拟化环境正以日新月异的速度演进。在主要业务环境中,过去一直以服务器虚拟化为主导,但是容器虚拟化Docker似乎已经开始渗透进来。
很久以前,我迷上了服务器虚拟化,建了一个家庭服务器房(设备不算很好),玩了一段时间的VMware和Hyper-V。然而,最近我决定在Hyper-V上搭建Docker环境,并开始学习。
准备 CentOS
在Hyper-V上准备CentOS。
在撰写时(2018.04.01),CentOS 7.4是最新版本。
选择了基于「服务器(使用图形界面)」的CentOS作为基本环境。
目前除此之外,没有安装任何其他东西。
顺便提一下,主机名是「centos74-docker」。
2.安装Docker
我参考了这个链接(@inakadegaebal的贡献)来进行了Docker的设置。
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.
用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
以后的学习
[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
以后的学习
[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 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服务器,因此我计划在未来试着部署应用服务器和数据库等。另外,还想尝试提取和应用更新差异,并导入到其他环境中。