一种定义docker镜像启动脚本的简单方法
自定义镜像有两种方法,首先是编写dockerfile,其次是将容器提交为镜像。两种方式都可能需要定义镜像启动脚本,将容器中需要配置的环境变量,需要启动的进程都准备好。这样别人用镜像时可以直接使用。定义镜像的启动脚本有很多办法,有些需要根据镜像所属的linux版本自身的启动机制来实施。但是此类方法有个问题,不同的linux发行版,相同发行版的不同版本,相同发行版相同版本的不同裁剪力度的基础镜像都会导致启动脚本千差万别。
本文介绍一种简单的方法,且好理解和非常通用,几乎所有的linux镜像都可以如法炮制,屡试不爽!假设我们有了一个容器,在将容器提交为镜像之前,在容器根目录新建一个脚本文件,在脚本文件中将启动命令写好。下面例子的启动工作就是将vsftpd启动。
新建脚本
vi /run.sh
chmod a+x /run.sh
文件中内容如下
/usr/sbin/vsftpd
tail -f /run.sh
重点在于最后一行,它将自身显示在标准输出中且不会返回,相当于一直在运行,这样就避免了脚本run.sh执行完之后自然结束,导致容器自动退出。接着就将该容器提交为镜像。再写一个dockerfile,基于前面的镜像再做一个镜像,dockerfile的最后一行指定启动命令。
CMD /run.sh
新生成的镜像,只要被执行且不指定执行时的启动命令,其就会默认执行脚本run.sh。举例如下
docker run -d --name some-container-name some-image-name
网友评论