1. Dockerfile 编写的基本结构:Dockerfile 一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令,’#’ 为Dockerfile 中的注释。
2. 一台主机可以有多个Dockerfile要使用多个Dockerfile 创建镜像,可以在不同目录编写Dockerfile,然后在Dockerfile 所在的目录下构建新的镜像。
注意:Dockerfile 中所包含需要的内容;如COPY的文件、目录等,都需要在Dockerfile 同级目录下存在。
3. docker build命令:docker build是基于dockerfile制作镜像的命令。命令格式为:
- docker build [OPTIONS] PATH | URL | -
-
- 选项:
- -t: 指定要创建的目标镜像名
- -c,- cpu-shares int: CPU份额(相对权重)
-
- -m,- memory bytes: 内存限制
- --build-arg: 设置构建时变量,就是构建的时候修改ARG指令的参数
1>. PATH: 一般用" . ",( 即当前工作目录 )作为上下文路径。
· docker build - < context.tar.gz
- FROM <repository>[:<tag>] 或
-
- FROM <repository>@<digest>
3>. 示例:
- # Description: test image
-
- FROM busybox:latest
5. Dockerfile指令---MAINTAINER指令:
1>. 介绍:用于让dockerfile制作者提供本人的详细信息。dockerfile 并不限制MAINTAINER 指令可以出现的位置,但推荐将其放置于FROM指令之后。
2>. 格式:
MAINTAINER 's detail>
3>. 示例:
- # Description: test image
-
- FROM busybox:latest
-
- MAINTAINER "Along
"
6. Dockerfile指令---COPY指令:
1>. 介绍:从上下文目录中复制文件或目录到容器里指定的路径。
2>. 格式:
- COPY <src>... <dest> 或
-
- COPY ["
" ,... "" ]
注意:
- # Description: test image
-
- FROM busybox:latest
-
- MAINTAINER "Along
" -
- COPY index.html /data/web/html/ #要确保dockerfile 同级路径下有index.html文件
7. Dockerfile指令---ADD指令:
1>. 介绍:ADD 指令类似于COPY指令,ADD支持使用TAR文件和URL路径。
2>. 格式:
- ADD <src> .. <dest> 或
-
- ADD ["
" .. "" ]
注意:同COPY指令,但是如果是一个本地系统上的压缩格式的tar文件,它将被展开为一个目录,其行为类似于"tar-x"命令;然而,通过URL获取到的tar文件将不会自动展开。
示例:
- # Description: test image
-
- FROM busybox:latest
-
- MAINTAINER "Along
" -
- COPY index.html /data/web/html/
-
- COPY yum.repos.d /etc/yum.repos.d/
-
- ADD http://nginx.org/download/nginx-1.15.8.tar.gz /usr/local/src/
8. Dockerfile指令---WORKDIR指令:
1>. 介绍:用于为Dockerfile中所有的RUN、CMD、ENTRYPOINT、COPY和ADD指令设定工作目录。
2>. 格式:
WORKDIR <dirpath>
注意:在Dockerfile文件中,WORKDIR指令可出现多次,其路径也可以为相对路径,不过,是相对此前一个WORKDIR指令指定的路径;
- # Description: test image
-
- FROM busybox:latest
-
- MAINTAINER "Along
" -
- COPY index.html /data/web/html/
-
- COPY yum.repos.d /etc/yum.repos.d/
-
- WORKDIR /usr/local/
-
- ADD nginx-1.15.8.tar.gz ./src/
9. Dockerfile指令---VOLUME指令:
1>. 介绍:用于在image中创建一个挂载点目录,以挂载Docker host上的卷或其它容器上的卷。
- VOLUME <mountpoint> 或
-
- VOLUME ["
" ]
例如:VOLUME /data
3>. 示例:
- # Description: test image
-
- FROM busybox:latest
-
- MAINTAINER "Along
" -
- COPY index.html /data/web/html/
-
- COPY yum.repos.d /etc/yum.repos.d/
-
- #ADD http://nginx.org/download/nginx-1.15.8.tar.gz /usr/local/src/
-
- WORKDIR /usr/local/
-
- ADD nginx-1.15.8.tar.gz ./src/
-
- VOLUME /data/mysql
10. Dockerfile指令---EXPOSE指令:
1>. 介绍:声明运行时容器提供服务端口, 这只是一个声明, 在运行时并不会因为这个声明应用就会开启这个端口的服务。
EXPOSE <port>[/ <protocol>] [<port>[/ <protocol>] ....EXPOSE <port>[/ <protocol>] [<port>[/ <protocol>] ....
注意: 用于指定传输层协议,可为tcp或udp二者之一,默认为TCP协议
3>. 示例:
- # Description: test image
-
- FROM busybox:latest
-
- MAINTAINER "Along
" -
- COPY index.html /data/web/html/
-
- COPY yum.repos.d /etc/yum.repos.d/
-
- #ADD http://nginx.org/download/nginx-1.15.8.tar.gz /usr/local/src/
-
- WORKDIR /usr/local/
-
- ADD nginx-1.15.8.tar.gz ./src/
-
- VOLUME /data/mysql
-
- EXPOSE 80/tcp
11. Dockerfile指令---ENV指令:
1>. 介绍:用于为镜像定义所需的环境变量,并可被Dockerfile文件中位于其后的其它指令(如ENV、ADD、COPY等)所调用
- ENV <key> <value> 或
-
- ENV <key>=<value> . .
注意:第一种格式中,之后的所有内容均会被视作其组成部分, 因此,一次只能设置一个变量。
第二种格式可以一次设置多个变量,每个变量为一个”="的键值对,如果包含空格,可以以反斜线(\)进行转义,也可通过对其加引号进行标识;另外,反斜线也可用于续行。
定义多个变量时,建议使用第二种方式,以便在同一层中完成所有功能。
3>. 示例:
- # Description: test image
-
- FROM busybox:latest
-
- MAINTAINER "Along
" -
- ENV DOC_ROOT=/data/web/html/ \
- WEB_SERVER_PACKAGE="nginx-1.15.8"
-
- COPY index.html ${DOC_ROOT}
-
- COPY yum.repos.d /etc/yum.repos.d/
-
- #ADD http://nginx.org/download/nginx-1.15.8.tar.gz /usr/local/src/ WORKDIR /usr/local/
-
- ADD ${WEB_SERVER_PACKAGE}.tar.gz ./src/
-
- VOLUME /data/mysql
-
- EXPOSE 8080:80/tcp
12. Dockerfile指令---RUN指令:
1>. 介绍:用于指定docker build过程中运行的程序,其可以是任何命令。
2>. 语法:
- RUN <command> 或
-
- RUN ["
" , "" , "" ]
注意: 第一种格式中,通常是一个shell命令, 且以“/bin/sh -c”来运行它;
- # Description: test image
-
- FROM busybox:latest
-
- MAINTAINER "Along
" -
- ENV DOC_ROOT=/data/web/html/ \
- WEB_SERVER_PACKAGE="nginx-1.15.8.tar.gz"
-
- COPY index.html ${DOC_ROOT}
-
- COPY yum.repos.d /etc/yum.repos.d/
-
- WORKDIR /usr/local/
-
- ADD http://nginx.org/download/${WEB_SERVER_PACKAGE} ./src/
-
- #ADD ${WEB_SERVER_PACKAGE} ./src/
-
- VOLUME /data/mysql
-
- EXPOSE 8080:80/tcp
-
- RUN cd ./src && \
- tar -xf ${WEB_SERVER_PACKAGE}.tar.gz
13. Dockerfile指令---CMD指令:
1>. 介绍:类似于RUN指令,CMD指令也可用于运行任何命令或应用程序,不过,二者的运行时间点不同。
- CMD <command> 或
-
- CMD ["
" ,"" ,"" ] 或 -
- CMD ["
" ,"" ]
注意:前两种语法格式的意义同RUN
- FROM busybox
-
- LABEL maintainer="Along
" app="httpd" -
- ENV WEB_DOC_ROOT="/data/web/html"
-
- RUN mkdir -p ${WEB_DOC_ROOT} && \
- echo "
Busybox httpd server
" > ${WEB_DOC_ROOT}/index.html -
- CMD /bin/httpd -f -h ${WEB_DOC_ROOT}
14. Dockerfile指令---ENTRYPOINT指令:
1>. 介绍:类似CMD指令的功能,用于为容器指定默认运行程序,从而使得容器像是一个单独的可执行程序。
与CMD不同的是,由ENTRYPOINT启动的程序不会被docker run命令行指定的参数所覆盖,而且,这些命令行参数会被当作参数传递给ENTRYPOINT指令指定的程序。
- ENTRYPOINT <command>
-
- ENTRYPOINT ["
" , "" , "" ]
注意:docker run命令传入的命令参数会覆盖CMD指令的内容并且附加到ENTRYPOINT命令最后做为其参数使用。
- FROM busybox
-
- LABEL maintainer="Along
" app="httpd" -
- ENV WEB_DOC_ROOT="/data/web/html"
-
- RUN mkdir -p ${WEB_DOC_ROOT} && \
- echo "
Busybox httpd server
" > ${WEB_DOC_ROOT}/index.html -
- ENTRYPOINT /bin/httpd -f -h ${WEB_DOC_ROOT}