学习更新虚拟化环境技能:在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响应的结果,可以明确地知道它正在运作。为了确保,也可以在浏览器中进行检查。

centos_docker_httpd_20180401.png

我能够查看到无事首页。

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服务器,因此我计划在未来试着部署应用服务器和数据库等。另外,还想尝试提取和应用更新差异,并导入到其他环境中。

bannerAds