CodeGym /课程 /Docker SELF /配置 docker-compose.yml 启动所有服务

配置 docker-compose.yml 启动所有服务

Docker SELF
第 23 级 , 课程 3
可用

4.1 初始化

在这一步,我们会配置 compose.yaml 文件来启动我们多容器应用程序的所有服务。compose.yaml 文件会包括前端、后端和数据库的配置,还会定义网络和卷。

定义 Docker Compose 的版本

我们从指定 Docker Compose 的版本开始。在这个例子中使用的是版本 3:

Yaml

version: '3'

4.2 定义服务

服务 1: Frontend (ReactJS)

定义一个前端服务,它将从 frontend 目录中构建,并在端口 3000 上可用:

Yaml

services:
  frontend:
    build: ./frontend
    ports:
      - "3000:3000"
    networks:
      - task-network

服务 2: Backend (Flask)

定义一个后端服务,它将从 backend 目录中构建。它依赖于数据库服务,并将在端口 5000 上可用:

Yaml

  backend:
    build: ./backend
    ports:
      - "5000:5000"
    depends_on:
      - database
    networks:
      - task-network
    environment:
      - DATABASE_URL=postgresql://taskuser:taskpassword@database:5432/taskdb

其中:

  • depends_on: 表示 backend 服务依赖于 database 服务。这意味着数据库将在后端启动之前启动。
  • environment: 配置环境变量以连接到数据库。

服务 3: Database (PostgreSQL)

定义数据库服务,使用官方 postgres:13 镜像。配置环境变量以创建数据库和用户凭据:

Yaml

  database:
    image: postgres:13
    environment:
      - POSTGRES_DB=taskdb
      - POSTGRES_USER=taskuser
      - POSTGRES_PASSWORD=taskpassword
    networks:
      - task-network
    volumes:
      - db-data:/var/lib/postgresql/data

其中:

  • environment: 配置环境变量以在启动容器时创建数据库和用户。
  • volumes: 连接 db-data 卷以持久存储数据。

4.3 配置网络和卷

定义我们服务要用到的网络和卷:

Yaml

networks:
  task-network:
    driver: bridge
      
volumes:
  db-data:

其中:

  • networks: 定义了一个名为 task-network 的网络,使用 bridge 类型的驱动,它将用于容器之间的通信。
  • volumes: 定义了一个名为 db-data 的卷,用于存储数据库数据。

4.4 完整的 docker-compose.yml 文件

现在,我们将所有部分整合到一个文件 docker-compose.yml 中:

Yaml

version: '3'

services:
  frontend:
    build: ./frontend
    ports:
      - "3000:3000"
    networks:
      - task-network
        
  backend:
    build: ./backend
    ports:
      - "5000:5000"
    depends_on:
      - database
    networks:
      - task-network
    environment:
      - DATABASE_URL=postgresql://taskuser:taskpassword@database:5432/taskdb
        
  database:
    image: postgres:13
    environment:
      - POSTGRES_DB=taskdb
      - POSTGRES_USER=taskuser
      - POSTGRES_PASSWORD=taskpassword
    networks:
      - task-network
    volumes:
      - db-data:/var/lib/postgresql/data
        
networks:
  task-network:
    driver: bridge
        
volumes:
  db-data:

配置说明

  • build: 指定 Dockerfile 所在的目录路径,用于构建镜像。
  • ports: 打开主机上的端口以访问服务。
  • depends_on: 指定服务依赖于其他服务,以确保启动顺序。
  • environment: 配置服务的环境变量。
  • networks: 定义用于容器之间通信的网络。
  • volumes: 定义用于持久存储数据的卷。

4.5 启动应用程序

现在,compose.yaml 文件已经配置好,咱们可以用一个命令启动所有服务了:

Terminal

docker compose up

这个命令会根据 compose.yaml 里的配置创建并启动前端、后端和数据库的容器。

检查启动状态

容器启动后,确保所有服务正常运行:

  1. Frontend: 打开浏览器,访问 http://localhost:3000,检查前端是否正常工作。
  2. Backend: 打开浏览器,访问 http://localhost:5000,检查后端是否正常工作。
  3. Database: 确保数据库容器已经启动,并且能通过网络与后端进行交互。
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION