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
分享
二维码
海报
Dockerfile 使用说明
一、Dockerfile 常用命令 命令 备注 是否必填 FROM 基础镜像 必填 AD 拷贝文件到容器中(文件可以为 URL 链接) 不必填 COPY 拷贝文件到容器中(文……
<<上一篇
下一篇>>
文章目录
关闭
目 录