Akiraka Akiraka
  • Home
  • Linux
    • ELK
    • PHP
    • Shell
    • Nginx
    • Docker
      • Docker Compose
    • Centos
    • Ubuntu
    • Jenkins
  • Python
  • Mac OS
  • Windows
  • Big Data
    • Hadoop
    • CDH
    • Hive
    • Spark
    • ZooKeeper
  • K8S
    • Kubernetes
    • Helm
  • Other
  • Quark
  • Contribute
  • Home
  • Linux
    • ELK
    • PHP
    • Shell
    • Nginx
    • Docker
      • Docker Compose
    • Centos
    • Ubuntu
    • Jenkins
  • Python
  • Mac OS
  • Windows
  • Big Data
    • Hadoop
    • CDH
    • Hive
    • Spark
    • ZooKeeper
  • K8S
    • Kubernetes
    • Helm
  • Other
  • Quark
  • Contribute
首页 Linux Docker Dockerfile 使用说明

Dockerfile 使用说明

Akiraka 1年前

文章目录

  • 一、Dockerfile 常用命令
  • 二、命令示例
    • 2.1、FROM
    • 2.2、MAINTAINER
    • 2.3、LABEL
    • 2.4、ARG
    • 2.5、ENV
    • 2.6、ADD
    • 2.7、COPY
    • 2.8、WORKDIR
    • 2.9、RUN
    • 2.10、CMD
    • 2.11、ENTRYPOINT
    • 2.12、EXPOSE
    • 2.13、USER
    • 2.13、VOLUME
    • 2.15、ONBUILE
    • 2.16、HEALTHCHECK
  • 三、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
#docker#dockerfile
1
猜你喜欢
  • Dockerfile 构建 FreeRadis 镜像
  • KeyCloak Docker Compose 部署
  • 密码保护:KeyCloak 结合 Gitlab SSO 一键登录认证
  • 生成 GitLab EE 许可证
  • GitLab 10.4.0 迁移到 Docker 版本 GitLab 14.4.1
评论 (0)
请登录以参与评论。
立即登录
    暂无评论
Akiraka
站长
本人擅长 Ai、Au、Fl、Ae、Pr、Ps 等软件的安装与卸载,精通 CSS、JavaScript、PHP、Python、Shell、Go 等单词的拼写,熟悉 Windows、Linux、Mac、Android、IOS 等系统的开关机!
160
文章
24
评论
73
获赞
Popular Articles
TOP1
Kubernetes(k8s)Helm 部署 EFK 集群
2年前
TOP2
Kubernetes(k8s)helm 搭建 prometheus + Grafana 监控
2年前
TOP3
Container 命令ctr、crictl 命令使用说明
11月前
TOP4
Kubernetes(k8s)Helm 部署 Jenkins 持续化集成部署
2年前
TOP5
Helm 部署 Loki 日志聚合
2年前
Related Articles
Grafana 容器编排
2年前
KeyCloak Docker Compose 部署
3月前
Nginx 容器编排
2年前
RocketMQ 集群容器编排单机主从
2年前
Jenkins 容器编排
2年前
Copyright © 2019-2022 Akiraka. 沪18036911号