linux-Dockerfile及docker-compose.yml相关字段用途

文章目录

计算机系统

5G云计算

LINUX Dockerfile及docker-conpose.yml相关字段用途

一、Dockerfile
1、基础指令
指令 用途 示例 注意事项
FROM 指定基础镜像 FROM ubuntu:20.04 必须是第一条指令(ARG除外)
RUN 执行命令并创建新的镜像层 RUN apt-get update 合并多个操作用&&减少层数
CMD 指定容器启动时的默认命令 CMD "nginx", "-g", "daemon off;" 只能有一个 CMD,会被 docker run 的参数覆盖
ENTRYPOINT 指定容器启动时的入口命令 ENTRYPOINT "python", "app.py" 与 CMD 配合使用(CMD 作为参数)
COPY 复制文件/目录到镜像中 COPY ./src /app/src 目标路径需绝对路径,或相对于 WORKDIR
ADD 类似 COPY,但支持 URL 和解压压缩包 ADD url路径 /data 优先使用 COPY,避免意外解压
WORKDIR 设置工作目录 WORKDIR /app 后续指令默认在此目录下执行
ENV 设置环境变量 ENV NODE_ENV=production 变量可在容器运行时使用
ARG 定义构建时的参数 ARG VERSION=1.0 仅在构建阶段有效,容器运行时不可见
EXPORTS 声明容器监听的端口 EXPOSE 80/tcp 仅文档作用,实际端口映射由 docker run -p 控制
2、.高级指令
指令 用途 示例 注意事项
VOLUME 定义匿名数据卷 VOLUME "/data" 数据卷在容器运行时自动创建
USER 指定运行后续命令的用户 USER appuser 需确保用户已存在(先通过 RUN useradd 创建)
LABEL 添加元数据 LABEL maintainer="example" 替代已弃用的 MAINTAINER 指令
ONBUILD 定义触发器指令(在子镜像构建时触发) ONBUILD COPY . /app 常用于基础镜像的继承场景
STOPSIGNAL 设置容器停止时的信号 STOPSIGNAL SIGTERM 默认是 SIGTERM
HEALTHCHECK 定义容器健康检查 HEALTHCHECK --interval=30s CMD curl -f http://localhost 检查状态可通过 docker inspect 查看
SHELL 指定默认 shell SHELL "/bin/bash", "-c" 影响后续 RUN、CMD、ENTRYPOINT 的解析方式
3、多阶段构建指令
指令 用途 示例 注意事项
FROM ... AS <stage> 定义多阶段构建的命名阶段 FROM ubuntu:20.04 AS builder 分阶段构建减少最终镜像体积
COPY --from=<stage> 从其他阶段复制文件 COPY --from=builder /app/bin /usr/local/bin 仅复制所需文件到最终镜像
二、Docker-Compose.yml
1、服务定义(services)
字段 用途 示例 说明
image 指定服务使用的镜像 image: redis:7.0 优先从仓库拉取镜像
build 基于 Dockerfile 构建镜像 build: ./app 或指定上下文和 Dockerfile: build: context: ./app dockerfile: Dockerfile.prod 与 image 二选一,构建后镜像名为 项目名_服务名
ports 端口映射(宿主机:容器) ports: - "8080:80" 支持范围映射:"3000-3005:3000-3005"
volumes 挂载数据卷或宿主机目录 volumes: - ./data:/app/data - db-data:/var/lib/mysql 匿名卷用容器内路径,命名卷需在顶层 volumes 定义
environment 设置环境变量 environment: - DB_HOST=db - DEBUG=1 或使用键值对格式: environment: { DB_HOST: db }
env_file 从文件加载环境变量 env_file: .env 或指定多个文件 env_file: .env, .env.secret 文件中的变量会覆盖 environment 字段
network 指定服务连接的网络 networks: - frontend - backend 需在顶层 networks 定义网络
depend_on 定义服务启动顺序依赖 depends_on: - db - redis 不保证服务完全就绪,仅控制启动顺序
command 覆盖容器默认启动命令 command: "python", "app.py", "--debug" 覆盖 Dockerfile 中的 CMD 或 ENTRYPOINT
restart 容器重启策略 restart: always 可选值: no、always、on-failure、unless-stopped 生产环境建议 unless-stopped
2、高级服务配置
字段 用途 示例 说明
healthcheck 定义容器健康检查 yaml healthcheck: test: "CMD", "curl", "-f", "http://localhost" interval: 30s timeout: 10s retries: 3 影响 depends_on 的 condition行为
deploy 指定 Swarm 模式下的部署配置(普通 Compose 中部分字段可用) yaml deploy: replicas: 3 resources: limits: cpus: "0.5" memory: 512M 需使用 docker stack deploy 命令
label 为服务添加元数据 labels: - "com.example.description=Web Server" 用于监控、日志等系统识别
logging 自定义日志配置 yaml logging: driver: json-file options: max-size: "10m" max-file: "3" 控制日志文件大小和数量
config/secrets 挂载配置文件或密钥(Swarm 模式专用) yaml configs: - source: app_config target: /app/config.yaml 需在顶层定义 configs 或 secrets
3、网络配置 (networks)
字段 用途 示例 说明
driver 指定网络驱动类型 driver: bridge 或 overlay(Swarm 模式) 默认 bridge,生产环境可选 overlay
external 使用已存在的网络 external: true 需先通过 docker network create 创建
ipam 自定义 IP 地址管理 yaml ipam: config: - subnet: 172.28.0.0/16 用于精细控制子网和 IP 分配
4、卷配置 (volumes)
字段 用途 示例 说明
driver 指定卷驱动 driver: local 支持第三方驱动(如 nfs、aws)
driver_opts 驱动参数 yaml driver_opts: type: "nfs" o: "addr=10.0.0.1,nolock,soft" 根据驱动类型配置参数
external 使用已存在的卷 external: true 需先通过 docker volume create 创建
5、扩展配置
字段 用途 示例 说明
extends 继承其他 Compose 文件的服务配置 yaml services: web: extends: file: common-services.yml service: base-web 用于共享通用配置
rvices.yml service: base-web 用于共享通用配置
profiles 定义服务启用的配置集 profiles: "debug" 通过 --profile 参数激活: docker-compose --profile debug up
相关推荐
Patrick_Wilson7 小时前
从「改个端口」到 502:Next.js on k8s 的容器端口、Service 映射与 env 覆盖
docker·kubernetes·next.js
Suroy16 小时前
DockerView-Go:用 Go 写一个终端 Docker 监控工具,顺便做了个 Web 仪表盘
docker
云恒要逆袭17 小时前
运行你的第一个Docker容器
后端·docker·容器
Web3探索者1 天前
可视化服务器管理和传统命令行区别是什么?新手教程:Linux 运维到底该用图形界面还是 SSH 命令行?
linux·ssh
zylyehuo2 天前
Linux系统中网线与USB网络共享冲突
linux
荣--2 天前
一键部署不是为了省时间 —— 它是把"买来的 PaaS"变成"自己的平台"的拐点
运维·zabbix·工程化·一键部署·平台化·边界设计
江华森2 天前
动手实战学 Docker — 从零到集群编排完全指南
运维
宋均浩2 天前
# Docker 镜像瘦身实战:从 1.2G 到 80MB 的五个优化步骤
ci/cd·docker
Avan_菜菜2 天前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
程序员老赵2 天前
10 分钟部署 OpenCode:Docker 一键安装,浏览器打开就能用 AI 写代码(附完整命令与排错)
docker·容器·ai编程