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

文章目录

  • 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:latestcontainer_name: mysql-db-withdatarestart: alwaysports:- "13306:3306"environment:MYSQL_ROOT_PASSWORD: rootadminMYSQL_DATABASE: apollodbMYSQL_USER: userapolloMYSQL_PASSWORD: userapollovolumes:#- ./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:latestcontainer_name: mysql-db-withdatarestart: alwaysports:- "13306:3306"environment:MYSQL_ROOT_PASSWORD: rootadminMYSQL_DATABASE: apollodbMYSQL_USER: userapolloMYSQL_PASSWORD: userapollovolumes:#- ./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-configservicecontainer_name: apollo-config-servicehostname: config-serviceenvironment:#- 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:8080ports:- 8080:8080 # 宿主机端口 : 容器端口networks:bestcxx-network:admin-service:image: apolloconfig/apollo-adminservicecontainer_name: apollo-admin-servicehostname: admin-serviceenvironment:#- 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:8090ports:- 8090:8090depends_on:- config-servicenetworks:bestcxx-network:portal:image: apolloconfig/apollo-portalcontainer_name: apollo-portalhostname: portalenvironment:#- 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:8070ports:- 8070:8070depends_on:- config-service- admin-servicenetworks: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:latestcontainer_name: mysql-db-withdatarestart: alwaysports:- "13306:3306"environment:MYSQL_ROOT_PASSWORD: rootadminMYSQL_DATABASE: apollodbMYSQL_USER: userapolloMYSQL_PASSWORD: userapollovolumes:- ./sql:/docker-entrypoint-initdb.d # 自动加载运行 /sql 目录下的脚本 xxx.sql- ./data:/var/lib/mysql # 在宿主机持久化数据networks:apollo-network:config-service:image: apolloconfig/apollo-configservicecontainer_name: apollo-config-servicehostname: config-serviceenvironment:- 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-adminservicecontainer_name: apollo-admin-servicehostname: admin-serviceenvironment:- 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:8090ports:- 8090:8090depends_on:- config-servicenetworks:apollo-network:portal:image: apolloconfig/apollo-portalcontainer_name: apollo-portalhostname: portalenvironment:- 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:8070ports:- 8070:8070depends_on:- config-service- admin-servicenetworks: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.mzph.cn/pingmian/46013.shtml

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

相关文章

pyinstaller教程(二)-快速使用(打包python程序为exe)

1.介绍 PyInstaller 是一个强大的 Python 打包工具,可以将 Python 程序打包成独立的可执行文件。以下会基于如何在win系统上将python程序打包为exe可执行程序为例,介绍安装方式、快速使用、注意事项以及特别用法。 2.安装方式 通过 pip 安装 PyInstal…

万界星空科技MES系统:食品加工安全的实时监控与智能管理

万界星空科技MES系统通过集成多种技术和功能,能够实时监控食品加工过程中各环节的安全风险。以下是对该系统如何实现实时监控的详细分析: 一、集成传感器和数据分析技术 万界星空科技MES系统利用集成的传感器和数据分析技术,实时监控生产过程…

基于SSM的校园一卡通管理系统的设计与实现

摘 要 本报告全方位、深层次地阐述了校园一卡通管理系统从构思到落地的整个设计与实现历程。此系统凭借前沿的 SSM(Spring、Spring MVC、MyBatis)框架精心打造而成,旨在为学校构建一个兼具高效性、便利性与智能化的一卡通管理服务平台。 该系…

数学建模入门

目录 文章目录 前言 一、数学建模是什么? 1、官方概念: 2、具体过程 3、适合哪一类人参加? 4、需要有哪些学科基础呢? 二、怎样准备数学建模(必备‘硬件’) 1.组队 2.资料搜索 3.常用算法总结 4.论文撰写的…

微前端解决方案

在实施微前端架构时,前端框架和技术的选型是非常重要的。不同的框架和技术有着不同的优缺点,需要结合具体的应用场景进行选择。一、常见的微前端解决方案 Web Components Web Components(包括Custom Elements、Shadow DOM和HTML Imports&…

数据建设实践之大数据平台(一)准备环境

大数据组件版本信息 zookeeper-3.5.7hadoop-3.3.5mysql-5.7.28apache-hive-3.1.3spark-3.3.1dataxapache-dolphinscheduler-3.1.9大数据技术架构 大数据组件部署规划 node101node102node103node104node105datax datax datax ZK ZK ZK RM RM NM

HTML网页大设计-家乡普宁德安里

代码地址: https://pan.quark.cn/s/57e48c3b3292

二分图——AcWing 257. 关押罪犯

目录 二分图 定义 运用情况 注意事项 解题思路 AcWing 257. 关押罪犯 题目描述 运行代码 代码思路 改进思路 二分图 定义 二分图(Bipartite Graph)是一种特殊的图,在这种图中,顶点可以被分成两个互不相交的集合&…

C语言 | Leetcode C语言题解之第233题数字1的个数

题目: 题解: int countDigitOne(int n) {// mulk 表示 10^k// 在下面的代码中,可以发现 k 并没有被直接使用到(都是使用 10^k)// 但为了让代码看起来更加直观,这里保留了 klong long mulk 1;int ans 0;f…

硬盘HDD:AI时代的战略金矿?

在这个AI如火如荼的时代,你可能以为硬盘HDD已经像那些过时的诺基亚手机一样,被闪存和云存储淘汰到历史的尘埃里。但,别急着给HDD们举行退休派对,因为根据Finis Conner这位硬盘界的传奇人物的说法,它们非但没退场&#…

Linux进程——子进程详解

文章目录 查看进程的另一种方式如何创建子进程fork函数详解fork函数的用法fork函数做了什么为什么fork有两个返回值父子进程的运行顺序是什么样的为什么fork函数的两个返回值不同 在上一节中我们简单介绍了进程的概念,还有父进程和子进程 这篇文章的主要内容是介绍…

eNsp公司管理的网络NAT策略搭建

实验拓扑图 实验需求: 7,办公区设备可以通过电信链路和移动链路上网(多对多的NAT,并且需要保留一个公网IP不能用来转换) 8,分公司设备可以通过总公司的移动链路和电信链路访问到Dmz区的http服务器 9,多出口环境基于带…

护网HW面试——redis利用方式即复现

参考:https://xz.aliyun.com/t/13071 面试中经常会问到ssrf的打法,讲到ssrf那么就会讲到配合打内网的redis,本篇就介绍redis的打法。 未授权 原理: Redis默认情况下,会绑定在0.0.0.0:6379,如果没有采用相关…

暴雨让服务器不怕热҈热҈热҈热҈

在AI算力呈几何倍数增长的趋势下,算力逐渐朝着“高性能、高密度、高耗能“发展。在高耗能的算力下,AI服务器功率已逐步逼近风冷散热极限,而液冷作为更加高效、低能耗的制冷技术,逐渐成为了高密度算力散热场景的首选方案。 液冷的…

网络安全----防御----防火墙nat以及智能选路

前面要求在前一篇博客 网络安全----防御----防火墙安全策略组网-CSDN博客 7,办公区设备可以通过电信链路和移动链路上网(多对多的NAT,并且需要保留一个公网IP不能用来转换) 8,分公司设备可以通过总公司的移动链路和电信链路访问到Dmz区的ht…

Jenkins中Node节点与构建任务

目录 节点在 Jenkins 中的主要作用 1. 分布式构建 分布式处理 负载均衡 2. 提供不同的运行环境 多平台支持 特殊环境需求 3. 提高资源利用率 动态资源管理 云端集成 4. 提供隔离和安全性 任务隔离 权限控制 5. 提高可扩展性 横向扩展 高可用性 Jenkins 主服务…

Python excel知识库批量模糊匹配的3种方法实例(fuzzywuzzy\Gensim)

前言 当然,基于排序的模糊匹配(类似于Excel的VLOOKUP函数的模糊匹配模式)也属于模糊匹配的范畴,但那种过于简单,不是本文讨论的范畴。 本文主要讨论的是以公司名称或地址为主的字符串的模糊匹配。 使用编辑距离算法进…

Is Temperature the Creativity Parameter of Large Language Models?阅读笔记

最近有小伙伴来问LLM的参数该如何设计,废话不多说来看看paper吧。首先,常见的可以进行调参的几个值有temperature,top-p和top-k。今天这篇文章是关于temperature的。 原文链接:https://arxiv.org/abs/2405.00492 temperature如果…

OSPF.中DBD数据包

指定路由器---DR的身份 备份指定路由器---BDR的身份(RID)注意在一个广播域中的所有设备DR和BDR的认知必须统一。 只有DR和BDR会监听224.0.0.6的组播地址 会发出多个数据包 作用: 1.用来主从选举(没有携带lsa再要信息的DBD报文…

《斯科特·凯尔比的风光摄影手册》读书笔记

写在前面 《斯科特凯尔比的风光摄影手册》读书笔记整理没有全部读完,选择了感兴趣的章节理解不足小伙伴帮忙指正 😃,生活加油 99%的焦虑都来自于虚度时间和没有好好做事,所以唯一的解决办法就是行动起来,认真做完事情,…