dokcerfile详解总结

1.作为一个文本文件、相当于一个脚本,来制定镜像,镜像的制作过程是一层一层的、每一层都要添加配置和文件、把所有命令写入一个脚本。

2.指令详解

(每执行一条指令,相当于构建镜像大厦的多一楼层)

第一条必须的指令:

FROM 指定基础镜像

Docker Hub上寻找一个最符合我们最终目标的镜像为基础镜像进行定制。官方镜像有多种:服务类(nginx、redis、mongo、mysql、httpd、php)、运行语言的(node、openjdk、python)等

Docker还有一个特殊的镜像,scratch(虚拟的空白的镜像)作为基础镜像,代表创建的惊镜像为第一层。

RUN 执行命令

两种格式

shell:run + 命令

exec : run + 可执行文件 +参数1 +参数2(类似函数)

当需要执行多条命令时,用&&连接

例:

RUN buildDeps=‘gcc libc6-dev make wget’ \ #/表示换行 && apt-get update \ && apt-get install -y $buildDeps \ && rm -rf /var/lib/apt/lists/* \ && rm redis.tar.gz \ #清理缓存等多层构建中无关的东西的命令

构建镜像(是在服务端构建)

RUN echo ‘

Hello, Docker!

’ > /usr/share/nginx/html/index.html —> Running in 9cdc27646c7b —> 44aa4490ce2c Removing intermediate container 9cdc27646c7b Successfully built 44aa4490ce2c

run启动一个容器9cdc27646c7b、执行了多条命令,并提交了这一层44aa4490ce2c,随后删除所用到的容器44aa4490ce2c

docker build 命令进行镜像构建

docker build [选项] <上下文路径/URL/-> docker build -t nginx:v3 . #制定了最终镜像的名称,最后那个.表示当前目录,指定上下文的路径

注:将多条run指令的内容合在一起,建立一层,不然多条run指令会产生臃肿多层的镜像

因为是在客户端build,在服务端构建,所以需要将文件送到服务端

一般来说,应该会将Dockerfile置于一个空目录下,或者项目根目录下。如果该目录下没有所需文件,那么应该把所需文件复制一份过来。如果目录下有些东西确实不希望构建时传给 Docker 引擎,那么可以用.gitignore一样的语法写一个.dockerignore,该文件是用于剔除不需要作为上下文传递给 Docker 引擎的。

COPY 复制文件

COPY 指令将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置

COPY [–chown=:] <源路径>… <目标路径> #可以改变文件的所属用户和组 COPY [–chown=:] ["<源路径1>",… “<目标路径>”]

ADD 更高级的复制文件

<源路径> 可以是一个URL,这种情况下,Docker 引擎会试图去下载这个链接的文件放到 <目标路径> 去。下载后的文件权限自动设置为 600

如果 <源路径> 为一个 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz的情况下,ADD 指令将会自动解压缩这个压缩文件到 <目标路径> 去。

尽可能的使用 COPY,因为 COPY 的语义很明确,就是复制文件而已

CMD 容器启动命令

指令的格式与run相似

CMD 指令就是用于指定默认的容器主进程的启动命令的

对于容器而言,其启动程序就是容器应用进程,容器就是为了主进程而存在的,主进程退出,容器就失去了存在的意义,从而退出,其它辅助进程不是它需要关心的东西

CMD service nginx start

ENTRYPOINT 入口点

指令的格式与run一样

目的和CMD一样,指定容器的启动程序和参数,相对较繁琐

当指定了 ENTRYPOINT 后,CMD 的含义是将 CMD 的内容作为参数传给 ENTRYPOINT 指令,变为

“”

ENV 设置环境变量

ENV NODE_VERSION 7.2.0

下文通过来使用

$NODE_VERSION

ARG 构建参数

所设置的构建环境的环境变量,在将来容器运行时是不会存在这些环境变量的

VOLUME 定义匿名卷

容器运行时应该尽量保持容器存储层不发生写操作,所以将动态文件保存到卷中

EXPOSE 声明端口

声明运行时容器提供服务端口

WORKDIR 指定工作目录

WORKDIR 指令可以来指定工作目录

发布了16 篇原创文章 · 获赞 1 · 访问量 814

猜你喜欢

转载自blog.csdn.net/apple_1900/article/details/104010115