Dockerfile 使用说明
一、Dockerfile 常用命令
命令 | 备注 | 是否必填 |
---|---|---|
FROM | 基础镜像 | 必填 |
AD | 拷贝文件到容器中(文件可以为 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 如何测试容器以检查它是否仍在工作,健康检查 | 不必填 |
二、命令示例
2.1、FROM
# Dockerfile 基于 alpine 为基础镜像构建
FROM nginx:1.21.0-alpine
2.2、MAINTAINER
# 维护者信息
MAINTAINER Raindrop <aka@qq.com>
2.3、LABEL
# 标签,一般可用来替代 MAINTAINER
LABEL maintainer=Raindrop email=aka@qq.com
2.4、ARG
# 环境变量,构建镜像时有效
ARG SERVICE_NAME Aka
# 可在构建时传入变量
docker build -t --build-arg SERVICE_NAME=Aka .
2.5、ENV
# 环境变量,容器启动后依然有效
# 设置容器中文,否则中文乱码
ENV LANG C.UTF-8
# 设置时区
ENV TZ Asia/Shanghai
RUN echo $LANG $TZ
2.6、ADD
# 拷贝文件到容器中,可拷贝网络资源,Add拥有解压功能
ADD index.html /var/www/html
ADD https://www.baidu.com/index.html /var/www/html
2.7、COPY
# 拷贝文件到容器中,只能拷贝本地资源,不拷贝网络资源时,建议使用
COPY index.html /var/www/html
2.8、WORKDIR
# 切入工作目录,类似 cd,容器交互进去默认目录
WORKDIR /etc/nginx
2.9、RUN
# 构建镜像时执行的 shell
RUN apk update
2.10、CMD
# 启动 nginx 服务
CMD "/root/aka_nginx.sh"
2.11、ENTRYPOINT
# 启动容器时执行的 shell,同 CMD 类似,只是由 ENTRYPOINT 启动的程序不会被 docker run 命令行指定的参数所覆盖,而且,这些命令行参数会被当作参数传递给 ENTRYPOINT 指定指定的程序
ENTRYPOINT ["/bin/bash", "-C", "/start.sh"]
ENTRYPOINT /bin/bash -C '/start.sh'
2.12、EXPOSE
# 暴露端口
EXPOSE 80 443
2.13、USER
# RUN、CMD、ENTRYPOINT 执行 shell 命令指定用户,默认 root
USER <user>[:<usergroup>]
USER <UID>[:<UID>]
USER weblogic:weblogic
2.13、VOLUME
# 挂载容器目录之本地
VOLUME ["/var/lib/mysql"]
VOLUME /usr/lib/mysql /var/lib/mysql
2.15、ONBUILE
# 子容器 FROM 后执行,通常用于构建基础镜像时预先添加内容,在子镜像中依赖,以减轻镜像容量
FROM alpine
ONBUILD ENV APP_NAME=Tomcat
CMD echo $APP_NAME
docker build -t test .
---
# 若不指定 CMD 和 ENTRYPOINT 默认执行父镜像指令,若父镜像也没有 CMD 和 ENTRYPOINT 则报错
FROM test
2.16、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 示例
# 基础镜像
FROM nginx:1.21.0-alpine
# 维护人信息
MAINTAINER Akiraka <aka@qq.com>
# 设置容器中文,否则中文乱码
ENV LANG C.UTF-8
# 设置时区
ENV TZ Asia/Shanghai
# 构建时运行命令
RUN sed -i s@/dl-cdn.alpinelinux.org/@/mirrors.aliyun.com/@g /etc/apk/repositories \
&& ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo '$TZ' > /etc/timezone \
# 更新系统\安装依赖包
&& apk update \
&& apk add fontconfig tzdata logrotate rsyslog curl bash vim grep ttf-dejavu busybox-extras \
&& rm -rf /tmp/* /var/cache/apk/*
# 暴露 80 端口
EXPOSE 80
# 切换工作目录
WORKDIR /etc/nginx
版权声明:
作者:Akiraka
链接:https://www.akiraka.net/linux/docker/1088.html
来源:Akiraka
文章版权归作者所有,未经允许请勿转载。
THE END
0
二维码
海报
Dockerfile 使用说明
一、Dockerfile 常用命令
命令
备注
是否必填
FROM
基础镜像
必填
AD
拷贝文件到容器中(文件可以为 URL 链接)
不必填
COPY
拷贝文件到容器中(文……
文章目录
关闭
共有 0 条评论