0%

dockerfile

文章字数:844,阅读全文大约需要3分钟

构建过程

  1. 编写dockerfile
1
2
FROM nginx
RUN echo 'hello world' > /usr/share/nginx/html/index.html
  • FROM基于那个镜像做的定制
  • RUN执行后面的命令,执行一次会生成一层镜像,避免镜像膨胀过大,多个命令可以用&&连接,而不是多个RUN

指令

  1. COPY
1
2
COPY [--chown=<user>:<group>] <源路径1>...  <目标路径>
COPY [--chown=<user>:<group>] ["<源路径1>",... "<目标路径>"]
  • [--chown=<user>:<group>]: 可选,更改复制到容器内文件的拥有者和所属组
  • <源路径>可以是文件或目录,也可以是通配符。需要满足gofilepath.Match规则
  • <目标路径>容器内的路径,不存在会自动创建
  1. ADD
  • 使用同COPY
  • 在源文件是tar压缩文件时使用,可以自动解压到目标目录
  • gzip,bzip2,xz压缩格式
  1. RUN
  • 两种使用格式

    1
    2
    RUN <命令行命令>
    RUN ["可执行文件", "参数1", "参数2"]
  • 多个命令一起执行

1
2
RUN <命令行命令> \
&& <命令行命令>
  1. CMD
  • 使用同RUN
  • 作用是指定容器启动后执行的cmd命令,可被启动时传入的cmd覆盖。作用即设置默认cmd命令
  • 多条cmd只有最后一条有用
  1. ENTRYPOINT
  • 多条只有最后一个有效
  • 可以使用--entrypoint覆盖
  • CMD一样,容器启动后的默认执行的,一般搭配CMD一起使用,组合成一条命令
1
2
3
4
FROM nginx

ENTRYPOINT ["nginx", "-c"] # 定参
CMD ["/etc/nginx/nginx.conf"] # 变参

这样运行时会执行

1
nginx -c /etc/nginx/nginx.conf

然后可以通过修改cmd达到参数变化的效果

1
docker run  nginx:test -c /etc/nginx/new.conf
  1. ENV
  • 定义环境变量
1
2
ENV <key> <value>
ENV <key1>=<value1> <key2>=<value2>...
1
2
3
ENV NODE_VERSION 7.2.0
# 在命令中使用变量
RUN curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.xz"
  1. ARG
  • 效果和ENV类似,只是作用域不同。ARG设置的智能在dockerfile里有效果
  • 可以使用--build-arg <参数名>=<值>覆盖
  1. VOLUME
  • 用于定义默认挂载路径
  • 可以被-v覆盖
1
2
VOLUME ["<路径1>", "<路径2>"...]
VOLUME <路径>
  1. EXPOSE
1
EXPOSE <端口1> [<端口2>...]
  • 帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射。
  • 在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口。
  1. WORKDIR
  • 切换目录,切换之后命令会在新的目录下执行
  • 需要是存在的目录
  1. USER
  • 指定后续执行命令的用户和用户组(切换用户)
    1
    USER <用户名>[:<用户组>]
  1. HEALTHCHECK
1
2
3
4
HEALTHCHECK [选项] CMD <命令>:设置检查容器健康状况的命令
HEALTHCHECK NONE:如果基础镜像有健康检查指令,使用这行可以屏蔽掉其健康检查指令

HEALTHCHECK [选项] CMD <命令> : 这边 CMD 后面跟随的命令使用,可以参考 CMD 的用法。
  1. ONBUILD
  • 本次构建时不会执行,其他dockerfile使用FROM调用次dockerfile时会执行
1
ONBUILD <其它指令>
  1. LABEL
  • 添加元数据metadata
1
2
3
LABEL <key>=<value> <key>=<value> <key>=<value> ...
# 例如添加作者
LABEL org.opencontainers.image.authors="runoob"