作用
用于构建
docker
自定义镜像的文件
例子
# Dockerfile 文件内容
FROM circleci/node:latest-browsers
WORKDIR /usr/src/app/
USER root
COPY package.json ./
RUN yarn
COPY ./ ./
RUN npm run test:all
CMD ["npm", "run", "build"]
构建命令
docker build -f ./Dockerfile -t node:myself ./ # 依据 Dockerfile 构建一个名字叫 node:myself 的镜像, 最后的 ./ 代表本次执行的上下文路径, Dockerfile 使用的本地文件路径依据于此
注意:上下文路径下不要放无用的文件,因为会一起打包发送给 docker 引擎,如果文件过多会造成过程缓慢
Dockerfile 相关指令
FROM
获取镜像,定制的镜像都是基于 FROM 的镜像,这里的 nginx 就是定制需要的基础镜像,后续的操作都是基于 nginx
FROM nginx
RUN
在
docker build
时,执行命令行命令
- shell 格式:
RUN <命令行命令>
<命令行命令> 等同于,在终端操作的 shell 命令。- exec 格式:
RUN ["可执行文件", "参数1", "参数2"]
RUN ["./test.php", "dev", "offline"] 等价于RUN ./test.php dev offline
ADD
复制指令,从宿主机文件的全路径到docker容器下的文件夹路径
ADD check* /testdir/ # 拷贝所有 check 开头的文件
ADD ./php/www.conf /usr/local/etc/php-fpm.d/www.conf
COPY
复制指令,从上下文目录中复制文件或者目录到容器里指定路径,与add区别,**只复制目录中的内容而不包含目录自身****
COPY [--chown=<user>:<group>] <源路径1>... <目标路径>
COPY [--chown=<user>:<group>] ["<源路径1>",... "<目标路径>"]
COPY hom* /mydir/
COPY hom?.txt /mydir/
CMD
用于
docker run
时运行程序
ENTRYPOINT
搭配 CMD 命令使用:一般是变参才会使用 CMD ,这里的 CMD 等于是在给 ENTRYPOINT 传参
ENTRYPOINT ["nginx", "-c"] # 定参
CMD ["/etc/nginx/nginx.conf"] # 变参
1、不传参运行
$ docker run nginx:test
容器内会默认运行以下命令,启动主进程。
nginx -c /etc/nginx/nginx.conf
2、传参运行
$ docker run nginx:test -c /etc/nginx/new.conf
容器内会默认运行以下命令,启动主进程(/etc/nginx/new.conf:假设容器内已有此文件)
nginx -c /etc/nginx/new.conf
ENV
设置变量
ENV <key> <value>
ENV <key1>=<value1> <key2>=<value2>...
ENV NODE_VERSION 7.2.0
使用 $ NODE_VERSION 获取变量
ARG
设置变量,只作用于
build
阶段
VOLUME
定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷
VOLUME ["<路径1>", "<路径2>"...]
VOLUME <路径>
- 在启动容器
docker run
的时候,我们可以通过-v
参数修改挂载点
WORKDIR
指定工作目录。用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在。
WORKDIR <工作目录路径>
USER
用于指定执行后续命令的用户和用户组,这边只是切换后续命令执行的用户(用户和用户组必须提前已经存在)
USER <用户名>[:<用户组>]
网友评论