七、自己定制一个docker镜像
1:启动容器安装软件服务,启动一个基础镜像,并在基础惊险各种安装相应的服务(如:nginx、php等等)
2:将安装好服务的容器commit提交为一个新的镜像
3:启动新容器来测试新提交的镜像
案例:
使用centos7来制作一个nginx的新镜像
基础镜像选择:ansible/centos7-ansible
[root@inode3 ~]# docker run -d ansible/centos7-ansible /usr/bin/tail -F /var/log/access.log a4178be2a23f4c437b692ea678cce50292c6541e98dc7690064be32062c3b4c6 [root@inode3 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a4178be2a23f ansible/centos7-ansible "/usr/bin/tail -F /v…" 6 seconds ago Up 5 seconds zen_panini 注意:启动基础镜像时,一定要将其夯住,否则在制作过程中,不小心把xshell窗口关闭了,前面做的工作就白废了。
第二步:进入启动的基础镜像中
[root@inode3 ~]# docker exec -it a4178be2a23f /bin/bash
[root@a4178be2a23f ansible]#
第三步:开始部署nginx服务,这里使用yum来安装并启动nginx服务
[root@a4178be2a23f ansible]# yum install -y nginx [root@a4178be2a23f ansible]# /usr/sbin/nginx [root@a4178be2a23f ansible]# ps -ef |grep nginx root 139 0 0 14:01 ? 00:00:00 nginx: master process /usr/sbin/nginx nginx 140 139 0 14:01 ? 00:00:00 nginx: worker process 启动服务时,因为基础镜像没有systemctl的权限,最好使用全路径来启动服务 使用基础镜像来安装的,不会有index.html页面的,需要我们手动来创建页面,也可以使用挂载volume数据卷来提供访问页面 echo "welcome to nginx_centos7 docker " > /usr/share/nginx/html/index.html
第四步:编写容器启动脚本,注意一定要有一定目录可以夯住,否则容器会一启动就关闭
万能的夯住命令: tail -F /var/log/access.log 无论/var/log/access.log是否存在,都可以夯住 容器启动脚本 vim /init.sh #/bin/bash /usr/sbin/nginx /usr/bin/tail -F /var/log/access.log
第五步:commit提交新镜像名称为nginx_centos7:v1
docker commit "制作好的容器的CONTAINER ID" 新镜像名字:版本 [root@inode3 ~]# docker commit a4178be2a23f nginx_centos7:v1 sha256:daa06cb05db5c341877855cdb07090717708f57ceef51efe9cf15f3fb8db823d [root@inode3 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx_centos7 v1 daa06cb05db5 6 seconds ago 630MB nginx latest a1523e859360 9 days ago 127MB busybox latest 6d5fcfe5ff17 2 months ago 1.22MB centos 6.9 2199b8eb8390 11 months ago 195MB ansible/centos7-ansible latest 688353a31fde 3 years ago 447MB 新镜像制作完成
注意:启动新容器后面的夯住的命令,要为我们在容器中创建的init.sh脚本,不然nginx服务无法启动 [root@inode3 ~]# docker run -d -p 80:80 --name web1 nginx_centos7:v1 /bin/bash /init.sh 4ba76336ff926123fd54a87bb52ea095ee1e802b9e24e1de2b96c5a9d247411d [root@inode3 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4ba76336ff92 nginx_centos7:v1 "/usr/bin/tail -F /v…" 3 seconds ago Up 2 seconds 0.0.0.0:80->80/tcp web1 访问web1容器 [root@inode3 ~]# curl 192.168.32.103 welcome to nginx_centos7 docker
I have a dream so I study hard!!!