Docker 容器中的 Docker Compose 简介

Docker Compose是什么

Docker Compose是一个用于定义和运行多个Docker容器的工具。它是Docker官方提供的开源项目,用于实现对Docker容器集群的快速编排。通过Compose,开发者可以使用YAML文件(通常是docker-compose.yml文件)来配置应用程序需要的所有服务,然后使用一个命令就可以从YAML文件配置中创建并启动所有服务。这使得管理多个容器变得更加简单和高效。

Docker Compose的作用

  • 定义多容器应用程序:通过docker-compose.yml文件,开发者可以定义一组相关联的容器,这些容器共同构成一个应用程序。这些容器可以包括Web服务器、数据库、缓存服务器等,它们之间可以通过网络相互通信。
  • 简化容器管理:使用Docker Compose,开发者可以轻松地启动、停止、重启整个应用程序的所有容器,而无需逐个手动操作。这大大提高了容器管理的效率。
  • 促进团队协作:docker-compose.yml文件是文本格式的,易于共享和版本控制。这促进了开发人员、运维人员和其他利益相关者之间的协作,使得应用程序的部署和维护更加顺畅。
  • 环境一致性:通过在docker-compose.yml文件中定义所有服务及其配置,可以确保在不同环境中(如开发、测试、生产环境)应用程序的一致性和可移植性。
  • 支持复杂应用程序的部署:Docker Compose支持定义服务之间的依赖关系、网络配置、卷配置等,这使得部署复杂的应用程序变得更加容易。
  • 提供高级功能 :除了基本的容器管理功能外,Docker Compose还提供了一些高级功能,如服务扩容(通过docker-compose up --scale命令)、日志查看(通过docker-compose logs命令)、容器内进程查看(通过docker-compose top命令)等。

Docker Compose的使用示例

以下是一个简单的Docker Compose使用示例:

1、编写 docker-compose.yml 文件

yaml 复制代码
   version: '3'
   services:
     web:  // 为每个启动的服务应用一个标签,这个标签会成为Docker实例启动的DNS条目,这是其他服务访问他的的方式
       image: nginx:latest // docker compose首先会在本地docker存储库中找到要启动的目标镜像,如果找不到,会检查中央docker hub 。
       ports:
         - "8080:80" // 定义已启动docker容器上的端口号,这些端口号对外开放。
     db:
       image: mysql:latest
       environment:
         MYSQL_ROOT_PASSWORD: password // 将环境变量传递给启动中的docker镜像。
       networks:
       	 backend: // 命名服务所属的网络。
       	   aliases:
       	     - "licenseservice" // 指定网络上服务的备用主机名。
     networks:
       backend: // 使用默认类型 bridge 创建名为 backend 的自定义网络
         driver: bridge

这个YAML文件定义了两个服务:web和db。web服务使用了nginx镜像,并将容器的80端口映射到主机的8080端口。db服务使用了mysql镜像,并设置了环境变量MYSQL_ROOT_PASSWORD。

2、启动服务

在包含 docker-compose.yml 文件的目录下执行以下命令:

bash 复制代码
docker compose up

这个命令会根据 docker-compose.yml 文件中的定义启动所有服务。

3、查看服务状态

可以使用 docker-compose ps 命令来查看当前正在运行的服务及其状态。

4、停止服务

使用 docker-compose down 命令可以停止所有服务并移除相关容器和网络。

相关推荐
TTATTC41 分钟前
让 16 个 AI 员工在飞书群自我协同:基于 OpenClaw 的多 Agent 敏捷 Squad 拓扑与一人公司实操
docker·开源
TTATTC42 分钟前
从分片续传到 SPI 插件化扩展:Free-FS 企业级文件系统核心架构与万能预览技术拆解
docker·开源
JavaPub-rodert1 小时前
Docker 容器为什么 stop 半天停不下来?讲透 PID 1、SIGTERM、SIGKILL、僵尸进程与 tini
运维·docker·容器
EterNity_TiMe_6 小时前
Docker服务越装越多记不住端口?我用Fenrus把NAS里的常用入口整理成一个导航页
运维·人工智能·docker·ai·容器·cpolar
吴声子夜歌6 小时前
Docker入门与实战——libnetwork插件化网络功能
网络·docker·容器
江湖有缘7 小时前
Docker实战 | 使用Docker部署HarborGuard容器安全扫描平台
安全·docker·容器
江湖有缘7 小时前
Docker实战 | 使用Docker部署Reubah文件转换器和图像处理器
docker·容器·eureka
七夜zippoe8 小时前
把 OpenClaw Agent 搬进 K8s:容器化部署全记录
ai·云原生·容器·kubernetes·openclaw
骑着蜗牛撵大象3278 小时前
ToolJet + PostgreSQL:后台表格、查询和流程,一次搭成可远程访问的业务系统
数据库·低代码·docker·postgresql·内部工具·tooljet
flytalei9 小时前
从 Docker Compose 到 K3s:逐浪笔记首次完整部署与故障排查实战
笔记·docker·容器