docker-compose 启动mysql或多个项目实例

问题背景

研究某技术问题,结果需要使用docker部署一个msyql。
并且:

  1. mysql 正常启动,这不用多说
  2. mysql启动后带一些初始化sql脚本,即数据库启动后就已经有了某些数据
  3. mysql启动后就可以被远程访问
  4. 为提升B格,使用docker-compose方式启动,而不是docker。

但如果把容器都放在一个network下的话,也不是很需要mysql的远程访问了,而且更安全。

记录一下系统环境:
在这里插入图片描述

具体操作

1.先创建对应的路径及文件准备

如下图:
在这里插入图片描述

其中 confdbinit 分别是配置文件、数据存储目录 和 初始化脚本目录。
显然,如果想用docker-compose一次启动多个mysql实例,则不同的示例只用db目录不同就行了。
其他的配置可能的话可以复用。

compose.yml 文件内容如下

其中有些内容我也没有很明白怎么用,但目前这个文件是可以成功的。

# mysql

version: "3"
services:

  mysql1:
    image: mysql:5.7.37
    restart: always
    command: --default-authentication-plugin=mysql_native_password #这行代码解决无法访问的问题
    # 这个可以决定启动的容器的name
    container_name: mysql-57
    ports: 
      - 3306:3306
    environment:
      - "MYSQL_ROOT_PASSWORD=123456"
      - "MYSQL_DATABASE=mydb"
      - "TZ=Asia/Shanghai"
    volumes:
      - "/opt/soft/mysql/db:/var/lib/mysql"
      - "/opt/soft/mysql/conf/my.cnf:/etc/my.cnf"
      - "/opt/soft/mysql/init:/docker-entrypoint-initdb.d/"
    networks:
      - mysqln

  mysql2:
    image: mysql:5.7.37
    restart: always
    command: --default-authentication-plugin=mysql_native_password #这行代码解决无法访问的问题
    # 这个可以决定启动的容器的name
    container_name: mysql-57-2
    ports: 
      - 3307:3306
    environment:
      - "MYSQL_ROOT_PASSWORD=123456"
      - "MYSQL_DATABASE=mydb"
      - "TZ=Asia/Shanghai"
    volumes:
      - "/opt/soft/mysql/db2:/var/lib/mysql"
      - "/opt/soft/mysql/conf/my.cnf:/etc/my.cnf"
      - "/opt/soft/mysql/init:/docker-entrypoint-initdb.d/"
    networks:
      - mysqln    


#网络设置,配置和使用成功
networks: 
  mysqln: 
    driver: bridge
    enable_ipv6: false
    # ipam:
    #   driver: default
    #   config:
    #     - subnet: 172.20.0.0/16
    # #       gateway: 172.20.0.1
备份一下

其中,db、conf、init等这几个文件的内容参考了这篇文章:
https://www.jianshu.com/p/ab3367b2e6b4

备份一下防原文消失:
conf 目录里面是 my.cnf 文件。内容:

[mysqld]
user=mysql
default-storage-engine=INNODB
character-set-server=utf8
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8

init 目录里是 init.sql 文件,内容:

create database test;
use test;
create table user
(
id int auto_increment primary key,
username varchar(64) unique not null,
email varchar(120) unique not null,
password_hash varchar(128) not null,
avatar varchar(128) not null
);
insert into user values(1, "zhangsan","test12345@qq.com","passwd","avaterpath");
insert into user values(2, "lisi","12345test@qq.com","passwd","avaterpath");

db 是空目录,用于存储文件。

2. 启动

进入compose.yml 文件所在的目录,执行启动。
在这里插入图片描述
得到启动画面如图(此图不必细看):
在这里插入图片描述

3. 可以看到启动了的两个mysql实例

在这里插入图片描述
然后可以查看他们的IP
docker inspectr mysql-57-2
在这里插入图片描述
另一个的IP是172.23.0.2,不上图了。

证明两个mysql示例确实通过docker启动成功了。

4. 证明从其中某个容器,可以连接到另一个容器

4.1 容器内命令行互相连接
容器名IP地址
mysql-57172.21.0.2
mysql-57-2172.21.0.3

思路:先exec ,连接到其中一个容器上,然后在容器中 mysql -h x.x.x.x. -u root -p 连接到另一个容器的mysql上,如能成功,则显然可以证明是相通的。

  1. docker exec -it mysql-57 /bin/bash
  2. mysql -h 172.23.0.3 -u root -p
  3. mysql -h 172.23.0.2 -u root -p
    经试验,都能连接成功。
    在这里插入图片描述
4.2 客户端连接

直接上图
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
显然,数据并不相通,就是相当于局域网内分别启动了两个不相干的mysql实例。
但由于在同一局域网内,两个mysql的服务器可以互相访问到对方,并且可以连接到对方的数据库中去。

后续

那么,这么干的意义在哪里?

可以使用docker-compose创建一系列的容器(比如一个nacos配置中心,使用mysql数据库,还有项目等一套内容,集群等),一起启动。
由于docker-compose.yml文件可以写很多内容,用起来要比一个一个使用docker run命令好好多了。
可以”一键启动“一个”无穷大的世界“。

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!如果您想使用Docker Compose来部署一个包含Spring Boot和MySQL的应用程序,您可以按照以下步骤进行操作: 1. 首先,确保您已经安装了DockerDocker Compose。您可以在Docker官方网站上找到相应的安装指南。 2. 创建一个新的文件夹,并在该文件夹中创建一个名为`docker-compose.yml`的文件。 3. 在`docker-compose.yml`文件中定义两个服务:一个用于Spring Boot应用程序,另一个用于MySQL数据库。以下是一个示例配置: ```yaml version: '3' services: springboot: build: context: . dockerfile: Dockerfile ports: - 8080:8080 depends_on: - mysql mysql: image: mysql:latest environment: - MYSQL_ROOT_PASSWORD=your_password - MYSQL_DATABASE=your_database - MYSQL_USER=your_user - MYSQL_PASSWORD=your_password ``` 在上面的示例中,我们定义了两个服务:`springboot`和`mysql`。`springboot`服务使用了一个Dockerfile来构建Spring Boot应用程序,它会将应用程序的8080端口映射到主机的8080端口。`mysql`服务使用了最新版本的MySQL镜像,并设置了一些环境变量来配置MySQL实例。 4. 创建一个名为`Dockerfile`的文件,用于构建Spring Boot应用程序的Docker镜像。以下是一个示例配置: ```Dockerfile FROM adoptopenjdk:11-jdk-hotspot WORKDIR /app COPY target/myapp.jar . CMD ["java", "-jar", "myapp.jar"] ``` 在上面的示例中,我们使用了一个基于OpenJDK 11的Docker镜像,并将应用程序的JAR文件复制到容器中。最后,我们使用`java -jar`命令来运行应用程序。 5. 将您的Spring Boot应用程序的JAR文件放置在与`docker-compose.yml`文件相同的文件夹中,并确保文件名与`Dockerfile`中指定的文件名一致。 6. 打开终端,导航到包含`docker-compose.yml`文件的文件夹,并运行以下命令启动应用程序: ```bash docker-compose up ``` Docker Compose将会根据配置文件构建和启动两个服务:Spring Boot应用程序和MySQL数据库。 这样,您就可以使用Docker Compose来部署一个包含Spring Boot和MySQL的应用程序了。希望这些步骤对您有所帮助!如果您有任何其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值