Dockerfile 使用
Dockerfile 常用命令
命令 | 备注 | 是否必填 |
---|---|---|
FROM | 基础镜像 | 必填 |
ADD | 拷贝文件到容器中(文件可以为 URL 链接) | 不必填 |
COPY | 拷贝文件到容器中(文件只能是本地文件) | 不必填 |
WORKDIR | 切换工作目录到指定目录 | 不必填 |
RUN | 镜像构建时运行脚本命令 | 不必填 |
CMD | 镜像构建后,启动容器时运行脚本命令 | 不必填 |
ENTRYPOINT | 镜像构建后,启动容器时运行脚本命令 | 不必填 |
ONBUILE | 在当前 Dockerfile 中不执行,在子镜像中会的 FROM 命令后执行 | 不必填 |
ENV | 设置环境变量,容器启动后依然存在 | 不必填 |
ARG | 设置变量参数,只在容器构建时存在 | 不必填 |
SHELL | 执行 SHELL 脚本 | 不必填 |
MAINTAINER | 维护人信息 | 不必填 |
LABEL | key-value 形式标签,没有实质作用 | 不必填 |
EXPOSE | 暴露容器内端口 | 不必填 |
USER | RUN、CMD、ENTRYPOINT 执行 Shell 命令时指定用户,默认 root | 不必填 |
VOLUME | 挂在主机目录到容器 | 不必填 |
HEALTHCHECK | 告诉 Docker 如何测试容器以检查它是否仍在工作,健康检查 | 不必填 |
命令示例
FROM
# Dockerfile 基于 centos 为基础镜像构建 FROM centos
MAINTAINER
# 维护者信息 MAINTAINER Raindrop <727474430@qq.com>
LABEL
# 标签,一般可用来替代 MAINTAINER LABEL maintainer=Raindrop email=727474430@qq.com
ARG
# 环境变量,构建镜像时有效 ARG SERVICE_NAME Tomcat RUN echo $SERVICE_NAME # 可在构建时传入变量 docker build -t --build-arg SERVICE_NAME=Weblogic .
ENV
# 环境变量,容器启动后依然有效 ENV JAVA_HOME /usr/local/jdk1.8 RUN echo $JAVA_HOME
ADD
# 拷贝文件到容器中,可拷贝网络资源 ADD index.html /var/www/html ADD https://www.baidu.com/index.html /var/www/html
COPY
# 拷贝文件到容器中,只能拷贝本地资源,不拷贝网络资源时,建议使用 COPY index.html /var/www/html COPY app.jar /app
WORKDIR
# 切入工作目录,类似 cd WORKDIR /app WORKDIR /tomcat
RUN
# 构建镜像时执行的 shell RUN ["yum", "install", "httpd"] RUN yum install httpd
CMD
# 启动容器时执行的 shell CMD ["-C", "/run.sh"] CMD ["/usr/sbin/sshd", "-D"] CMD /usr/sbin/sshd -D
ENTRYPOINT
# 启动容器时执行的 shell,同 CMD 类似,只是由 ENTRYPOINT 启动的程序不会被 docker run 命令行指定的参数所覆盖,而且,这些命令行参数会被当作参数传递给 ENTRYPOINT 指定指定的程序 ENTRYPOINT ["/bin/bash", "-C", "/start.sh"] ENTRYPOINT /bin/bash -C '/start.sh'
EXPOSE
# 暴露端口 EXPOSE 80 443
USER
# RUN、CMD、ENTRYPOINT 执行 shell 命令指定用户,默认 root USER <user>[:<usergroup>] USER <UID>[:<UID>] USER weblogic:weblogic
VOLUME
# 挂载容器目录之本地 VOLUME ["/var/lib/mysql"] VOLUME /usr/lib/mysql /var/lib/mysql
ONBUILE
# 子容器 FROM 后执行,通常用于构建基础镜像时预先添加内容,在子镜像中依赖,以减轻镜像容量 FROM alpine ONBUILD ENV APP_NAME=Tomcat CMD echo $APP_NAME docker build -t test . --- # 若不指定 CMD 和 ENTRYPOINT 默认执行父镜像指令,若父镜像也没有 CMD 和 ENTRYPOINT 则报错 FROM test
HEALTHCHECK
# 健康检查 HEALTHCHECK --interval=5m --timeout=3s --retries=3 \ CMD curl -f http:/localhost/ || exit 1 # 含义 -- interval=DURATION (default: 30s):每隔多长时间探测一次,默认 30 秒 -- timeout= DURATION (default: 30s):服务响应超时时长,默认 30 秒 -- start-period= DURATION (default: 0s):服务启动多久后开始探测,默认 0 秒 -- retries=N (default: 3):认为检测失败几次为宕机,默认 3 次 # 一些返回值的说明: 0:容器成功是健康的,随时可以使用 1:不健康的容器无法正常工作 2:保留不使用此退出代码
Dockerfile 示例
构建 centos 镜像
# 基础镜像 FROM centos # 维护人信息 MAINTAINER Raindrop <727474430@qq.com> # 构建时运行命令 RUN yum -y update && yum -y install httpd # 暴露 80 端口 EXPOSE 80 # 复制 index.html 到指定地址 COPY index.html /var/www/html/index.html # 切换工作目录 WORKDIR /var/www/html/index.html # 设置环境变量 ENV SHELL_NAME="run.sh" # 复制该脚本至镜像中,并修改其权限 ADD $SHELL_NAME /run.sh RUN chmod 775 /run.sh # 容器启动时执行脚本文件 CMD ["/run.sh"]
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!