# Compose 简介

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

# Compose 使用的三个步骤

  • 使用Dockerfile 定义应用程序的运行环境
  • 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行
  • 最后,执行 docker-compose up 命令来启动并运行整个程序。

# 配置示例

新建 docker-compose.yml 文件。以redis为例,演示多个容器如何关联。

version: '3'
services:
  editor-server: # service name
    build:
      context: .  # 当前目录
      dockerfile: Dockerfile # 基于Dockerfile 构建
    image: editor-server # 依赖于当前 Dockerfile 创建出来的镜像
    container_name: editor-server
    ports:
      - 8081:3000 # 宿主机通过8081端口访问
  editor-redis: # service name 这个名字可以自己取
    image: redis # 引用官方的 redis 镜像
    container_name: editor-redis # 容器的名称
    ports: 
      # 宿主机 可以使用 127.0.0.1:6378 即可连接容器中的数据库  
      # 但是其他的docker容器不能 也就是说 editor-server 是没有办法通过127.0.0.1:6378访问的
      - 6378:6379
    environment:
      - TZ=Aaia/Shanghai # 设置时区 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  • 构建容器命令:docker-compose build <service-name>
  • 启动所有的服务 docker-compose up -d 后台启动
  • 停止所有的服务 docker-compose down
  • 查看服务 docker-compose ps # 这个只会列举出当前 docker-compose.yml 所在文件的中服务

在服务的配置文件中,将redis的配置文件中的host修改成 editor-redis 这个名字一定要和 docker-compose.yml 中redis的 service 一样。

# 在阿里云上使用docker部署nginx

我的这个博客就是部署在阿里云上的。

# 连接MySql 和 Mongodb

和redis不同之处在于,redis 是缓存 而 MySql 和 Mongodb是数据库 需要数据持久化

基于之前yml文件,我们需要配置mysql

version: '3'
services:
  editor-server: # service name
    build:
      context: .  # 当前目录
      dockerfile: Dockerfile # 基于Dockerfile 构建
    image: editor-server # 依赖于当前 Dockerfile 创建出来的镜像
    container_name: editor-server
    ports:
      - 8081:3000 # 宿主机通过8081端口访问
  editor-redis: # service name 这个名字可以自己取
    image: redis # 引用官方的 redis 镜像
    container_name: editor-redis # 容器的名称
    ports: 
      # 宿主机 可以使用 127.0.0.1:6378 即可连接容器中的数据库  
      # 但是其他的docker容器不能 也就是说 editor-server 是没有办法通过127.0.0.1:6378访问的
      - 6378:6379
    environment:
      - TZ=Aaia/Shanghai # 设置时区 
  editor-mysql:
    image: mysql # 引用官方的镜像
    container_name: editor-mysql
    restart: always # 出错就重启服务
    privileged: true # 高权限 执行下面的  mysql/init
    command: --default-authentication-plugin=mysql_native_password # 远程访问
    ports:
      - 3305:3306 # 宿主机可以用 3305访问 
    volumes: 
      - .docker-volumes/mysql/log:/var/log/mysql # 记录日志
      - .docker-volumes/mysql/data:/var/lib/mysql # 数据持久化
      - .mysql/init:/docker-enterypoint-initdb.d/ # 初始化sql 
    environment:
      - MYSQL_DATABASE=imooc_lego_course # 数据库名称
      - MYSQL_ROOT_PASSWORD=Mysql_2019 # 密码
      - TZ=Aaia/Shanghai # 设置时区 
  editor-mongo:
    image: mongo # 引用官方的镜像
    container_name: editor-mongo # 容器名称
    restart: always # 出错就重启服务
    valumes: 
      - .docker-volumes/mongo/data:/data/db  # 容器卷的数据持久化
    environment:
      - MONGO_INITDB_DATABASE=imooc_lego_course
      - TZ=Aaia/Shanghai # 设置时区 
    ports:
      - 27016:27017 # 宿主机可以用27016访问 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46

# 测试机部署实战

  • 使用github action 监听dev分支的push
  • 登录测试机,获取最新的dev分支代码
  • 重新构建镜像 docker-compose build editir-server
  • 重启所有容器 docker-compose up -d

# 具体步骤:

新建 deploy-dev.yml 内容如下:

name: deploy for dev
on:
  push:
    branches:
      - dev # 只针对 dev 分支做这个事情
    paths:
      - .github/workflows/*
      - src/**
      - Dockfile
      - docker-compose.yml
      - bin/*
jobs:
  deploy-dev:
    runs-on: ubuntu-latest
    steps: 
      - uses: actions/checkout@v2
      - name: set ssh key # 临时设置 ssh key
        run: |
          mkdir -p ~/.ssh/
          echo ""
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
最后更新时间: 11/19/2022, 10:40:46 AM