(十一) Docker compose 部署 Mysql 和 其它容器

news2024/9/20 14:43:12

文章目录

  • 1、前言
    • 1.1、部署 MySQL 容器的 3 种类型
    • 1.2、M2芯片类型问题
  • 2、具体实现
    • 2.1、单独部署 mysql 供宿主机访问
      • 2.1.1、文件夹结构
      • 2.1.2、docker-compose.yml 内容
      • 2.1.3、运行
    • 2.2、单独部署 mysql 容器供其它容器访问(以 apollo 为例)
      • 2.2.1、文件夹结构
      • 2.2.2、docker-compose.yml 内容
      • 2.2.3、运行
      • 2.2.4、 客户端配置
    • 2.3、使用一个 compose 文件,同时部署 mysql 和其它容器(以 apollo 为例)
      • 2.3.1、文件夹结构
      • 2.3.2、compose 文件内容
      • 2.3.3、运行
      • 2.3.4、 客户端配置
  • 3、附录
    • 3.1、调试可能用到的命令
    • 3.2、apollo 配置参考

1、前言

1.1、部署 MySQL 容器的 3 种类型

在容器中部署 Mysql 会有三种网络分布类型:

  • 单独部署 mysql 容器,宿主机通过端口映射访问 容器 mysql

  • 使用两个 compose 文件,分别部署 mysql 容器和其它容器(比如 apollo 的 config-service、admin-service、portal)

  • 使用一个 compose 文件,同时部署 mysql 和其它容器(比如 apollo 的 config-service、admin-service、portal),其它容器通过mysql容器名:容器端口访问 mysql,此时相当于一次部署了 4 个容器

1.2、M2芯片类型问题

容器来自镜像,而镜像和芯片架构有关。
部署完容器之后,又会涉及一些工具软件(比如 workbench)的适配问题。

一般而言,使用 compose 直接使用 镜像名:latest 即可,但是使用 Mysql,为了寻求 M2芯片&mysql镜像&workbench 适配,我们需要增加一些特殊配置。

  • 指定架构类型
    platform: linux/amd64 #x86_64 系统(大多数桌面和服务器)
    platform: linux/arm64 #ARM64 系统(例如 Apple M1/M2
    platform: linux/arm/v7 #32 位 ARM 系统(例如旧版 Raspberry Pi)

  • 指定 镜像版本

image: mysql:8.0.30

2、具体实现

2.1、单独部署 mysql 供宿主机访问

2.1.1、文件夹结构

sql 可以放置 xxx.sql 脚本,不过建议容器启动后,再手动执行。
data 为宿主机挂载容器的数据目录。
在这里插入图片描述

2.1.2、docker-compose.yml 内容

# 如果需要自定义共享网络 
# docker network create bestcxx-network
# 自定义工程名称,默认文件夹名,影响注册网络名,AAA_网络名,或者 docker-compose -p diy_project_name up 启动时定义
# 外部连接时,需要 &allowPublicKeyRetrieval=true 以支持明文连接数据库
version: '3.8'

services:
  mysql-db-withdata:
    #platform:  linux/arm64 #非 arm 架构芯片可以注释本行
    image: mysql:8.0.30 #M2 版本 8.0.30,目前最新 workbench 最高到 8  #非 arm 架构芯片可以写 image: mysql:latest
    container_name: mysql-db-withdata
    restart: always
    ports:
      - "13306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: rootadmin
      MYSQL_DATABASE: apollodb
      MYSQL_USER: userapollo
      MYSQL_PASSWORD: userapollo
    volumes:
      #- ./sql:/docker-entrypoint-initdb.d # 自动加载运行 /sql 目录下的脚本 xxx.sql
      - ./data:/var/lib/mysql # 在宿主机持久化数据
    networks:
      bestcxx-network:
networks:
  bestcxx-network:

2.1.3、运行

在 Mysql 文件夹目录下执行

# docker-compose stop
docker-compose up -d

2.2、单独部署 mysql 容器供其它容器访问(以 apollo 为例)

最终容器运行形态展示
在这里插入图片描述

这里需要为两个容器创建一个共同的容器网络。
默认情况下,每启动一个容器,会自动创建一个 文件夹_网络名 的容器网络,当多个 compose 文件启动容器时,可以在命令行加入配置,使得不同的 compose 启动的多个容器使用共同的容器名、内部定义相同的网络名——最终共享同一个容器网络。

  • 创建一个容器网络,网络名为 bestcxx-network
docker network create bestcxx-network
  • compose 使用指定工程名,实际出册网络为 工程名_compose设置的网络名
# 默认会以文件夹作为工程名 docker-compose up -d
docker-compose -p diy_project_name up # 以 diy_project_name 作为工程名
  • compose 设定使用外部已有网络

如下,使用名为 bestcxx-network 的外部网络

networks:
  bestcxx-network:
    external: true
  • 查看容器网络列表
docker network ls
  • 删除容器网络
docker network rm  mysql_bestcxx-network

2.2.1、文件夹结构

  • mysql
    sql 可以放置 xxx.sql 脚本,不过建议容器启动后,再手动执行。
    data 为宿主机挂载容器的数据目录。
    在这里插入图片描述
  • apollo
    在这里插入图片描述

2.2.2、docker-compose.yml 内容

  • mysql
# 如果需要自定义共享网络 
# docker network create bestcxx-network
# 自定义工程名称,默认文件夹名,影响注册网络名,AAA_网络名,或者 docker-compose -p diy_project_name up 启动时定义
# 外部连接时,需要 &allowPublicKeyRetrieval=true 以支持明文连接数据库
version: '3.8'

services:
  mysql-db-withdata:
    #platform:  linux/arm64 #非 arm 架构芯片可以注释本行
    image: mysql:8.0.30 #M2 版本 8.0.30,目前最新 workbench 最高到 8  #非 arm 架构芯片可以写 image: mysql:latest
    container_name: mysql-db-withdata
    restart: always
    ports:
      - "13306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: rootadmin
      MYSQL_DATABASE: apollodb
      MYSQL_USER: userapollo
      MYSQL_PASSWORD: userapollo
    volumes:
      #- ./sql:/docker-entrypoint-initdb.d # 自动加载运行 /sql 目录下的脚本 xxx.sql
      - ./data:/var/lib/mysql # 在宿主机持久化数据
    networks:
      bestcxx-network:
networks:
  bestcxx-network:
    external: true
  • apollo

version: '3.6'
services:
  config-service:
    image: apolloconfig/apollo-configservice
    container_name: apollo-config-service
    hostname: config-service
    environment:
      #- SPRING_DATASOURCE_URL=jdbc:mysql://host.docker.internal:3306/ApolloConfigDB?useSSL=false&characterEncoding=utf8
      - SPRING_DATASOURCE_URL=jdbc:mysql://mysql-db-withdata:3306/ApolloConfigDB?useSSL=false&characterEncoding=utf8&allowPublicKeyRetrieval=true
      - SPRING_DATASOURCE_USERNAME=userapollo
      - SPRING_DATASOURCE_PASSWORD=userapollo
      - JAVA_OPTS=-Deureka.instance.homePageUrl=http://127.0.0.1:8080
    ports:
      - 8080:8080 # 宿主机端口 : 容器端口
    networks:
      bestcxx-network:

  admin-service:
    image: apolloconfig/apollo-adminservice
    container_name: apollo-admin-service
    hostname: admin-service
    environment:
      #- SPRING_DATASOURCE_URL=jdbc:mysql://host.docker.internal:3306/ApolloConfigDB?useSSL=false&characterEncoding=utf8
      - SPRING_DATASOURCE_URL=jdbc:mysql://mysql-db-withdata:3306/ApolloConfigDB?useSSL=false&characterEncoding=utf8&allowPublicKeyRetrieval=true
      - SPRING_DATASOURCE_USERNAME=userapollo
      - SPRING_DATASOURCE_PASSWORD=userapollo
      - CONFIGSERVICE_URL=http://config-service:8080
      - JAVA_OPTS=-Deureka.instance.homePageUrl=http://admin-service:8090
    ports:
      - 8090:8090
    depends_on:
      - config-service
    networks:
      bestcxx-network:

  portal:
    image: apolloconfig/apollo-portal
    container_name: apollo-portal
    hostname: portal
    environment:
      #- SPRING_DATASOURCE_URL=jdbc:mysql://host.docker.internal:3306/ApolloPortalDB?useSSL=false&characterEncoding=utf8
      - SPRING_DATASOURCE_URL=jdbc:mysql://mysql-db-withdata:3306/ApolloPortalDB?useSSL=false&characterEncoding=utf8&allowPublicKeyRetrieval=true
      - SPRING_DATASOURCE_USERNAME=userapollo
      - SPRING_DATASOURCE_PASSWORD=userapollo
      - APOLLO_PORTAL_ENVS=dev
      - DEV_META=http://config-service:8080
      - JAVA_OPTS=-Deureka.instance.homePageUrl=http://portal:8070
    ports:
      - 8070:8070
    depends_on:
      - config-service
      - admin-service
    networks:
      bestcxx-network:

networks:
  bestcxx-network:
    external: true
     

2.2.3、运行

  • 创建网络
docker network create bestcxx-network

在这里插入图片描述

  • 以指定工程名方式启动 mysql
    在 Mysql 文件夹下执行
docker-compose -p diy_project_name up

然后进行操作(建议使用 workbench)

#给用户 userapollo 授权-可以全部授权

CREATEUSER'userapollo'@'%' IDENTIFIED BY'userapollo';GRANTALL PRIVILEGES ON ApolloConfigDB.*TO'userapollo'@'%';GRANTALL PRIVILEGES ON ApolloPortalDB.*TO'userapollo'@'%';FLUSH PRIVILEGES;

#创建数据库:
CREATE DATABASE ApolloConfigDB;
CREATE DATABASE ApolloPortalDB;

#执行 apollo 官方建表&初始化 sql
https://github.com/apolloconfig/apollo/tree/master/scripts/sql

# 执行开发环境适配 sql
UPDATE `ApolloConfigDB`.`ServerConfig` SET `Value` = 'http://config-service:8080/eureka/' WHERE (`Id` = '1');
UPDATE `ApolloPortalDB`.`ServerConfig` SET `Value` = '{\"dev\":\"http://config-service:8080\"}' WHERE (`Id` = '8');

  • 以指定工程名方式启动 apollo
    在 Apollo 文件夹下执行
docker-compose -p diy_project_name up

2.2.4、 客户端配置

{
  "apollo": {
    "AppId": "helloabp",
    "Env": "dev",
    "Cluster": "default",
    "MetaServer": "http://localhost:8080",
    "Namespaces": [
      "hello.web.json"
    ]
  },
  "ClientId": "bestcxxLocal"
}

2.3、使用一个 compose 文件,同时部署 mysql 和其它容器(以 apollo 为例)

  • 最终形态
    在这里插入图片描述
  • 容器网络
    在这里插入图片描述

2.3.1、文件夹结构

sql 可以放置 xxx.sql 脚本,不过建议容器启动后,再手动执行。
data 为宿主机挂载容器的数据目录。
在这里插入图片描述

2.3.2、compose 文件内容

  • ApolloMysql
version: '3.6'

services:
  mysql-db-withdata:
    #platform:  linux/arm64 #非 arm 架构芯片可以注释本行
    image: mysql:8.0.30 #M2 版本 8.0.30,目前最新 workbench 最高到 8  #非 arm 架构芯片可以写 image: mysql:latest
    container_name: mysql-db-withdata
    restart: always
    ports:
      - "13306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: rootadmin
      MYSQL_DATABASE: apollodb
      MYSQL_USER: userapollo
      MYSQL_PASSWORD: userapollo
    volumes:
      - ./sql:/docker-entrypoint-initdb.d # 自动加载运行 /sql 目录下的脚本 xxx.sql
      - ./data:/var/lib/mysql # 在宿主机持久化数据
    networks:
      apollo-network:

  config-service:
    image: apolloconfig/apollo-configservice
    container_name: apollo-config-service
    hostname: config-service
    environment:
      - SPRING_DATASOURCE_URL=jdbc:mysql://mysql-db-withdata:3306/ApolloConfigDB?useSSL=false&characterEncoding=utf8&allowPublicKeyRetrieval=true
      - SPRING_DATASOURCE_USERNAME=userapollo
      - SPRING_DATASOURCE_PASSWORD=userapollo
      - JAVA_OPTS=-Deureka.instance.homePageUrl=http://127.0.0.1:8080 #配置为 http://config-service:8080 可避免 http://127.0.0.1:8070/system_info.html check 报错,但是需要额外 /etc/hosts 配置
    ports:
      - 8080:8080 # 宿主机端口 : 容器端口
    networks:
      apollo-network:

  admin-service:
    image: apolloconfig/apollo-adminservice
    container_name: apollo-admin-service
    hostname: admin-service
    environment:
      - SPRING_DATASOURCE_URL=jdbc:mysql://mysql-db-withdata:3306/ApolloConfigDB?useSSL=false&characterEncoding=utf8&allowPublicKeyRetrieval=true
      - SPRING_DATASOURCE_USERNAME=userapollo
      - SPRING_DATASOURCE_PASSWORD=userapollo
      - CONFIGSERVICE_URL=http://config-service:8080
      - JAVA_OPTS=-Deureka.instance.homePageUrl=http://admin-service:8090
    ports:
      - 8090:8090
    depends_on:
      - config-service
    networks:
      apollo-network:

  portal:
    image: apolloconfig/apollo-portal
    container_name: apollo-portal
    hostname: portal
    environment:
      - SPRING_DATASOURCE_URL=jdbc:mysql://mysql-db-withdata:3306/ApolloPortalDB?useSSL=false&characterEncoding=utf8&allowPublicKeyRetrieval=true
      - SPRING_DATASOURCE_USERNAME=userapollo
      - SPRING_DATASOURCE_PASSWORD=userapollo
      - APOLLO_PORTAL_ENVS=dev
      - DEV_META=http://config-service:8080
      - JAVA_OPTS=-Deureka.instance.homePageUrl=http://portal:8070
    ports:
      - 8070:8070
    depends_on:
      - config-service
      - admin-service
    networks:
      apollo-network:

networks:
  apollo-network:
    driver: bridge
      


2.3.3、运行

  • 以指定工程名方式启动 mysql
    在 ApolloMysql 文件夹下执行
docker-compose up -d

此时数据库启动,其余三个服务启动失败

  • 然后进行操作(建议使用 workbench)
#给用户 userapollo 授权-可以全部授权
CREATEUSER'userapollo'@'%' IDENTIFIED BY'userapollo';GRANTALL PRIVILEGES ON ApolloConfigDB.*TO'userapollo'@'%';GRANTALL PRIVILEGES ON ApolloPortalDB.*TO'userapollo'@'%';FLUSH PRIVILEGES;

#创建数据库:
CREATE DATABASE ApolloConfigDB;
CREATE DATABASE ApolloPortalDB;

#执行 apollo 官方建表&初始化 sql
https://github.com/apolloconfig/apollo/tree/master/scripts/sql

# 执行开发环境适配 sql
UPDATE `ApolloConfigDB`.`ServerConfig` SET `Value` = 'http://config-service:8080/eureka/' WHERE (`Id` = '1');
UPDATE `ApolloPortalDB`.`ServerConfig` SET `Value` = '{\"dev\":\"http://config-service:8080\"}' WHERE (`Id` = '8');
  • 然后依次启动 config-service、admin-service、portal
    portal 可能还会少量报错,这是因为初始化配置需要发布下

2.3.4、 客户端配置

{
  "apollo": {
    "AppId": "helloabp",
    "Env": "dev",
    "Cluster": "default",
    "MetaServer": "http://localhost:8080",
    "Namespaces": [
      "hello.web.json"
    ]
  },
  "ClientId": "bestcxxLocal"
}

3、附录

3.1、调试可能用到的命令

docker-compose stop 
docker-compose up -d 

3.2、apollo 配置参考

{
    "MyApollo": {
        "Name": "bestcxx"
        }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1908620.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

近红外光谱脑功能成像(fNIRS):2.实验设计、指标计算与多重比较

一、实验设计的策略与方法 近红外光谱成像(INIRS)作为一种非侵入性脑功能成像技术,为研究大脑活动提供了一种高效、生态效度高的方法。然而,为了充分利用INIRS技术并确保实验结果的准确性和可靠性,研究者必须精心设计实…

【密码学】流密码的基本概念

在介绍流密码之前,我们先来弄明白一个基础前置知识点——异或运算。 一、异或运算(XOR) 运算规则:相同为0,不同为1 特点:一个比特进行两次异或运算,可以恢复成原来的比特。 明文:110…

【沐风老师】3DMAX建筑体块生成插件BuildingBlocks使用方法详解

BuildingBlocks建筑体块生成插件使用方法详解 听说你还在手动建配景楼?有了BuildingBlocks这个插件,一分钟搞定喔! 3DMAX建筑体块生成插件BuildingBlocks,用于快速自定义街道及生成配景楼区块。 【适用版本】 3dMax2019及更高版…

DataExcelServer局域网文件共享服务器增加两个函数

1、PFSUM合并指定路径下单元格ID的值 PFSUM("/103采购/8月采购名细","amount") 第一个参数为路径,第二个参数为单元格的ID 2、PFQuery 查询路径下 单元格ID值的列表 PFQuery("/103采购/8月采购名细","amount") 查询/103采…

LLM- 注意力机制

一:什么是注意力机制,以及产生背景? (1):RNN模型[RNN模型]的缺点:下图是例如RNN模型解决机器翻译的例子,从这个例子可以看到Encoder最后一个向量(eos)送给了…

经常用借呗和花呗对征信有影响吗?

说起支付宝里的花呗和借呗,大伙儿肯定都不陌生,它们俩就像是支付宝里的信用贷款双胞胎,名字相近,性格却大相径庭。现在,这俩兄弟都乖乖地接入了央行的征信大家庭,你的每一次使用,都会被记录得清…

Oracle AWR报告快速分析工具

一、背景 详细大家都遇到过需要分析Oracle AWR报告的场景,分析AWR对于专业DBA不是什么问题,但是对于一些业务后台研发确实有些困难,很多业务研发人员看的就是条目太多,无从下手。 不过最近我在使用墨天轮浏览国产信创数据库时&am…

红外光气体检测:1.分子振动与红外吸收、检测系统的基本模型和红外敏感元件

分子振动与红外吸收 分子偶极矩的变化频率与分子内原子振动状态有关:μqd,其中μ是偶极矩,q是电荷,d是正负电荷中心距离。 分子在…

【AI大模型】赋能儿童安全:楼层与室内定位实践与未来发展

文章目录 引言第一章:AI与室内定位技术1.1 AI技术概述1.2 室内定位技术概述1.3 楼层定位的挑战与解决方案 第二章:儿童定位与安全监控的需求2.1 儿童安全问题的现状2.2 智能穿戴设备的兴起 第三章:技术实现细节3.1 硬件设计与选择传感器选择与…

如何在Excel中对一个或多个条件求和?

在Excel中,基于一个或多个条件的求和值是我们大多数人的常见任务,SUMIF函数可以帮助我们根据一个条件快速求和,而SUMIFS函数可以帮助我们对多个条件求和。 本文,我将描述如何在Excel中对一个或多个条件求和? 在Excel中…

【详细教程】PowerDesigner导出表结构word文档

📖【详细教程】PowerDesigner导出表结构word文档 ✅第一步:新建报告✅第二步:配置导出的参数✅第三步:导出 ✅第一步:新建报告 ✅第二步:配置导出的参数 如果你只需要导出纯粹的表结构,那么下面…

html——VSCode的使用

快捷键 快速生成标签:标签名tab 保存文件:CtrlS 设置自动保存【文件】→【自动保存】 快速查看网页效果:右击→Open in Default Browser 快捷键:altb 注意:必须安装了open in brows…

【C语言】return 关键字详解

在C语言中,return是一个关键字,用于从函数中返回值或者结束函数的执行。它是函数的重要组成部分,负责将函数的计算结果返回给调用者,并可以提前终止函数的执行。 主要用途和原理: 返回值给调用者: 当函数执…

YOLOv10改进 | EIoU、SIoU、WIoU、DIoU、FocusIoU等二十余种损失函数

一、本文介绍 这篇文章介绍了YOLOv10的重大改进,特别是在损失函数方面的创新。它不仅包括了多种IoU损失函数的改进和变体,如SIoU、WIoU、GIoU、DIoU、EIOU、CIoU,还融合了“Focus”思想,创造了一系列新的损失函数。这些组合形式的…

充分利用视觉信息多问多答合成数据,提升多模态大模型数学推理能力

©PaperWeekly 原创 作者 | 史文浩 单位 | 电子科技大学 论文题目: Math-LLaVA: Bootstrapping Mathematical Reasoning for Multimodal Large Language Models 论文链接: https://arxiv.org/abs/2406.17294 开源链接: https://github.c…

鸿蒙开发HarmonyOS NEXT (三) 熟悉ArkTs (上)

一、自定义组件 1、自定义组件 自定义组件,最基础的结构如下: Component struct Header {build() {} } 提取头部标题部分的代码,写成自定义组件。 1、新建ArkTs文件,把Header内容写好。 2、在需要用到的地方,导入…

Django 新增数据 create()方法

1,添加模型 Test/app11/models.py from django.db import modelsclass Book(models.Model):title models.CharField(max_length100)author models.CharField(max_length100)publication_date models.DateField()price models.DecimalField(max_digits5, decim…

后门攻击检测指南--windowsLinuxweb

免责声明:本文仅做技术交流与学习... 目录 Win d o w s - 后 门 - 常 规 & 权 限 维 持& 内 存 马 Lin u x - 后 门 - 常 规 & 权 限 维 持 & R o o t kit& 内 存 马 关于Rootkit的检测: web层面-后门--内存马 Win d o w s - 后 门 - 常 规…

构建LangChain应用程序的示例代码:58、如何使用 Nomic 的新嵌入模型构建和部署一个检索增强生成(RAG)应用

Nomic 嵌入模型 Nomic 发布了一个新的嵌入模型,在长上下文检索方面表现出色(8k上下文窗口)。 本教程将介绍使用 Nomic 嵌入构建和部署(通过 LangServe)RAG 应用的过程。 注册 获取您的 API 令牌,然后运行: ! nomic login然后使用您生成的 API 令牌运行 ! nomic login <…

vue-使用Worker实现多标签页共享一个WebSocket

文章目录 前言一、SharedWorker 是什么SharedWorker 是什么SharedWorker 的使用方式SharedWorker 标识与独占 二、Demo使用三、使用SharedWorker实现WebSocket共享 前言 最近有一个需求&#xff0c;需要实现用户系统消息时时提醒功能。第一时间就是想用WebSocket进行长连接。但…