玩转Docker—部署Spring Boot+MySQL工程实战

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 玩转Docker—部署Spring Boot+MySQL工程实战

1 搭建Spring Boot+MySQL项目

1.1 项目依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.2.1</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.2.6</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

1.2 配置文件

server.port=8081
spring.datasource.username=root
spring.datasource.password=12345678
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

1.3 具体代码

HelloDao.java

@Mapper
@Repository
public interface HelloDao {

    @Select("SELECT * FROM student WHERE id=#{id}")
    Map<String, Object> findObjectById(@Param("id") Integer id);

}

HelloController.java

@RestController
public class HelloController {

    @Autowired
    private HelloDao helloDao;

    @GetMapping("/hello")
    public String hello() {
        return "Hello Docker!";
    }

    @GetMapping("/find/{id}")
    public String find(@PathVariable("id") Integer id){
        return helloDao.findObjectById(id).toString();
    }

}

2 编写Dockerfile

# 该镜像需要依赖的基础镜像
FROM java:8
 
# 指定维护者的名字
MAINTAINER YMX "1712229564@qq.com"
 
# 将指定目录下的jar包复制到docker容器的/export/Apps/springboot-admin目录下
COPY sp-docker-0.0.1-SNAPSHOT.jar /usr/local/sp_demo/sp-docker-0.0.1-SNAPSHOT.jar
 
# 声明服务运行在8080端口
EXPOSE 8081
 
# 指定docker容器启动时运行jar包
ENTRYPOINT ["java", "-jar","/usr/local/sp_demo/sp-docker-0.0.1-SNAPSHOT.jar"]

3 导出数据库

在MySQL安装目录的/bin目录下执行以下命令:

 ./mysqldump -uroot -p12345678 test > ~/test.sql 

数据库信息:

CREATE TABLE `student` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `age` int(2) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4;

LOCK TABLES `student` WRITE;
INSERT INTO `student` VALUES (1,'zs',32),(2,'ls',24),(3,'zsss',21);
UNLOCK TABLES;

4 复制SQL数据

在宿主机中执行以下命令:

docker cp test.sql mysql:/tmp
docker run -p 3307:3306 --name mysql -e MYSQL_ROOT_PASSWORD=12345678 -d mysql
docker ps
docker exec -it mysql /bin/sh

在已安装MySQL 的docker容器中执行以下命令:

$ cd /tmp
$ ls
test.sql
$ mysql -uroot -p12345678
###进入MySQL###
mysql> use test
Database changed
mysql> source /tmp/test.sql
Query OK, 0 rows affected, 2 warnings (0.03 sec)
mysql> select * from student;
+----+------+------+
| id | name | age  |
+----+------+------+
|  1 | zs   |   32 |
|  2 | ls   |   24 |
|  3 | zsss |   21 |
+----+------+------+
3 rows in set (0.00 sec)

5 将Spring Boot容器和MySQL容器进行联通

使用Docker命令查看IP地址

root ~ % docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
5b9134swqe954   bridge    bridge    local
root ~ % docker network inspect 5b9134swqe954                                          
[
    {
        ......
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16"
                }
            ]
        },
        ......,
        "Containers": {
            "d3938789hhuinj1499f680e": {
                "Name": "mysql",
                ......
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            }
        },
        ......
    }
]

经过查看我们发现,Docker的网络默认是桥接网络,即每个容器都属于同一网段,图示:

image.png

(图片来自https://www.cnblogs.com/ygria/p/13217793.html

因此,我们把Spring Boot项目的配置文件修改下:

server.port=8081
spring.datasource.username=root
spring.datasource.password=12345678
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://172.17.0.2:3306/test
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

如果条件允许可直接使用域名。

然后再重启Spring Boot则可以进行MySQL的访问和使用

扩展:Docker网络

Docker 的网络子系统是可选的,使用驱动程序。默认情况下存在几个驱动程序,并提供核心网络功能:

  • bridge:默认网络驱动程序。如果您未指定驱动程序,则这是您正在创建的网络类型。当您的应用程序在需要通信的独立容器中运行时,通常会使用桥接网络。
  • host:对于独立容器,去掉容器与 Docker 主机之间的网络隔离,直接使用主机的网络。
  • overlay: Overlay 网络将多个 Docker 守护进程连接在一起,使 swarm 服务能够相互通信。您还可以使用覆盖网络来促进 swarm 服务和独立容器之间的通信,或者不同 Docker 守护程序上的两个独立容器之间的通信。这种策略消除了在这些容器之间进行操作系统级路由的需要。
  • ipvlan:IPvlan 网络使用户可以完全控制 IPv4 和 IPv6 寻址。VLAN 驱动程序建立在此之上,为对底层网络集成感兴趣的用户提供了对第 2 层 VLAN 标记甚至 IPvlan L3 路由的完全控制。
  • macvlan:Macvlan 网络允许您将 MAC 地址分配给容器,使其在您的网络上显示为物理设备。Docker 守护进程通过它们的 MAC 地址将流量路由到容器。macvlan 在处理期望直接连接到物理网络而不是通过 Docker 主机的网络堆栈路由的遗留应用程序时,使用驱动程序有时是最佳选择。
  • none:对于这个容器,禁用所有网络。通常与自定义网络驱动程序一起使用。none不适用于 swarm 服务。
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
缓存 关系型数据库 MySQL
MySQL索引策略与查询性能调优实战
在实际应用中,需要根据具体的业务需求和查询模式,综合运用索引策略和查询性能调优方法,不断地测试和优化,以提高MySQL数据库的查询性能。
185 66
|
11天前
|
关系型数据库 应用服务中间件 PHP
实战~如何组织一个多容器项目docker-compose
本文介绍了如何使用Docker搭建Nginx、PHP和MySQL的环境。首先启动Nginx容器并查看IP地址,接着启动Alpine容器并安装curl测试连通性。通过`--link`方式或`docker-compose`配置文件实现服务间的通信。最后展示了Nginx配置文件和PHP代码示例,验证了各服务的正常运行。
32 3
实战~如何组织一个多容器项目docker-compose
|
9天前
|
关系型数据库 MySQL 数据库
docker高级篇(大厂进阶):安装mysql主从复制
docker高级篇(大厂进阶):安装mysql主从复制
71 24
|
18天前
|
NoSQL Java 关系型数据库
Liunx部署java项目Tomcat、Redis、Mysql教程
本文详细介绍了如何在 Linux 服务器上安装和配置 Tomcat、MySQL 和 Redis,并部署 Java 项目。通过这些步骤,您可以搭建一个高效稳定的 Java 应用运行环境。希望本文能为您在实际操作中提供有价值的参考。
98 26
|
27天前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
67 7
|
26天前
|
Java 关系型数据库 MySQL
如何将Spring Boot + MySQL应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot + MySQL应用程序部署到Pivotal Cloud Foundry (PCF)
47 5
|
26天前
|
Java 应用服务中间件 Docker
将基于 Spring 的 WAR 应用程序部署到 Docker:详尽指南
将基于 Spring 的 WAR 应用程序部署到 Docker:详尽指南
30 2
|
1月前
|
运维 Cloud Native 云计算
云原生之旅:Docker容器化实战
本文将带你走进云原生的世界,深入理解Docker技术如何改变应用部署与运维。我们将通过实际案例,展示如何利用Docker简化开发流程,提升应用的可移植性和伸缩性。文章不仅介绍基础概念,还提供操作指南和最佳实践,帮助你快速上手Docker,开启云原生的第一步。
|
1月前
|
Java Linux Docker
什么是 Docker?如何将 Spring Boot 应用程序部署到 Docker?
什么是 Docker?如何将 Spring Boot 应用程序部署到 Docker?
43 3
|
1月前
|
机器学习/深度学习 数据采集 Docker
Docker容器化实战:构建并部署一个简单的Web应用
Docker容器化实战:构建并部署一个简单的Web应用