使用dockerfile定制对象小结

FROM:images_name 这条语句是指定基础镜像,假如是静态编译的程序,不需要系统的支持可用Scrach(空镜像)。

RUN:shell命令或者 可执行程序 有两种执行方式,

shell方式:RUN echo ‘

hello docker!

’ >/usr/share/index.html

exec方式:RUN [可执行程序,“参数1”,“参数2”]

这里要注意的是每执行一条命令是创建一个新的容器,在容器可写层执行命令,然后再comit形成新的镜像,删除刚才的容器。在写dockerfile时一定要注意在镜像定制过程中每一层的任务关联性,比如编译和搭建一整个服务时,往往就放在一层镜像中。union FS 最大层数限制是127层。镜像的文件不会在下一层被删除,会一直跟随的整个镜像,因此在构建新的一层镜像最后,需要做的是清理不需要的缓存和文件,比如说apt的缓存文件。

在创建一个简单的镜像前两个命令就够用了,然后我们需要的是在我们机器上构建这个镜像。

docker build [选项] [需要文件的上下文路径]

同时docker支持使用git-repo和下载地址

docker build https://github.com/sky-2016yty/nothing-.git

会自动clone仓库到本地执行Dokcerfile

如果下载地址的内容是压缩包的话会先解压在构建,并且将解压后文件当着上下文。

docker build https:ww.skypointer.cn/test.tar.gz

同样的会使用标准输入流来执行docker build 命令 ,默认会将当前目录作为上下文展开。

cat Dockerfile |docker build 或 docker build -< Dockerfile

接下来是Dokcerfile的其他命令:

COPY:拷贝文件到镜像中

COPY

ADD:比COPY多一些功能,比如说下载,解压缩

CMD:指定容器主进程,默认的主进程是/bin/bash 需要注意的是docker不是虚拟机,中的说有应用都是运行在前台,并不是像虚拟机一样把服务启动在后台,容器并没有后台服务的概念。

CMD service nginx start 这样执行实际效果是 sh -c service nginx start ,这样sh就会被作为主进程,当命令执行完成过后,sh退出,容器就会退出,并不关心辅助线程的状况。

正确的做法是直接执行可执行文件,并要求以前台方式运行,

CMD [ “nginx”,”-g”,”daemon off:”] (使用双引号)

猜你喜欢

转载自blog.csdn.net/qq_36425506/article/details/78470521