举例来说,启动干净的镜像文件busybox,然后再容器内创建httpd的根目录和index.html文件,然后制作成行的镜像。
启动容器,名称为sunny01img
docker run -it --name sunny01img busybox:sunny01 #在容器内进行修改 / # mkdir -p /web/html / # cd /web/html /web/html # vi index.html <h1>this is sunny docker image,it is a nice day!<\h1>
在另一个终端,执行如下命令
docker commit -a "sunny<sunny@sunny.docker>" -p -m "for test commit image" sunny01img
用命令查看新生成的镜像
docker images
查看到有tag为none的新生成的镜像
然后将镜像推送到云服务商的镜像仓库中,使用新的镜像来启动容器
新建一个标签
docker tag 3498bc48a842 websrv:sunnyweb01
将新的镜像websrv:sunnyweb01 运行为守护模式(-d,即后台),然后指定进程为httpd,前端运行模式(-f),指定家目录为/web/html
docker run --name sunnyweb01 -d websrv:sunnyweb01 httpd -f -h /web/html
查看
docker ps
查看到websrv:sunnyweb01镜像运行为容器sunnyweb01.
查看进程信息
docker top sunnyweb01
查看详细容器信息
docker inspect sunnyweb01
查看到当前的容器ip,测试httpd的服务
改变容器的默认启动命令
在第一版新建镜像websrv:sunnyweb01的基础上创建第二版的镜像,在另一个终端上,不执行默认的cmd,而是默认启动httpd服务
首先,先启动镜像,进入cmd,执行相关命令
docker run --name sunnyweb02 -it websrv:sunnyweb01
打开另一个shell终端,执行如下命令,生成一个新的镜像
docker commit -a "sunny <sunny@ghnsunny.cn>" -p -m "web server" -c 'CMD ["/bin/httpd","-f","-h","/web/html"]' sunnyweb02
注意 -c,修改运行中的命令,后接一个字典,所有的字段都要分别传递,用引号引用,逗号隔开,否则参数传递失败,导致镜像不能启动。
sunnyweb02是指当前要作为镜像的模板容器名称,如这里以sunnyweb02这个容器作为模板来创建新镜像
给新生成的镜像打标签,将新生成的镜像推送到云仓库
启动镜像,容器名称为web2.0,并且运行在后台(-d)
测试,查看容器是否正常运行
docker ps
查看容器的ip
docker inspect web2.0
测试httpd服务
这个例子说明,制作镜像是可以-c改变默认的命令,而不是默认的sh命令,可以让容器基于新建镜像启动时运行指定的命令。
西部数码的容器云是通过docker技术,在集群服务器上部署容器服务实现,拥有上万Linux镜像,功能强大、简单易用,可轻松作集群服务,自由组网、轻量灵活。
高性价比的容器云产品链接 https://www.west.cn/paas/container/