Skip to content
DAILY QUOTE

“ ”

Docker Compose

1.简介

Dockerfile适合打包单个应用,docker run一次通常只能启动一个容器。

实际项目中经常包含多个服务,例如:

  • 1个Java后端
  • 1个Vue前端
  • 1个MySQL
  • 1个Redis

如果只使用普通Docker命令,需要手动执行多次docker run,还要处理容器之间的通信,效率比较低。

Docker Compose是Docker官方的批量容器编排工具。它可以通过一个YAML文件描述所有服务,然后用一条命令启动整个项目。

2.核心层级

层级说明
工程最大单位,代表要运行的整个项目,通常以所在文件夹命名
服务工程中的组件,例如数据库服务、Web应用服务,一个服务可以包含一个或多个相同容器实例
容器最小运行单元,真正执行任务的Docker实例

3.使用三步骤

使用Compose通常分为三步:

1.定义个体:编写Dockerfile,保证代码可以打包成镜像并在任何地方运行。
2.定义群体:编写docker-compose.yml,声明项目需要哪些服务、端口如何映射、磁盘如何挂载。
3.一键启动:在docker-compose.yml所在目录执行启动命令。

bash
docker compose up -d

4.docker-compose.yml语法

docker-compose.yml是Compose的核心配置文件。

示例:

yaml
version: '3.8'
services:
  web:
    build: .
    ports:
      - "8080:8080"
    depends_on:
      - redis

  redis:
    image: "redis:alpine"
    volumes:
      - ./redis-data:/data

配置说明:

配置作用
versionCompose文件版本,新版Docker中可以不写
services开始定义服务
web服务名,可以自定义,例如webappbackend
build: .根据当前目录的Dockerfile构建镜像
ports端口映射,格式为宿主机端口:容器端口
depends_on启动顺序依赖,例如先启动redis再启动web
image使用现成镜像,不现场构建
volumes数据卷挂载,用于数据持久化

注意:原笔记中的docker-conpose.yml应为docker-compose.yml

5.日常高频命令

bash
#1.启动并后台运行
docker compose up -d

#2.关闭并清理容器
docker compose down

#3.重新构建镜像并启动
docker compose up -d --build

#4.查看指定服务日志
docker compose logs -f web

说明:修改代码或者Dockerfile后,通常需要加--build重新构建镜像,否则可能运行的还是旧代码。

6.Compose网络连通

Compose的一个核心能力是自带内部局域网和DNS。

普通Docker中,如果Java应用要连接Redis,通常需要知道Redis容器的真实IP。但在Compose中:

  • Compose会自动创建一个名为项目名_default的网络。
  • 所有在YAML里定义的服务都会加入这个网络。
  • 服务名就是主机名,可以直接通过服务名访问其他容器。

示例:

text
redis://redis:6379

含义:Java代码连接Redis时,不需要写Redis容器IP,直接写服务名redis即可,Compose会自动解析到对应容器。