多个docker容器间共享单个mariadb(Docker数据库服务)

image-20240329105545616

有什么用

多个docker容器间共享单个mariadb(Docker数据库服务)
多个Docker Compose组之间共享单个Docker数据库服务,避免一个应用就要开启一个mysql或mariadb的容器,避免浪费硬件系统的内存和硬盘资源

多个docker容器间共享网络

怎么用

修改新增的docker-compose.yml来让app的数据库部分连接到共享的mariadb docker容器中,比如:

version: '3'
services:
  app: #这只是一个举例,关键是看添加的两个章节:depends_on 和 networks
    build: .
    ...
    depends_on:
      - yourls_mysql
    networks:
      - shared_network

#以下这个章节内容是固定的,告知当前的docker-compose要引用到外部的共享网络
networks:
  shared_network:
    external: true
    name: shared_network

相关内容

实现方法

~~建立shared_network~~

~~需要新建一个共享network的docker容器,docker-compose.yml~~

version: '3'
services:
  network:
    image: alpine
    command: tail -f /dev/null
    networks:
      - shared_network

networks:
  shared_network:
    driver: bridge

实践证实这个步骤不是必须的,仅需要把network和配置数据库参数部分按下面的设置即可:

SuiteCRM使用共享数据库

以SuiteCRM为例,让它使用共享的yourls_mysql数据库服务

version: '3.5'
services:
#  mariadb: #因为要使用共享的数据库,所以注释掉这个章节
#    image: docker.io/bitnami/mariadb:11.2
#    environment:
#      # ALLOW_EMPTY_PASSWORD is recommended only for development.
#      - ALLOW_EMPTY_PASSWORD=yes
#      - MARIADB_USER=bn_suitecrm
#      - MARIADB_DATABASE=bitnami_suitecrm
#      - MARIADB_PASSWORD=bitnami123
#    volumes:
#      - 'mariadb_data:/bitnami/mariadb'
  suitecrm:
    image: docker.io/bitnami/suitecrm:8
    ports:
      - '8100:8080'
      - '8101:8443'
    environment:
      - SUITECRM_DATABASE_HOST=yourls_mysql
      - SUITECRM_DATABASE_PORT_NUMBER=3306
      - SUITECRM_DATABASE_USER=root
      - SUITECRM_DATABASE_NAME=yourls
      - SUITECRM_DATABASE_PASSWORD=my-secret-pw
      # ALLOW_EMPTY_PASSWORD is recommended only for development.
      #- ALLOW_EMPTY_PASSWORD=yes
    volumes:
      - './suitecrm_data:/bitnami/suitecrm'
    #depends_on: #这个depends_on仅限于使用在都处于单个docker-compose.yml文件中的情况
    #  - yourls_mysql
    networks:
      - template_default
networks:
  template_default:
    external: true
    name: template_default

启动这个docker-compose错误:

service “suitecrm” depends on undefined service yourls_mysql: invalid compose project

把depends_on 修改为 links 依然报同样错误。

修改了

network shared_network declared as external, but could not be found                                      

最终:

修改直接使用“template_default”这个network的话,可以直接使用到共享的数据库

下一步

打算用起来phpMyAdmin或者本机的DataGrip,来管理和备份数据库等操作…

注意事项

合并/共享数据库时,务必备份原先数据库中的内容;这样即便操作不当,还能追溯回原先版本。


评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注