前言
上一篇新建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。