1 交互式登陆:
systemctl start docker.service
docker ps -a
docker rm -f `docker ps -aq`
docker ps -a
docker run -d --name vm1 nginx
3f3ad0e94c46357dff1bcd08c64f0d0a5c97638345e7e609f341a3708342d35a
docker container attach vm1
#该命令会打断nginx服务,nginx后面有cmd命令我们发现是无法进入vm1内部的
docker ps
docker start vm1
docker ps
docker run -it --name vm2 nginx bash #run=create+start;交互式建立一个vm2 nginx镜像bash会覆盖nginx之后的CMD
root@4f48db4019b7:/#
docker container attach vm2
root@4f48db4019b7:/# ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
root@4f48db4019b7:/# [root@foundation30 ~]#
docker container exec -it vm1 bash
root@3f3ad0e94c46:/# hostname
3f3ad0e94c46
root@3f3ad0e94c46:/#
镜像分层——->共享;
2. 开启多个服务在一个镜像中:
Dockerfile 负责安装;supervisor负责开启多个服务
因为cmd命令只能有一条所以想要同时开启多个服务定制到镜像中就需要调用一个管理进程来管理这些并行进程的运行启动。
supervisor管理进程,是通过fork/exec的方式将这些被管理的进程当作supervisor的子进程来启动,所以我们只需要将要管理进程的可执行文件的路径添加到supervisor的配置文件中就好了。此时被管理进程被视为supervisor的子进程,若该子进程异常中断,则父进程可以准确的获取子进程异常中断的信息,通过在配置文件中设置autostart=ture,可以实现对异常中断的子进程的自动重启。
cd /tmp/docker/
vim Dockerfile
FROM rhel7
EXPOSE 80:22
COPY dvd.repo /etc/yum.repos.d/dvd.repo
RUN rpmdb --rebuilddb && yum install -y httpd openssh-server openssh-client supervisor && 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:westos | chpasswd
COPY supervisord.conf /etc/supervisord.conf
CMD ["/usr/bin/supervisord"
vim supervisord.conf