在Oracle Cloud上,Centos 8 + Docker 20.10.6 + Spring boot 2.51 + Mysql 8部署

604 阅读2分钟

前言

上一篇新建Oracle cloud 实例(Centos 8)后,将一个以前的学习案例用Spring boot+Mysql改写了一下发布上去。

spring boot和mysql是独立的两个docker容器,所以两者需要通过ip或者link进行交互。

此次发布没有使用docker-compose

新建一个bridge网络

docker有三种常用网络模式:bridge, host, overlay.

  • bridge,应用都是容器形式,且都在一个宿主机上,各个容器需要互相通信的场景;
  • host,容器和本机应用混杂且需要相互访问的情况;
  • overlay,在不同宿主机的容器之间需要互相通信的情景。

此处只重点介绍bridge模式,其他两种可自行搜索。 bridge分为“default bridge”和“user-defined bridge”(自定义bridge),docker安装好后会默认创建一个bridge网络(docker0),也就是“default bridge”,未指定网络的容器会默认使用这个网络。一般使用自定义bridge较多,我们定义一个私有网络,可以将我们的应用与其他应用相隔离,这在一个共享的开发服务器上非常有用,此外,自定义网络也有下面两个优点:

  • 只有用户定义的bridge网络才有DNS功能,可通过容器名称互相访问,否则只能使用IP进行容器间访问,而IP一是会变,二是不好记;
  • 容器可以在不停的情况下,更换自定义的bridge,贼方便。
docker network create spring-net

用以下命令,可以看到一个新的bridge网络。

docker network ls

也可以用以下命令,查看spring-net的详细内容

docker network inspect spring-net

安装并运行Mysql8

在docker shell下输入

docker pull mysql:latest

取得mysql8 image。用以下命令可以看到已经下载到mysql8.

docker image ls

运行mysql8

$ docker run -it --network spring-net --name MySQL80 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest

network: 指定bridge 网络. name: 指定docker运行后的名称., p: 指定docker端口转换 e:给docker传入参数,通过指定容器外的MYSQL_ROOT_PASSWORD,给root设置口令。 d:后台运行。

安装并运行springboot实例

用IDEA将springboot应用编译成可执行jar,如MybatisStudent-0.0.1-SNAPSHOT.jar。

在oracle cloud,用xshell建立目录/usr/mystudent,然后用xftp将MybatisStudent-0.0.1-SNAPSHOT.jar上传到该目录下。

在该目录下新建Dockerfile文件如下:

# 基于哪个镜像,如果没有基础镜像,docker会自动去下载,如果有则不下载。
FROM openjdk:16.0.1-jdk

# 将/tmp目录并持久化到Docker数据文件夹,因为Spring Boot使用的内嵌Tomcat容器默认使用/tmp作为工作目录
VOLUME /tmp

# 将同一个目录下的MybatisStudent-0.0.1-SNAPSHOT.jar添加MybatisStudent.jar中
ADD MybatisStudent-0.0.1-SNAPSHOT.jar MybatisStudent.jar

#增加传入参数
ENV username=""
ENV password=""
ENV url=""

# 开放8081端口
EXPOSE 8081

# ENTRYPOINT指定容器运行后默认执行的命令
ENTRYPOINT ["sh","-c","java -jar /MybatisStudent.jar --spring.datasource.username=$username --spring.datasource.url=$url --spring.datasource.password=$password""]

将Dockerfile保存后,运行以下命令编译springboot程序的image。

#docker build --force-rm --no-cache -t mybatisstudent:v1 .

注意最后有个.,表示当前目录。

运行spring boot应用:

#docker run --name studentapp --network spring-net --link MySQL80:MySQL80 -e username="root" -e password="Sj750513" -e url="jdbc:mysql://MySQL80:3306/studentmanager?setUnicode=true&characterEncoding=utf8&useAffectedRows=true" -p 8081:8081 -d mybatisstudent:v1

在browser中输入xxx.xxx.xxx.xxx:8081测试,一切ok。