Published 2021-01-08

Dockerfile

Dockerfile 是一个包含用于组合映像的命令的文本文档。可以使用在命令行中调用任何命令。 Docker 通过读取 Dockerfile 中的指令自动生成映像。 docker build 命令用于从 Dockerfile 构建映像。可以在 docker build 命令中使用-f 标志指向文件系统中任何位置的 Dockerfile。

文件说明

Docker 从上到下的顺序运行 Dockerfile 的指令,第一条指令必须是 FROM。

  1. FROM

用于设置基本映像,FROM 必须作为第一条指令

  1. MAINTAINER

docker 镜像和指令的创建者

  1. CMD

用于执行映像的应用程序

CMD ["executable","param1","param2"]
  1. RUN

用于执行当前映像的任何命令

RUN /bin/bash -c "source $HOME/.bashrc;echo $HOME"
  1. LABEL

用于添加标签,设置映像标签

LABEL maintainer="manon.icu"
  1. EXPOSE

用于暴露端口到网络

#暴露80端口

expose 80

expose 80/tcp
  1. ENV

设置环境变量

FROM node:12

ENV workdirectory /usr/node
  1. COPY/ADD

用于将源文件复制到目的地

COPY dist /www/dist
  1. ENTRYPOINT

docker 镜像启动后的第一条执行命令

FROM ubuntu:latest

ENTRYPOINT ["ls"]
  1. VOLUME

挂载卷

FROM node:12
RUN mkdir /node
WORKDIR /node
RUN echo "Welcome to Node.js" > node
VOLUME /node
  1. USER

设置运行容器的账户

USER admin
#
RUN adduser -D admin
USER admin
  1. WORKDIR

用于为 RUN/CMD/COPY 指令设置工作目录,如不存在,会默认创建

  1. ARG

用于在创建时接收的参数

ARG JAVA_PATH=/opt/jdk/jdk1.8.0_251

ENV JAVA_HOME ${JAVA_PATH}
  1. ONBUILD

用于指定将 Dockerfile 中的镜像用作另一个镜像的基础镜像时运行的命令

FROM node:12
RUN mkdir -p /usr/node/app
WORKDIR /usr/node/app
ONBUILD COPY package.json /usr/node/app/
ONBUILD RUN npm install
ONBUILD COPY . /usr/node/app
CMD [ "npm", "start" ]
  1. STOPSIGNAL
STOPSIGNAL SIGQUIT
  1. SHELL

设置 docker 镜像默认的终端

SHELL ["/bin/bash","-c","echo hello"]
  1. HEALTHCHECK

检查镜像是否健康运行,需要在镜像内部持续运行一段命令

FROM ubuntu:latest
HEALTHCHECK --interval=60s --timeout=5s \
CMD curl -f http://fosstechnix.info/ || exit 1
EXPOSE 80
  1. .dockerignore

用于设置 docker 镜像构建过程中忽略的文件

sudo vim .dockerignore

*.yaml
__pycache__/
.git
.aws
.env

完整的 Dockerfile

FROM node:lts-alpine

WORKDIR /app
ADD . /app
RUN npm install

CMD ["npm", "start"]

更多