当前位置: 首页 > news >正文

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

文章目录

  • 计算机系统
    • 5G云计算
      • LINUX Dockerfile及docker-conpose.yml相关字段用途
        • 一、Dockerfile
          • 1、基础指令
          • 2、.高级指令
          • 3、多阶段构建指令
        • 二、Docker-Compose.yml
          • 1、服务定义(services)
          • 2、高级服务配置
          • 3、网络配置 (networks)
          • 4、卷配置 (volumes)
          • 5、扩展配置

计算机系统

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指定默认 shellSHELL [“/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
http://www.lryc.cn/news/544759.html

相关文章:

  • deepseek部署:ELK + Filebeat + Zookeeper + Kafka
  • 微软Office 2016-2024 x86直装版 v16.0.18324 32位
  • CMake宏定义管理:如何优雅处理第三方库的宏冲突
  • 【SpringCloud】Gateway
  • Maven入门教程
  • 大数据与金融科技:革新金融行业的动力引擎
  • Autosar RTE配置-Port Update配置及使用-基于ETAS工具
  • 【AVRCP】深入理解蓝牙音频 / 视频远程控制规范:从基础到应用
  • AWS SQS跨账户访问失败排查指南
  • 算法训练(leetcode)二刷第三十八天 | 1143. 最长公共子序列、1035. 不相交的线、53. 最大子数组和、392. 判断子序列
  • 【JavaWeb学习Day20】
  • 2024年12月中国电子学会青少年软件编程(Python)等级考试试卷(二级)真题 + 答案
  • 一、对iic类模块分析与使用
  • ROS 2机器人开发--CMakeLists.txt 文件详解
  • kan与小波,和不知所云的画图
  • 使用DeepSeek实现自动化编程:类的自动生成
  • 算法题:快速排序
  • Python的那些事第三十六篇:基于 Vega 和 Vega-Lite 的数据可视化解决方案,Altair 声明式可视化库
  • aws(学习笔记第三十课) 练习使用transit gateway
  • Phpstudy中的MySQL无法正常启动或启动后自动暂停,以及sqlilab环境搭建出现的问题解决方法
  • 【Android】安卓付款密码输入框、支付密码输入框
  • Python异常处理:从入门到精通的实用指南
  • 【AVL树】—— 我与C++的不解之缘(二十三)
  • 用大白话解释日志处理Log4j 是什么 有什么用 怎么用
  • 无人机遥控器的亮度 和 两个工作频率
  • 【Linux】命令行参数 | 环境变量(四)
  • 算法002——复写零
  • 例子 DQN + CartPole: 深入思考一下,强化学习确实是一场智能冒险之旅!
  • java 实现xxl-job定时任务自动注册到调度中心
  • esp32串口通信