dockerfile 粗解
docker file 指令
| 指令 | 说明 | 语法 | 示例 | 个人理解 |
|---|---|---|---|---|
| FROM | 指定创建镜像的基础镜像。第一条指令必须是FROM | FROM |
FROM ubuntu:16.04 | 添加基础镜像信息 |
| MAINTAINER | 指定维护着的信息 | MAINTAINER |
MAINTAINER 383595196@qq.com | 报上大名 |
| RUN | 运行命令 | RUN |
RUN apt-get update && apt-get install -y openssl libssl-dev git curl | 执行命令添加基础包 |
| CMD | 指定启动容器时,默认执行的命令(一个dockerfile 只有一个CMD) | CMD ["executable", "param1", "param2"] |
1 执行在RUN之前 2 用户启动容器时手动指定了运行的命令(作为run的参数),则会覆 盖掉CMD指定的命令。 | |
| LABEL | 指定生成镜像的标签信息 | LABEL key=value | 添加metadata数据 | |
| EXPOSE | 声明镜像内服务所监听的端口 | EXPOSE |
EXPOSE 22 80 8443 | 告诉Docker服务器容器暴露的湍口。启动时需要通过 -P,Docker 主机自动分配一个端口转发到指定的端口;使用-P,则可以具体指定那个本地端口映射。 |
| ENV | 指定环境变量 | ENV |
ENV PG_MAJOR 9.3 | 指定环境变量,后续RUN指令使用,并在容器运行时保持。 |
| ADD | 复制指定 |
ADD |
复制本地主机的 |
|
| COPY | 复制本机 |
COPY |
复制本地主机 |
|
| ENTRYPOINT | 指定镜像默认入口 | ENTRYPOINT ["executable", "param1", "param2"] ENTRYPOINT command param1 param2 | 详见以下解析 | |
| VOLUME | 创建数据挂载点 | VOLUME ["/data"] | 创建一个可以本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。 | |
| USER | 指定运行容器时的用户名或uuid | USER daemon | RUN groupadd -r postgres && useradd -r -g postgres postgres | 指定运行容器的用户名或UID,后续的RUN也会使用指定用户。要临时获取管理员权限可以使用gosu,而不推荐sudo。 |
| WORKDIR | 配置工作目录 | WORKDIR /path/to/workdir | 为后续的RUN CMD ENTRYPOINT配置工作目录。可以使用多个WORKDIR 如果后续命令是相对路径,会拼接。 | |
| ARG | 指定镜像内使用的参数 | ARG key=value | FROM 之前指定只在在from 之前用,FROM 之后需要重新指定。可以构建容器时使用 --build-arg key=value 替换参数 | |
| ONBUILD | 配置当前创建的镜像作为其他镜像的基础镜像时,所执行的创建操作指令 | ONBUILD |
配置所建镜像为其他镜像的基础镜像,则会执行ONBUILD 命令 | |
| STOPSIGNAL | 容器退出信号值 | 目的是为了让容器内的应用程序在接收到signal之后可以先做一些事情,实现容器的平滑退出。 | ||
| HEALTHCHECK | 健康检查 | FROM nginx RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/* HEALTHCHECK --interval=5s --timeout=3s CMD curl -fs http://localhost/ exit 1 | 容器健康检查 例子来子这个小哥 https://yeasy.gitbook.io/docker_practice/image/dockerfile/healthcheck | |
| SHELL | 指定使用shell时的默认shell类型 | SHELL ["/bin/sh", "-c"] |
RUN vs CMD vs ENTRYPOINT
RUN 就是添加基础包用的, 可以创建多个。
添加基础包
RUN apt-get update && apt-get install -y openssl libssl-dev git curl
apt-get update 和 apt-get install 在单个 RUN 指令中执行。 这样做是为了确保安装最新的软件包。 如果 apt-get install 位于单独的 RUN 指令中,那么它将重用 apt-get update 添加的层,该层可能是很久以前创建的。
CMD 添加默认执行参数,并且 docker run 后如果跟着命令,则 CMD命令被覆盖
CMD echo "Hello world"
运行 docker run -it [image]
输出
Hello world
docker run -it [image] /bin/bash
则被覆盖不执行
只执行 /bin/bash
ENTRYPOINT
ENTRYPOINT 用于设置容器启动时要执行的命令及其参数,不同于CMD他的参数是一定执行的
ENTRYPOINT ["/bin/echo", "Hello"]
运行 docker run -it [image]
输出
Hello
运行 docker run -it [image] doudou
Hello doudou
修改 dockerfile
ENTRYPOINT ["/bin/echo", "Hello"]
CMD ["World"]
运行 docker run -it [image]
输出
Hello World
运行 docker run -it [image] doudou
Hello doudou
Docker RUN vs CMD vs ENTRYPOINT
以上观点来自这位老兄
https://goinbigdata.com/docker-run-vs-cmd-vs-entrypoint/
USER 的解析
https://blog.csdn.net/boling_cavalry/article/details/93380447

浙公网安备 33010602011771号