七、自己定制一个docker镜像

制作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

新镜像制作完成

第六步:启动一个为web1的容器来测试新镜像

 
注意:启动新容器后面的夯住的命令,要为我们在容器中创建的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 
原文地址:https://www.cnblogs.com/yaokaka/p/14178815.html