Notes
  • 简介
  • Linux
    • Ubuntu
      • Ubuntu 20.04 ARM64 修改PAGE_SIZE 64k
    • Samba
      • CentOS7安装Samba
      • 简单案例
      • 审计
      • 相关命令
    • Systemd
    • FPM 打包 nginx rpm 包
    • rpm 打包-从二进制文件进行打包
    • Centos7 重置密码
    • CentOS7搭建kvm并创建虚拟机
    • CentOS7-KVM 嵌套虚拟化
    • CentOS7 KVM GPU 穿透
    • Bonding
    • CentOS7 发送邮件
    • CentOS7 安装 OpenVPN
    • Linux 多线路由策略
    • Webmin 安装
    • NoVNC 安装
    • SRS-RTMP 服务部署
    • CentOS7 安装 MongoDB
    • confluence 安装
    • jira 安装
    • crowd 安装
    • ScriptRunner For Jira
    • ScriptRunner For Confluence
    • Ubuntu VNC
    • Ubuntu18.04-VNC 安装
    • deb 打包
    • iptables
    • debian 保持软件包一致
    • Ubuntu18.04 编译安装 grpc
    • CentOS7 安装 odoo13
    • Pacemaker 入门
    • Firewalld Rich Language
    • PHP Xdebug
    • CentOS7.3 编译安装 Python3.6
    • 葫芦儿打包
    • CentOS7 安装 Tomcat8
    • CentOS7 安装 JDK
    • GuacamoleServer 编译安装
    • FreeBSD7.0安装AMP
    • CentOS7 换源
    • deb下载并离线安装
    • pip下载并离线安装
  • Network
    • 案例一
  • AI
    • 微调Qwen2.5
    • Qwen2.5 VL AWQ量化
    • qwen2.5 填充权重
  • JavaScript
  • Zabbix
    • CentOS7 安装 Zabbix4.0 LTS
    • Zabbix 加密连接
    • Zabbix 主动和被动模式
    • Zabbix 配置邮件报警
    • Zabbix 监控 MySQL
  • 数据库
    • MySQL
      • CentOS7 Install MySQL5.7
      • MySql 主从配置
      • CentOS7 安装 Percona XtraDB Cluster
      • MySql 压力测试-sysbench
      • MariaDB Galera Cluster
      • 备份脚本
    • MongoDB
      • 启用账号密码登录
      • 备份脚本
  • Nginx
    • CentOS7 安装 Nginx
    • Nginx 配置
    • nginx-http-flv-module
    • Nginx-WebDAV
  • Docker
    • CentOS7 安装 Docker
    • Dockerfile
    • DockerSwarm 集群
    • Docker 安装 guacamole
  • Python
    • 虚拟环境
  • Windows
    • Windows 问题集合
    • 迅雷自动安装 Chrome 插件
    • RDP 注册表
    • Rdp File Setting
    • 本地组策略对象(LGPO)工具
    • 禁用应用联网
    • SQL Server 问题处理
    • SQL Server Trigger
    • NSIS 脚本
    • 使用QEMU运行ARM64 CentOS7
    • DOS 脚本
    • Windows 11 设置旧版右键菜单
    • 远程桌面二次验证
  • Apple
    • AppStore 应用开发及上架
    • Apple 打包 Golang WebDav 制作 pkg 安装包
  • Android
    • Android Studio创建具有root权限的虚拟机
    • Android读写挂载system
    • Android安卓CA至系统
  • 证书
    • 证书名称(主题)
    • 证书扩展
    • SSL 自签
    • 免费 https 证书申请
  • 树莓派
    • 树莓派系统烧录及系统打包制作
    • 树莓派基础操作
    • 树莓派安装 NextCloud
    • 树莓派安装 LNMP
    • 树莓派自定义开机界面和登录提示
    • 树莓派安装 HomeAssistant
    • HomeAssistant 配置
    • 树莓派自动挂载 U 盘
    • 树莓派安装 vsftpd
    • vsftpd 配置文件详解
  • ceph
    • ceph-deploy 部署 ceph nautilus 版本
    • ceph dashboard
  • OpenStack
    • OpenStack VM 配置 Virtual IP
    • OpenStack Glance 对接 Ceph RBD 存储
    • OpenStack Cinder Volumes 对接 Ceph RBD 存储
    • OpenStack 集群搭建
    • OpenStack Rocky 单节点部署
    • OpenStack Rocky 集群部署
    • OpenStack CentOS6 镜像制作
    • OpenStack-Ubuntu 镜像制作
    • Openstack-Windows 镜像制作
    • OpenStack-RBD 导入镜像
    • OpenStack-Rocky 灾备
    • rbd-mirror
  • FFmpeg
    • CentOS7 静态编译FFmpeg
    • MacOS10.12静态编译FFmpeg
    • CentOS7 Arm64静态编译FFmpeg
    • 使用NVIDIA显卡
    • 脚本
  • Other
    • 华为一碰传标签制作
    • 常用软件
    • wireguard
由 GitBook 提供支持
在本页
  • FROM
  • RUN
  • CMD
  • ENTRYPOINT
  • LABEL
  • EXPOSE
  • ENV
  • WORKDIR
  • ADD
  • COPY
  • VOLUME
  • USER
  • ARG
  • ONBUILD
  • STOPSIGNAL
  • HEALTHCHECK
  • SHELL
  1. Docker

Dockerfile

FROM

FROM [--platform=<platform>] <image>[:<tag>] [AS <name>]
# platform 指定镜像的系统架构,如linux/amd64、linux/arm64、windows/amd64,默认与构建镜像的平台一致

FROM 指令设置基础镜像,镜像在基础镜像上进行构建

# 在centos7.6.1810镜像基础上构建新镜像
FROM centos:7.6.1810

RUN

RUN <command>
RUN ["executable", "param1", "param2"]

RUN 命令执行命令并创建新的镜像层,通常用于安装软件包

# 打印hello
RUN echo hello
RUN ["/bin/bash", "-c", "echo hello"]
# 安装httpd并清除缓存
RUN set -eux; \
    yum -y update ; \
    yum install -y httpd ; \
    yum clean all

CMD

CMD ["executable","param1","param2"]
CMD ["param1","param2"] (作为ENTRYPOINT的默认参数)
CMD command param1 param2

CMD 命令设置容器启动后默认执行的命令及其参数,但 CMD 设置的命令能够被docker run命令后面的命令行参数替换

每个 Dockerfile 中只能有一个 CMD,当指定多个时,只有最后一个起效

注意:

Docker 容器启动时,默认会把容器内部第一个进程,也就是pid=1的程序,作为 docker 容器是否正在运行的依据,如果 docker 容器 pid=1 的进程挂了,那么 docker 容器便会直接退出。

# 启动nginx
CMD ["nginx", "-g", "daemon off;"]

ENTRYPOINT

ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2

ENTRYPOINT 配置容器启动时的执行命令(不会被忽略,一定会被执行,即使运行 docker run时指定了其他命令)

每个 Dockerfile 中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个起效

# redis 镜像的内容
COPY docker-entrypoint.sh /usr/local/bin/
ENTRYPOINT ["docker-entrypoint.sh"]

EXPOSE 6379
CMD ["redis-server"]

LABEL

LABEL <key>=<value> <key>=<value> <key>=<value> ...

LABEL 指令为镜像添加元数据

# 添加作者信息
LABEL maintainer="NGINX Docker Maintainers <docker-maint@nginx.com>"

EXPOSE

EXPOSE <port> [<port>/<protocol>...]
# 默认tcp协议

EXPOSE 指令暴露容器的端口

# nginx 暴露80端口
EXPOSE 80

ENV

ENV <key> <value>
ENV <key>=<value> ...

ENV 指令设置镜像构建过程中的环境变量

ENV MYDIR /mydir
RUN mkdir $MYDIR

WORKDIR

WORKDIR path

WORKDIR 指令设置工作目录

WORKDIR /workpath

ADD

ADD [--chown=<user>:<group>] <src>... <dest>
ADD [--chown=<user>:<group>] ["<src>",... "<dest>"]

ADD 指令拷贝本地资源或 url 资源到镜像,复制目录时,目录本身不会被复制,只是其内容被复制。本地资源为压缩包时,会解压文件,url 资源不会

ADD test /test

COPY

COPY [--chown=<user>:<group>] <src>... <dest>
COPY [--chown=<user>:<group>] ["<src>",... "<dest>"]

COPY 指令拷贝本地资源到镜像,复制目录时,目录本身不会被复制,只是其内容被复制。

COPY test /test

VOLUME

VOLUME path
VOLUME ["/path"]

VOLUME 指令将宿主机本地目录挂载到镜像的指定目录,默认是本地/var/lib/docker/volumes/***

# mysql
VOLUME [/var/lib/mysql]

USER

USER <user>[:<group>]
USER <UID>[:<GID>]

USER 指令指定后续命令使用此用户进行,如 RUN、CMD 等。镜像构建完成后,通过 docker run 运行容器时,可以通过-u 参数来覆盖所指定的用户

USER www

ARG

ARG <name>[=<default value>]

ARG 指令定义一个变量,用户可以在docker build时,添加--build-arg <varname>=<value> 参数将变量传递给构建器

使用ENV指令定义的环境变量 始终会覆盖ARG指令的同名变量

FROM busybox
ARG SETTINGS
RUN ./run/setup $SETTINGS

ONBUILD

ONBUILD [INSTRUCTION]

ONBUILD 是一个特殊的指令,它后面跟的是其它指令,比如 RUN, COPY 等,而这些指令,在当前镜像构建时并不会被执行。只有当以当前镜像为基础镜像,去构建下一级镜像的时候才会被执行

FROM node:slim
RUN mkdir /app
WORKDIR /app
ONBUILD COPY ./package.json /app
ONBUILD RUN [ "npm", "install" ]
ONBUILD COPY . /app/
CMD [ "npm", "start" ]

STOPSIGNAL

STOPSIGNAL signal

HEALTHCHECK

HEALTHCHECK [OPTIONS] CMD command
HEALTHCHECK NONE

SHELL

SHELL ["executable", "parameters"]
上一页CentOS7 安装 Docker下一页DockerSwarm 集群

最后更新于3年前