DockerCompose部署SpringBoot项目——CentOS8-arm64

9 篇文章 0 订阅
4 篇文章 0 订阅

Docker Compose部署SpringBoot项目

虚拟机是CentOS8-arm64

外部机是Mac(m1芯片)

1. 制作SpringBoot项目镜像

(1) 将SpringBoot项目打为jar包

IDEA-package

将jar包复制到虚拟机中(可以在虚拟机新建好一个文件夹存放,放到其他文件夹下可能没有权限),我使用的是ForkLift,在AppStore可以免费下载

forklift-jar

(2) 准备工作

创建一个文件夹存放dockerfile,并进入

mkdir ~/dockerfile
cd ~/dockerfile

将刚刚的jar包移动到docker-files目录中,并修改名字

mv /mysoft/bill-manager-1.0-SNAPSHOT.jar bill-manager.jar

mv-jar

(3) 编写dockerfile文件
vim bill-dockerfile

dockerfile官方文档:https://docs.docker.com/engine/reference/builder/

需要注意:我的springboot项目是基于jdk1.8开发的,因此需要定义父镜像为java8,普通的amd64的CentOS定义如下:

FROM java:8

由于我的电脑里安装的是arm64架构的CentOS,普通的java:8不支持,因此重新在docker hub上找了一个支持arm64的jdk8:

FROM openjdk:8u322-jre

完整dockerfile文件:

FROM openjdk:8u322-jre
MAINTAINER xx xx@163.com # 作者信息,可以不定义
ADD bill-manager.jar bill.jar # 将当前目录下的jar包添加到容器,并改名为bill.jar
CMD ["java", "-jar", "bill.jar"] # 定义容器启动执行的命令
(4) 生成镜像
docker build -f ./bill-dockerfile -t bill .
  • -f 指定dockerfile所在的路径
  • -t 可以指定镜像名称和版本,格式:imagename:version;版本可以省略不写,默认为latest

docker-build-image

(5) 查看镜像
docker images

可以看到刚刚制作的镜像:

docker-images

2. 使用Docker Compose编排Mysql+SpringBoot

(1) 安装Docker Compose

参考:https://zhuanlan.zhihu.com/p/390868743

(2) 拉取Mysql镜像

由于我的是arm64架构的CentOS8,因此在dockerhub 找了一个支持arm64架构的mysql镜像:

docker pull mysql:oracle # 支持arm64架构
(3) 创建并进入docker-compose目录
mkdir ~/docker-compose
cd ~/docker-compose
(4) 编写docker-compose.yml文件

Docker Compose官方文档(version2):https://docs.docker.com/compose/compose-file/compose-file-v2/#build

vim docker-compose.yml

写入以下内容:

version: "1" # 版本
services:
	mysql: # 自定义服务名称
		image: mysql:oracle # mysql镜像
		container_name: mysql # 指定容器名称,不指定会默认为docker-compose-服务名称-1
		port: 
			- "3306:3306" # 映射端口
		environment:
			MYSQL_ROOT_PASSWORD: 123456 # 设置数据库root账户的密码
		volumes: # 配置数据卷
			- ./mysql/conf:/etc/mysql/conf.d
			- ./mysql/logs:/logs
			- ./mysql/data:/var/lib/mysql
	bill: # 自定义服务名称
		image: bill # 这里用的就是刚刚创建好的镜像
		container_name: bill
		ports:
			- "9001:9001"
		links:
			# 将bill容器与mysql容器连接起来,格式:service:alias 可以不写alias。
			# 这样在springboot项目配置文件中的数据库连接地址的ip地址部分就可以使用数据库的服务名称代替
			# 如:url: jdbc:mysql://mysql:3306/database
			- mysql 
		# depends_on能设置启动顺序,但注意:
		# 当这里配置了别的springboot服务时,只能保证启动顺序,不能保证等该服务启动完成才启动当前服务
		# 针对这种情况官方推荐使用wait-for.sh脚本来控制服务间的启动顺序。
		depends_on: 
			- mysql # 这里表示mysql容器先启动,然后再启动bill容器。
(5) 使用docker-compose启动容器
docker-compose up -d # -d表示以守护模式启动,会一直运行在后台

查看docker容器

docker ps

可以看到两个正在运行的容器,一个mysql,一个bill:

docker-containers

(6) 远程连接Mysql导入sql文件数据

进入容器并设置mysql允许远程连接,请参考:https://blog.csdn.net/jat0824/article/details/123499442?spm=1001.2014.3001.5502

使用Sequel Ace连接虚拟机上的mysql容器,使用root用户,和刚刚在docker-compose.xml中定义的root用户的密码进行登录:

docker-mysql-remote3306

然后导入sql文件。

(7) 测试访问

在浏览器访问:http://虚拟机ip:你映射的端口号/项目api,即可看到自己的项目页面

针对thymeleaf模板在docker中不生效的问题:

原本在Controller中返回页面可以直接返回字符串,thymeleaf会自动将其拼接上前缀:classpath:/templates/和后缀:.html 来找到对应的页面并返回。

但是在docker中无法正确解析,需要返回一个ModelAndView才能正常解析,因此修改Controller:

controller-thymeleaf

重定向的内容也是一样:

controller-thymeleaf-redirect

然后重新打包,生成镜像(先删除原来的镜像),部署。

docker-compose.yml优化

修改了如果修改了代码,按照上面的流程就会需要重新制作镜像,比较麻烦,docker-compose文件中可以直接build镜像,不需要手动build。

修改bill-dockerfile文件

注意需要把文件名改为Dockerfile!!!!

FROM openjdk:8u322-jre
MAINTAINER xx xx@163.com # 作者信息,可以不定义
ADD bill-manager.jar bill.jar # 将当前目录下的jar包添加到容器,并改名为bill.jar
ENTRYPOINT ["nohup", "java", "-jar", "bill.jar", "&"] # 配置容器启动后执行的命令,注意CMD和ENTRYPOINT的区别。nohup command & 表示让当前程序在后台运行。
修改docker-compose.yml

官方文档:https://docs.docker.com/compose/compose-file/compose-file-v2/#build

version: "1"
services:
	mysql:
		image: mysql:oracle
		container_name: mysql
		port: 
			- "3306:3306"
		environment:
			MYSQL_ROOT_PASSWORD: 123456
		volumes:
			- ./mysql/conf:/etc/mysql/conf.d
			- ./mysql/logs:/logs
			- ./mysql/data:/var/lib/mysql
	bill:
		# image: bill
		build: ../dockerfile # 这里是要制作镜像的dockerfile所在的目录路径
		container_name: bill
		ports:
			- "9001:9001"
		links:
			- mysql
		depends_on: 
			- mysql

dockerfile目录结构如下:
dockerfile-dir

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值