[root@foundation44 ~]# cd /tmp/docker/
[root@foundation44 docker]# systemctl start dokcer
[root@foundation44 docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@foundation44 docker]# docker run -d --name vm1 nginx #打入后台运行,不能查看内容,nginx后面默认跟的是cmd命令,此时无法进入vm1内部
68469b00bffe1e5dd6ba4ddaf8c9eb7a2c1be4e8d4949c0526debc1ffbc14429
[root@foundation44 docker]# docker container attach vm1 #查看容器内部,查看不到,而且一旦执行此命令,vm1就会自动退出
[root@foundation44 docker]# docker start vm1
vm1
[root@foundation44 docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
68469b00bffe nginx "nginx -g 'daemon ..." 7 minutes ago Up 7 seconds 80/tcp vm1
[root@foundation44 docker]# docker container exec -it vm1 bash #这个命令可以进入容器,并且可以查看内容
root@68469b00bffe:/# ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
root@68469b00bffe:/# exit
[root@foundation44 docker]# docker run -it --name vm2 nginx bash #run=create+start,交互式运行,bash可以覆盖cmd,打开交互shell,进入到容器内部查看信息
root@db59ec377fa8:/# #不能关闭容器退出, ctrl + p q ,这个是没有关闭容器的退出,ctrl + d ,关闭容器并且退出
[root@foundation44 docker]#
[root@foundation44 docker]# docker container attach vm2 #查看容器内容
root@db59ec377fa8:/# ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
root@db59ec377fa8:/# exit
1.开启多个服务在一个镜像中(以httpd+ssh为例)
镜像分层是为了共享
Dockerfile 负责安装; supervisor负责开启多个服务
因为cmd命令只能有一条所以想要同时开启多个服务定制到镜像中就需要调用一个管理进程来管理这些并行
进程的运行启动。
supervisor管理进程,是通过fork/exec的方式将这些被管理的进程当作supervisor的子进程来启动,
所以我们只需要将要管理进程的可执行文件的路径添加到supervisor的配置文件中就好了。此时被管理进
程被视为supervisor的子进程,若该子进程异常中断,则父进程可以准确的获取子进程异常中断的信息,
通过在配置文件中设置autostart=ture,可以实现对异常中断的子进程的自动重启。
[root@foundation44 tmp]# cd docker/
[root@foundation44 docker]# ls
Dockerfile dvd.repo ssh web
[root@foundation44 docker]# vim dvd.repo #编辑yum源
1 [dvd]
2 name=dvd
3 baseurl=http://172.25.44.250/rhel7.3
4 gpgcheck=0
5
6 [docker]
7 name=docker
8 baseurl=http://172.25.254.250/pub/docker
9 gpgcheck=0
[root@foundation44 docker]# vim Dockerfile #编辑安装脚本
1 FROM rhel7
2 EXPOSE 80
3 COPY dvd.repo /etc/yum.repos.d/dvd.repo
4 RUN rpmdb --rebuilddb && yum install -y httpd openssh-server openssh-clients supervis or && yum clean all && ssh-keygen -q -t rsa -f /etc/ssh/ssh_host_rsa_key -N "" && ssh -keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N "" && ssh-keygen -q -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N "" && echo root:redhat | chpasswd
5 COPY supervisord.conf /etc/supervisord.conf
6 CMD ["/usr/sbin/supervisord"]
[root@foundation44 docker]# docker cp dvd.repo vm1:/etc/yum.repos.d/ #把yum源复制到默认目录下
#重新打开一个shell,测试yum源
[root@foundation44 ~]# docker run -it --name vm1 rhel7 bash
bash-4.2# ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
bash-4.2# cd /etc/yum.repos.d/
bash-4.2# ls
dvd.repo rhel7.repo
bash-4.2# yum repolist
Skipping unreadable repository '///etc/yum.repos.d/rhel7.repo'
docker | 2.9 kB 00:00
dvd | 4.1 kB 00:00
(1/3): docker/primary_db | 9.1 kB 00:00
(2/3): dvd/primary_db | 3.9 MB 00:00
(3/3): dvd/group_gz | 136 kB 00:00
repo id repo name status
docker docker 11
dvd dvd 4751
repolist: 4762
# 回到刚才的shell继续进行操作
[root@foundation44 docker]# vim supervisord.conf
1 [supervisord] #开启多个服务
2 nodaemon=true
3
4 [program:sshd] #运行sshd
5 command=/usr/sbin/sshd -D
6
7 [program:httpd] #运行httpd
8 command=/usr/sbin/httpd
[root@foundation44 docker]# docker build -t rhel7:v2 /tmp/docker #执行脚本,构建镜像v2
Successfully built 3fe178f06b6e
[root@foundation44 docker]# docker run -d --name vm4 -v /tmp/docker/web:/var/www/html rhel7:v2 #挂载
3354cf9ae475d36ac68e298f4b9f2d2c69ed3335535fae70ef2acf271b283a5e
[root@foundation44 docker]# docker ps #查看挂载情况
[root@foundation44 docker]# docker inspect vm4
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.3",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:03"
[root@foundation44 docker]# curl 172.17.0.3 # httpd部署成功
<h1>www.westos.org</h1>
<h1>www.westos.org</h1>
<h1>www.westos.org</h1>
<h1>www.westos.org</h1>
<h1>www.westos.org</h1>
<h1>www.westos.org</h1>
[root@foundation44 docker]# ssh -l