1

需求分析

在开发工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个 Web 项目,除了 Web 服务容器本身,往往还需要再加上后端的数据库服务容器等等

一、docker-compose介绍

Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排,docker-compose.yml是一个项目,项目是由一组相关的应用程序容器组成。服务是在docker-compose中定义的。项目中的某一个容器称为服务
1700313337685_2300153B-E7E6-4ca4-BBE2-6034D84D0CA7.png

常见的关键字

  • Services:(服务)是指一组定义了应用程序的容器
  • volumes: 定义应用中使用的卷,用于持久化数据或与宿主机共享文件。
  • image: 指定服务的镜像名称。
  • environment: 设置服务容器的环境变量。
  • command: 设置容器启动时执行的命令。
  • environment: 设置服务容器的环境变量。
  • restart: 设置服务容器的重启策略,如always表示总是重启。
  • networks: 定义应用中使用的网络,允许服务之间相互通信。

这里单独介绍一下volumes

通过配置可以让docker容器内的数据与本地系统的进行映射

 volumes:
      - ./db:/var/lib/mysql

1700315598483_FAFBFC0E-CBA3-435d-9167-57DB7AFF183D.png

二、配置一个docker-compose.yml

version: '3.1'

services:
  dentistry_mysql:
    image: mariadb:10.2 #代表使用的哪个镜像 类似与docker run 指定的镜像名称
    hostname: mysql57
    ports:   #代码宿主机和容器中端口映射 类似与docker run -p 参数 
      - "3312:3306"
    command: [ 
      '--character-set-server=utf8mb4', #设置数据库表的数据集
      '--collation-server=utf8mb4_general_ci', #设置数据库表的数据集
    ]
    restart: always
    environment:  #代表给当前容器启动指定环境 类似于docker run -e MYSQL_ROOT_PASSWORD=root
      MYSQL_ROOT_PASSWORD: yunzhi
      MYSQL_DATABASE: dentistry #这是指定在容器启动时创建的初始数据库的名称。
    volumes:
      - ./db:/var/lib/mysql
    networks:
      - net

  dentistry_redis:
    image: "redis:latest"
    ports:
      - "6379:6379"
    networks:
      - net

启动docker-compose

 docker-compose up -d

1700312730553_3897CC67-A02F-41f6-8F79-3D88D74674CB.png

通过DataGrip进行测试连接

1700312953213_618FEC84-FA8C-4957-951E-A9702FF26129.png

总结:

通过Docker Compose,你可以更轻松地管理和部署复杂的应用程序,提高开发和部署效率。只需要配置一个yml文件,可以快速构建docker容器

参考资料

Docker Compose 官方文档:https://docs.docker.com/compose/
菜鸟教程:https://www.runoob.com/docker/docker-compose.html


kexb
529 声望19 粉丝