首页 > 其他分享 >Docker Compose 模板文件详解与实践示例

Docker Compose 模板文件详解与实践示例

时间:2025-01-10 09:31:53浏览次数:3  
标签:容器 Compose version 示例 image compose Docker docker

Docker Compose 是一种用于定义和运行多容器 Docker 应用程序的工具。其核心是 docker-compose.yml 模板文件,该文件以 YAML 格式编写,包含了定义服务、网络和卷等所需的指令。本文将详细介绍 Docker Compose 模板文件中的关键指令,并通过示例代码和运行结果帮助大家更好地理解其用法。

基本结构

默认的模板文件名称为 docker-compose.yml。每个服务都必须通过 image 指令指定镜像,或使用 build 指令(需要 Dockerfile)来自动构建生成镜像。

常用指令详解
  1. build

    指定 Dockerfile 所在文件夹的路径。Compose 将会利用它自动构建这个镜像,然后使用这个镜像。

    示例

    version: '3'
    services:
      webapp:
        build: .
        # 或者
        # build:
        #   context: ./dir
        #   dockerfile: Dockerfile-alternate
        #   args:
        #     buildno: 1
    

    说明

    • context:指定 Dockerfile 所在文件夹的路径。
    • dockerfile:指定 Dockerfile 文件名。
    • args:指定构建镜像时的变量。

    运行结果

    docker-compose up
    

    将会在当前目录下查找 Dockerfile 并构建镜像,然后启动容器。

  2. cap_add, cap_drop

    指定容器的内核能力分配。

    示例

    version: '3'
    services:
      webapp:
        image: nginx
        cap_add: ["NET_ADMIN"]
        cap_drop: ["SYS_PTRACE"]
    

    说明

    • cap_add:添加内核能力。
    • cap_drop:移除内核能力。
  3. command

    覆盖容器启动后默认执行的命令。

    示例

    version: '3'
    services:
      webapp:
        image: nginx
        command: ["nginx", "-g", "daemon off;"]
    

    运行结果

    docker-compose up
    

    将会启动 Nginx 容器,并执行指定的命令。

  4. container_name

    指定容器名称。

    示例

    version: '3'
    services:
      webapp:
        image: nginx
        container_name: my_nginx
    

    说明

    • 指定容器名称后,该服务将无法进行扩展(scale),因为 Docker 不允许多个容器具有相同的名称。
  5. depends_on

    解决容器的依赖、启动先后的问题。

    示例

    version: '3'
    services:
      db:
        image: redis
      web:
        image: nginx
        depends_on:
          - db
    

    说明

    • web 服务不会等待 db 服务「完全启动」之后才启动。

    运行结果

    docker-compose up
    

    将会先启动 db 容器,再启动 web 容器。

  6. env_file

    从文件中获取环境变量。

    示例

    .env 文件

    MYSQL_ROOT_PASSWORD=example
    

    docker-compose.yml 文件

    version: '3'
    services:
      db:
        image: mysql
        env_file:
          - .env
    

    运行结果

    docker-compose up
    

    将会使用 .env 文件中的环境变量启动 MySQL 容器。

  7. environment

    设置环境变量。

    示例

    version: '3'
    services:
      webapp:
        image: nginx
        environment:
          - NGINX_HOST=example.com
          - NGINX_PORT=80
    
  8. expose

    暴露端口,但不映射到宿主机,只被连接的服务访问。

    示例

    version: '3'
    services:
      webapp:
        image: nginx
        expose:
          - "8080"
    
  9. ports

    暴露端口信息。

    示例

    version: '3'
    services:
      webapp:
        image: nginx
        ports:
          - "80:80"
          - "443:443"
    

    说明

    • 使用宿主端口:容器端口 (HOST:CONTAINER) 格式。
    • 注意数字格式问题,建议采用引号包括起来的字符串格式。

    运行结果

    docker-compose up
    

    将会把容器的 80 和 443 端口映射到宿主机的相同端口。

  10. volumes

    数据卷所挂载路径设置。

    示例

    version: '3'
    services:
      webapp:
        image: nginx
        volumes:
          - ./data:/var/www/html
    

    说明

    • 设置宿主机路径(HOST:CONTAINER)或加上访问模式(HOST:CONTAINER:ro)。

    运行结果

    docker-compose up
    

    将会把宿主机的 ./data 目录挂载到容器的 /var/www/html 目录。

其它常用指令
  • domainname, entrypoint, hostname, ipc, mac_address, privileged, read_only, shm_size, restart, stdin_open, tty, user, working_dir 等指令,基本跟 docker run 中对应参数的功能一致。

    示例

    version: '3'
    services:
      webapp:
        image: nginx
        restart: always
        read_only: true
        stdin_open: true
        tty: true
        working_dir: /var/www/html
    

    说明

    • restart: always:指定容器退出后的重启策略为始终重启。
    • read_only: true:以只读模式挂载容器的 root 文件系统。
    • stdin_open: true:打开标准输入,可以接受外部输入。
    • tty: true:模拟一个伪终端。
动态读取变量

Compose 模板文件支持动态读取主机的系统环境变量和当前目录下的 .env 文件中的变量。

示例

docker-compose.yml 文件

version: '3'
services:
  db:
    image: "mongo:${MONGO_VERSION}"

运行

MONGO_VERSION=3.6 docker-compose up

将会启动一个 mongo:3.6 镜像的容器。

若当前目录存在 .env 文件,执行 docker-compose 命令时将从该文件中读取变量。

.env 文件

# 支持 # 号注释
MONGO_VERSION=3.6

运行

docker-compose up

将会启动一个 mongo:3.6 镜像的容器。

总结

本文详细介绍了 Docker Compose 模板文件中的关键指令,并通过示例代码和运行结果展示了其用法。希望本文能帮助大家更好地理解和使用 Docker Compose,从而更高效地管理和部署多容器 Docker 应用程序。

标签:容器,Compose,version,示例,image,compose,Docker,docker
From: https://blog.csdn.net/m0_37643701/article/details/144957553

相关文章

  • 【Mac实践Docker】使用Nginx部署Web应用
    Nginx部署Web应用学习资料参考一、安装Docker下载DockerDesktop:启动Docker:验证安装:macOS命令行工具Docker命令二、使用Nginx部署Web应用拉取Nginx镜像创建挂载目录创建容器并挂载目录创建并启动容器:复制配置文件到宿主机:删除容器并重新启动:重新启动容器并挂载目录:......
  • 使用Docker部署的基于binlog实现Mysql8
    概念MySQL基于Binlog的主从复制(Master-SlaveReplication)是MySQL数据库中实现数据复制的一种机制。在这种复制模式下,主库(Master)记录所有对数据库的修改操作(如INSERT、UPDATE、DELETE等)到二进制日志(Binlog),从库(Slave)则读取这些日志并执行相同的操作,从而保持与主库的数据一......
  • docker使用远程节点构建多平台镜像
    当在x86或arm平台使用buildx构建多平台镜像时,会发现buildx在构建与docker所在宿主机异构平台镜像包时,构建速度慢的问题。当你同时有x86和arm服务器的基础上,可以使用远程节点来构建多平台镜像包,使用远程节点构建多平台镜像的好处如下:1.无兼容性问题:在x86平台构建arm或在arm平台构......
  • centos7安装docker
    1.下载所需yum软件包yuminstall-yyum-utilsdevice-mapper-persistent-datalvm2--skip-broken2.设置docker镜像源yum-config-manager--add-repohttps://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.reposed-i's/download.docker.com/mirrors.aliyun.co......
  • 使用docker部署的禅道怎么升级
    参考https://www.zentao.net/book/zentaopms/586.html备份数据本次升级使用的是pvc挂载的禅道数据,使用docker启动的也是一样的数据是挂载在nfs动态存储盘,进入到pvc目录备份一份即可为以防万一MySQL数据也是有mysqldump备份一份使用新镜像启动修改启动镜像,把镜像从原来的镜......
  • 示例代码对API接口的作用
    引言在现代软件开发中,API(应用程序编程接口)扮演着至关重要的角色。API允许不同的软件系统之间进行通信和数据交换,从而实现功能的扩展和应用的集成。示例代码作为API文档的重要组成部分,对开发者理解和使用API接口具有显著的作用。本文将详细探讨示例代码在API接口中的作用,并通过实......
  • docker快速搭建部署mqtt
    1、拉取的是最新版本#拉取的是最新版本dockerpullemqx/emqx:latest#当然可以指定版本dockerpullemqx/emqx:latest:v5.02、创建临时容器dockerrun-d--namemqtt--privileged=true-p1883:1883-p8883:8883-p8083:8083-p8084:8084-p8081:8081-p18083......
  • SpringCloud 解决 Docker 镜像 虚拟机网卡导致的IP 不准确的问题
    SpringCloud应用可能会使用InetAddress.getLocalHost().getHostAddress()或类似方法来获取当前机器的IP地址。但在Docker容器环境中,这种方法可能会返回容器内部的IP地址,而不是宿主机的IP地址。分布式应用部署到服务上,由于服务器可能存在多张网卡,造成IP地址不准。出......
  • langfuse v3(docker compose安装)安装部署
    环境:OS:Centos7langfuse:v31.下载dockercompose配置文件https://github.com/langfuse/langfuse/blob/v3.5.3/docker-compose.yml[root@host135home]#mkdir-p/home/middle/langfuse/langfuse上传配置文件到该目录[root@host135langfuse]#lsdocker-compose.yml[root@host......
  • docker安装jellyfine实现家庭影院
    安装环境为Ubuntuserver20.04。管理员账户登陆系统。新建应用安装目录,用于缓存应用使用过程中生成的中间数据,如配置、预览等,最好建到速度较快的SSD硬盘上,可提高体验。mkdir/mnt/ssd/jellyfin-app/configmkdir/mnt/ssd/jellyfin-app/cache拉取镜像并安装。dockerpu......