docker-compose使用问题


前言

记录使用docker-compose的问题

一、docker-compose部署前后端服务

  1. 构建好需要的前后端镜像,上传镜像仓库或者通过docker save -o 镜像名称:版本号(打包)
    构建方法可参考:docker及docker-compose安装及使用
  2. docker pull 拉去镜像或者使用docker load -i 镜像包名称 打开需要的镜像包(解包)
  3. 编写docker-compose.yml文件
version: '3'
services:
   mysql:
       image: mysql:8.0.31
       container_name: mysql  # 设置数据库容器名称
       environment:
           MYSQL_ROOT_PASSWORD: password  # 设置root用户的密码
           MYSQL_DATABASE: mysql   # 容器启动时就创建数据库myql
           MYSQL_CHARSET: utf8mb4  # 指定创建数据库的字符集
           MYSQL_COLLATION: utf8mb4_0900_ai_ci  # 指定创建数据库的默认排序规则
       volumes:  # 挂载卷
           - /root/mysql/conf:/etc/mysql/conf.d
           - /root/mysql/logs:/logs
           - /root/mysql/data:/var/lib/mysql
   django-server:
       image: django-server:v1.0.0
       container_name: django # 设置后端容器名称
       volumes:
           - /root/data/script:/diango-server/script/

       depends_on:  # 指定启动容器顺序:mysql>django
           - mysql
   react-server:
       image: react-server:v1.0.0
       container_name: react  # 设置前端容器名称 
       ports:
           - "8000:80"
       depends_on: # 指定容器启动顺序:mysql>django>react
           - mysql
           - autotest-server
networks:
 default:
   external:
     name: mynetwork #  设置所有容器使用docker中mynetwork网络
  1. 启动服务
docker-compose up -d # 创建对应容器启动服务
docker-compose down  # 停止对应服务并删除所有容器

二、遇到的问题点

1.容器之间的通信

通过指定docker-compose的网络,容器之间可以通过“容器名称:端口号”实现互相通信,独立在docker-compose之外的容器加入这个网络,也可以通过进行互相通信

2.depends_on按顺序启动问题

指定了每个容器的启动顺行,但是每个容器内的服务并没有被指定启动顺序,比如:数据库服务初始化并没有完成,后端服务已经开始要连接数据库,这时连接数据库失败,导致后端容器启动失败。
暂时解决办法:写了一个脚本定时连接数据库,直至数据库初始化完成后脚本连接成功,后端再开始启动服务。

def try_connect_mysql(max_attempt):
    attempt = 1
    for _ in range(max_attempt):
        try:
            sql().run('show databases')
            log.info('连接数据库成功')
            break
        except Exception as e:
            log.info(f"尝试连接到数据库失败(尝试连接 {
      
      attempt}): {
      
      e}")
            attempt += 1
            time.sleep(5)

3.后续遇到问题再添加

猜你喜欢

转载自blog.csdn.net/qq_45868731/article/details/134627711