IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> DockerCompose部署SpringBoot项目——CentOS8-arm64 -> 正文阅读

[系统运维]DockerCompose部署SpringBoot项目——CentOS8-arm64

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.xml文件

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

vim docker-compose.xml

写入以下内容:

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

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-03-17 22:37:43  更:2022-03-17 22:40:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 1:25:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码