去年还经常去梁家滩钓鱼,那个时候没人管,随便钓,有时候还能钓上来一些白条。今年那边改造公园,不准钓鱼,就再也没去过,我是个业余的钓鱼者,就适合钓点小鱼,梁家滩欣赏一下。
今天我们就看一下如何在docker上部署spring boot。
首先第一步,我们需要一台linux机器,我在阿里云申请了一个。接下来我们先做个尝试,把tomcat跑起来。去官网下载tomcat,jdk,用winscp工具将其复制到Linux机器的root/bruce目录下,然后使用命令tar -zxvf 命令进行解压,解压后的文件夹如下。
解压完成后,我们首先设置环境变量,设置完成后,注意环境变量理解生效需要执行命令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端口。
ok,配置完成后我们在浏览器访问一下,小猫咪已经出来了,没有问题。
接着我们最关键的部分登场了,我们需要新建一个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。
进入Docker容器我们也会发现有个tmp目录
那么什么事Volumn呢,看下面的图
这里是官方的解释
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
我们将生成的jar包命名为demo1-0.0.1.jar,通过winscp 将Dockerfile和jar包copy到docker-demo目录下
接着我们去打镜像,命令如下,如果之前没下载过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,没有问题
我们打开swagger的地址,看看能否成功,没有啥问题,收工