首页 > 其他分享 >docker compose

docker compose

时间:2024-04-17 18:23:45浏览次数:24  
标签:容器 Compose yml compose docker Docker

目录


Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。它允许您使用 YAML 文件(通常命名为 docker-compose.yml)来配置应用程序的服务、网络、卷以及其他依赖项。通过使用 Docker Compose,您可以方便地在单台主机上创建并管理容器集群,实现服务的编排、依赖关系管理、网络配置、数据持久化等任务。以下是对如何通过 Docker Compose 创建和管理集群的详细说明:


1. 安装 Docker Compose

确保您已经安装了 Docker。接下来,根据您的操作系统安装 Docker Compose。通常,可以通过官方文档提供的指引进行安装,例如:

  • 对于 Linux 系统,可以使用脚本安装:

    sudo curl -L "https://github.com/docker/compose/releases/download/$(curl -sL https://github.com/docker/compose/releases/latest | grep -oP 'tag/\K[^"]+')/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    sudo chmod +x /usr/local/bin/docker-compose
    
  • 对于 macOS 用户,推荐使用 Docker Desktop,其中包含了 Docker Compose。

  • 对于 Windows 用户,同样建议使用 Docker Desktop,其中集成了 Docker Compose。


2. 编写 docker-compose.yml 文件

创建一个名为 docker-compose.yml 的文件,用 YAML 格式来描述您的应用集群。以下是一个基本结构示例:

version: '3.9'  # 使用的 Compose 文件版本

services:
  service1:
    image: example/service1:latest
    ports:
      - "8080:80"
    networks:
      - my_network
    environment:
      - ENV_VAR=value

  service2:
    image: example/service2:stable
    depends_on:
      - service1
    networks:
      - my_network
    volumes:
      - data_volume:/app/data

networks:
  my_network:
    driver: bridge

volumes:
  data_volume:

在这个例子中:

  • version: 指定使用的 Docker Compose 文件版本。
  • services: 定义构成集群的各个服务。
    • image: 指定服务使用的 Docker 镜像。
    • ports: 映射容器端口到宿主机端口。
    • networks: 将服务加入指定的网络中。
    • environment: 设置环境变量。
    • depends_on: 指定服务间的依赖关系,确保依赖的服务先启动。
    • volumes: 挂载数据卷到容器内,用于持久化数据。
  • networks: 定义网络,使服务间能够互相通信。
  • volumes: 定义数据卷,独立于容器生命周期之外存储数据。

3. 启动、停止和重启集群

使用 Docker Compose 命令来管理集群的生命周期:

  • 启动集群

    docker-compose up -d
    

    -d 参数表示在后台(detached mode)运行服务。

  • 查看集群状态

    docker-compose ps
    
  • 停止集群

    docker-compose down
    

    默认情况下,这会停止并删除容器、网络和未标记为 external 的临时数据卷。如果要保留数据卷,可以添加 --volumes 参数:

    docker-compose down --volumes
    
  • 重启服务

    docker-compose restart [service_name]
    

    如果不指定服务名,将重启所有服务。


4. 配置和管理复杂集群

对于更复杂的场景,Docker Compose 提供了更多高级功能:

  • 环境变量:在 docker-compose.yml 文件中使用环境变量,或者通过 .env 文件或命令行传递外部环境变量。

  • 扩展服务:通过 docker-compose scale 命令调整特定服务的实例数量,实现水平扩展。

  • 配置文件覆盖:使用 docker-compose -f 参数指定多个 Compose 文件,进行配置合并或覆盖。

  • 构建镜像:在 docker-compose.yml 中使用 build 键而不是 image 键,可以指定 Dockerfile 位置,让 Compose 自动构建镜像。

  • 健康检查:通过 healthcheck 配置项定义服务的健康检查机制。

  • 插件支持:结合第三方插件(如 Docker Compose V2 及其生态系统),可以实现更丰富的集群管理功能,如资源限制、日志管理、监控等。


5. 示例应用集群

使用 Docker Compose 部署的具体应用集群,如 RabbitMQ、Redis Sentinel、ZooKeeper、Kafka、Nacos、MySQL、Nginx、MinIO 等。对于这些特定应用,通常需要在 docker-compose.yml 文件中配置相应的服务、网络、数据卷、环境变量等,以符合应用的特定需求。比如,可能需要设置特定的端口映射、配置文件挂载、服务间连接参数、集群模式配置等。

综上所述,Docker Compose 提供了一种便捷的方式来创建和管理单机容器集群。通过编写 docker-compose.yml 文件,您可以定义服务、网络、数据卷等组件,然后使用 Docker Compose 命令进行一键部署、启动、停止、重启等操作,极大地简化了多容器应用的部署与维护流程。对于更复杂的多主机集群管理,可以考虑使用 Docker Swarm 或 Kubernetes 等更高级的容器编排平台。


6. 进入集群中的容器

要使用docker-compose进入正在运行的容器,您可以使用以下命令:

docker-compose exec [service_name] /bin/sh

或者,如果您的容器使用的是/bin/bash,则可以使用:

docker-compose exec [service_name] /bin/bash

bash是sh的完整版,bash完全兼容sh命令,反之不行

这里的[service_name]是您在docker-compose.yml文件中定义的服务名称。例如,如果您的服务名称为manticore,那么命令将是:

docker-compose exec manticore /bin/sh

执行该命令后,您将进入指定服务的容器内部。在这里,您可以执行任何需要的命令,比如查看容器内部的文件结构、运行应用程序、检查日志等。

如果您不确定服务的名称,可以查看docker-compose.yml文件,其中会列出所有定义的服务。此外,您还可以使用docker-compose ps命令来查看所有正在运行的容器及其对应的服务名称。

请注意,使用docker-compose exec命令时,确保您的docker-compose文件中的服务配置了正确的容器镜像,并且该镜像包含/bin/sh/bin/bash。如果镜像中没有这些shell程序,您可能需要使用其他方式来进入容器,例如直接使用docker exec命令。


7. docker-compose常用命令

Docker Compose是一个用于定义和运行多容器Docker应用程序的工具。通过Docker Compose,您可以使用YAML文件来配置应用程序的服务,然后使用一个命令来创建和启动所有服务。以下是一些常用的Docker Compose命令:

  1. docker-compose up :这个命令用于启动并运行所有定义在docker-compose.yml文件中的服务。如果您希望在后台运行服务,可以添加-d参数。

  2. docker-compose down :此命令用于停止并删除由docker-compose.yml文件定义的容器、网络和卷。如果您希望在删除容器的同时删除相关数据卷,可以添加-v参数。

  3. docker-compose ps :列出由docker-compose.yml文件定义的正在运行的容器信息。

  4. docker-compose logs :查看由docker-compose.yml文件定义的容器的日志。使用-f参数可以实时跟踪日志输出。

  5. docker-compose build :仅构建docker-compose.yml文件中定义的服务的镜像。使用--no-cache参数可以避免使用缓存以确保最新的构建。

  6. docker-compose pull :从镜像仓库中拉取docker-compose.yml文件中定义的服务所需的镜像。

  7. docker-compose restart :重启由docker-compose.yml文件定义的容器。

  8. docker-compose stop :停止由docker-compose.yml文件定义的容器。

  9. docker-compose start :启动之前已经创建但停止的容器。

  10. docker-compose exec :在正在运行的容器中执行命令。例如,docker-compose exec [service_name] /bin/bash 允许您在指定服务的容器中启动一个bash会话。

  11. docker-compose scale :设置指定服务运行的容器个数,例如docker-compose scale [service_name]=3 将启动该服务的三个容器实例。

  12. docker-compose config :验证并查看docker-compose.yml文件的配置,不实际启动服务。

这些命令使得使用Docker Compose来管理多容器应用程序变得更加简单和高效。通过这些命令,您可以轻松地启动、停止、查看和管理您的Docker应用程序。

标签:容器,Compose,yml,compose,docker,Docker
From: https://www.cnblogs.com/yubo-guan/p/18141448

相关文章

  • docker基本命令及使用
    基本命令及使用#文件拷贝dockercp#将文件拷贝到容器内部dockercp文件名容器名或id:容器路径dockercptest.jarcentos:/usr/local#将容器内部文件拷贝到外部dockercp容器名或id:容器路径/文件名路径dockercpcentos:/usr/localtest2.jar#目录挂载d......
  • docker镜像的复制
    有时候pull镜像很慢或者失败,需要从其他的机器传到服务器,就可以使用docker镜像的复制转贴,思路就是先把本地镜像打包,然后用ftp工具传到目标服务器,最后服务器解包还原打包dockersave-o~/alpine.3.16.taralpine:3.16还原dockerload-ialpine.3.16.tar打tag,这条命令就是......
  • docker部署nginx
    拉取镜像dockerpullnginx创建映射目录mkdir-p/data/server/nginx/{conf,log,html}先创建一个nginx容器,然后将容器中的nginx.conf文件和conf.d文件夹复制到宿主机创建容器dockerrun-d--namenginx01-p20080:80nginx将容器中的nginx.conf文件复制到宿主机docker......
  • docker部署mysql
    docker部署mysqlmkdir-p/data/docker/mysql5.7/{data,conf.d}mkdir-p/data/docker/mysql8/{data,conf.d}version:'3'services:mysql_5.7:image:mysql:5.7.40restart:alwaysports:-13306:3306environment:-MYSQL_ROOT_PAS......
  • docker部署redis
    拉取镜像dockerpullredis:6.2.6创建映射目录和文件mkdir-p/data/server/docker_redis/data官网下载对应版本redis.conf,放在/data/server/docker_redis/目录下运行redisdockerrun-d-p6379:6379--name=redis--privileged=true-v/data/server/docker_redis/redis.c......
  • docker compose部署一个ubuntu桌面环境
    dockercompose部署一个ubuntu桌面环境version:"3"services:ubuntu-d:container_name:ubuntu-dimage:dorowu/ubuntu-desktop-lxde-vnchostname:ubuntu_dports:-50080:80-55900:5900restart:on-failure:3volumes:......
  • docker compose部署nginx-proxy-manager
    dockercompose部署nginx-proxy-managerdocker-compose.yamlversion:'3'services:npm:image:jc21/nginx-proxy-manager:latestcontainer_name:npmrestart:alwaysenvironment:-TZ=Asia/Shanghaiports:-'30080......
  • docker compose部署nextcloud
    dockercompose部署nextcloudversion:'3'services:nextcloud:image:nextcloudcontainer_name:nextcloudenvironment:-MYSQL_HOST=nextcloud-db-MYSQL_DATABASE=nextcloud-MYSQL_USER=nextcloud-MYSQL_PASSWOR......
  • docker部署jenkins.md
    拉取镜像dockerpulljenkins/jenkins创建映射目录mkdir-p/mydata/jenkins_home创建容器dockerrun-d-p28080:8080-v/mydata/jenkins_home:/var/jenkins_home-v/etc/localtime:/etc/localtime--restart=on-failure:3--namejenkins01jenkins/jenkins:latestdoc......
  • docker部署mongodb
    docker部署mongodb拉取镜像dockerpullmongo启动mongo(dockerrun和dockercompose)dockerrun--auth:需要密码才能访问容器服务。-eMONGO_INITDB_ROOT_USERNAME:设置用户名-eMONGO_INITDB_ROOT_PASSWORD:设置密码dockerrun--restart=always--namemongodb-v~/dock......