2021年10月31日 13:59
原创作品,转载时请务必以超链接形式标明文章原始出处,否则将追究法律责任。

去年还经常去梁家滩钓鱼,那个时候没人管,随便钓,有时候还能钓上来一些白条。今年那边改造公园,不准钓鱼,就再也没去过,我是个业余的钓鱼者,就适合钓点小鱼,梁家滩欣赏一下。

 批注 2021-10-31 130242.png

今天我们就看一下如何在docker上部署spring boot。

首先第一步,我们需要一台linux机器,我在阿里云申请了一个。接下来我们先做个尝试,把tomcat跑起来。去官网下载tomcat,jdk,用winscp工具将其复制到Linux机器的root/bruce目录下,然后使用命令tar -zxvf 命令进行解压,解压后的文件夹如下。

image.png

解压完成后,我们首先设置环境变量,设置完成后,注意环境变量理解生效需要执行命令source profile

export JAVA_HOME=/root/bruce/jdk1.7.0_80
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib/tools.jar:${JRE_HOME}/lib/dt.jar
export PATH=${JAVA_HOME}/bin:$PATH

接着我们启动tomcat

[root@bruce ~]# cd bruce
[root@bruce bruce]# ls
apache-tomcat-8.5.72  apache-tomcat-8.5.72.tar.gz  docker-demo  jdk1.7.0_80  jdk-7u80-linux-x64.tar.gz
[root@bruce bruce]# cd apache-tomcat-8.5.72
[root@bruce apache-tomcat-8.5.72]# ll
total 132
drwxr-x--- 2 root root  4096 Oct 28 22:30 bin
-rw-r----- 1 root root 19481 Oct  1 23:15 BUILDING.txt
drwx------ 3 root root   254 Oct 28 22:47 conf
-rw-r----- 1 root root  6210 Oct  1 23:15 CONTRIBUTING.md
drwxr-x--- 2 root root  4096 Oct 28 22:30 lib
-rw-r----- 1 root root 57011 Oct  1 23:15 LICENSE
drwxr-x--- 2 root root  4096 Oct 31 01:02 logs
-rw-r----- 1 root root  1726 Oct  1 23:15 NOTICE
-rw-r----- 1 root root  3372 Oct  1 23:15 README.md
-rw-r----- 1 root root  7136 Oct  1 23:15 RELEASE-NOTES
-rw-r----- 1 root root 16507 Oct  1 23:15 RUNNING.txt
drwxr-x--- 2 root root    30 Oct 28 22:30 temp
drwxr-x--- 7 root root    81 Oct  1 23:15 webapps
drwxr-x--- 3 root root    22 Oct 28 22:47 work
[root@bruce apache-tomcat-8.5.72]# cd bin
[root@bruce bin]# ls
bootstrap.jar       ciphers.bat                   configtest.bat  digest.sh         shutdown.sh      tomcat-native.tar.gz  version.sh
catalina.bat        ciphers.sh                    configtest.sh   setclasspath.bat  startup.bat      tool-wrapper.bat
catalina.sh         commons-daemon.jar            daemon.sh       setclasspath.sh   startup.sh       tool-wrapper.sh
catalina-tasks.xml  commons-daemon-native.tar.gz  digest.bat      shutdown.bat      tomcat-juli.jar  version.bat
[root@bruce bin]# sh startup.sh
Using CATALINA_BASE:   /root/bruce/apache-tomcat-8.5.72
Using CATALINA_HOME:   /root/bruce/apache-tomcat-8.5.72
Using CATALINA_TMPDIR: /root/bruce/apache-tomcat-8.5.72/temp
Using JRE_HOME:        /root/bruce/jdk1.7.0_80/jre
Using CLASSPATH:       /root/bruce/apache-tomcat-8.5.72/bin/bootstrap.jar:/root/bruce/apache-tomcat-8.5.72/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
[root@bruce bin]#

ok,tomcat已经启动起来了,我们在浏览器访问一下,如果访问不同可能是你的阿里云机器没有开放8080端口给外部访问,或者检查linux防火墙有没有屏蔽8080端口。

阿里云这里需要在安全组这里配置入方向和出方向支持8080~8085端口。

image.png

ok,配置完成后我们在浏览器访问一下,小猫咪已经出来了,没有问题。

image.png

接着我们最关键的部分登场了,我们需要新建一个Dockerfile文件,内容如下

FROM openjdk:11
MAINTAINER lilei lilei1986abc@163.com
VOLUME /tmp
ADD demo1-0.0.1.jar app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

大家注意这里的内容,为什么要有VOLUME /tmp,解释如下

VOLUME 指定了临时文件目录为/tmp,器意义是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp。

image.png

进入Docker容器我们也会发现有个tmp目录

image.png

那么什么事Volumn呢,看下面的图

20200602165534109.png

这里是官方的解释

Volumes are stored in a part of the host filesystem which is managed by Docker (/var/lib/docker/volumes/ on Linux).
Non-Docker processes should not modify this part of the filesystem. Volumes are the best way to persist data in Docker.

接着我们需要将我们的项目进行打包,如何打包很简单,maven clean,maven package

image.png

我们将生成的jar包命名为demo1-0.0.1.jar,通过winscp 将Dockerfile和jar包copy到docker-demo目录下

image.png

接着我们去打镜像,命令如下,如果之前没下载过spring boot等相关的依赖,可能下载时间会长一点。

[root@bruce docker-demo]# docker build -t spring-boot .

ok,我们查看生成的镜像,并启动一个容器,通过docker images命令,我们发现image已经生成好了

[root@bruce docker-demo]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
demo          latest    bac369466011   16 hours ago   773MB
spring-boot   latest    bac369466011   16 hours ago   773MB
openjdk       11        40eccaa4f420   9 days ago     659MB
java          8         d23bdf5b1b1b   4 years ago    643MB

接着我们运行这个镜像,因为我们的SpringBoot项目端口是8080,所以我们将端口8084映射到docker内部端口8080

[root@bruce docker-demo]# docker run -d -p 8084:8080 spring-boot
ee3eb8132ce4089f33b346eed93fc01f5f05663f457839315d9c1fc6ff258fd5
[root@bruce docker-demo]# docker ps -a
CONTAINER ID   IMAGE         COMMAND                  CREATED          STATUS          PORTS                                       NAMES
ee3eb8132ce4   spring-boot   "java -Djava.securit…"   21 seconds ago   Up 13 seconds   0.0.0.0:8084->8080/tcp, :::8084->8080/tcp   practical_khorana
e0fc705b510e   demo          "java -Djava.securit…"   2 hours ago      Up 2 hours      0.0.0.0:8082->8080/tcp, :::8082->8080/tcp   confident_wing

我们发现已经启动了一个容器,镜像已经跑起来了,容器ID是ee3eb8132ce4,我们在浏览器里面输入地址http://39.107.93.119:8084,OK,没有问题

image.png

我们打开swagger的地址,看看能否成功,没有啥问题,收工

image.png

发表评论
匿名  
用户评论
暂无评论