【docker系列】docker-compose部署springboot项目【结合shell,优化版】

大家好,我是walker
一个从文科自学转行的程序员~
爱好编程,偶尔写写编程文章和生活
欢迎关注公众号【I am Walker】,回复“电子书”,就可以获得200多本编程相关电子书哈~
我的gitee:https://gitee.com/shen-chuhao/walker.git 里面很多技术案例!

步骤

1、确保安装好jdk、maven、git、docker环境

安装jdk1.8

https://blog.youkuaiyun.com/Think_and_work/article/details/122842622?spm=1001.2014.3001.5502

安装maven

https://blog.youkuaiyun.com/Think_and_work/article/details/122846319?spm=1001.2014.3001.5502

安装git

https://blog.youkuaiyun.com/Think_and_work/article/details/122858091?spm=1001.2014.3001.5501

安装docker和docker-compose

这里便自行去安装了,目前还未出教程,等后续再补上
可以参考一下
https://blog.youkuaiyun.com/qq_15076569/article/details/105734716

2、克隆项目

1、复制项目的地址
image.png
2、使用git clone指令拉取项目
image.png

3、编写docker-compose

version: '3.1' # 1、定义docker-compose版本

# 2、服务
services:
# 3、服务名称,可以自己定义
  web-11000:
    container_name: web-11000  # 4、容器名称,可以自己定义
    image: java:8  # 5、需要用到的镜像。 我使用的是jdk1.8  所以使用java:8
    volumes:   # 6、容器卷  绑定容器和虚拟机的路径  
      - ./:/opt
      - ./logs:/logs
      - /etc/localtime:/etc/localtime:ro
    ports:  # 7、端口映射 
      - 11000:11000
    command: [  # 8、执行指令
      'java',
      '-Djava.security.egd=file:/dev/./urandom',
      '-Duser.timezone=GMT+08',  # 时区
      '-jar','/opt/springboot-function-0.0.1-SNAPSHOT.jar', # 执行jar包命令
      '--server.port=11000'  #端口号,也可以不添加,在项目中添加
    ]
    restart: always

使用-Djava.security.egd=file:/dev/./urandom’的原因

tomcat部署项目发现卡在Root WebApplicationContext : initialization completed in xxxms
1.整个过程没有报错,但是启动时间很长。
2.查阅资料发现由于tomcat启动时产生随机数导致jvm阻塞,可能是多次启动tomcat导致熵池被用空造成阻塞。
在apache-tomcat官方文档:如何让tomcat启动更快里面提到了一些启动时的优化项,其中一项是关于随机数生成时,采用“熵源”(entropy source)的策略。他提到tomcat7的session id的生成主要是通过java.security.SecureRandom生成随机数来实现的,随机数算法使用的是“SHA1PRANG”。
3.在sun/oracle的jdk里,这个算法的提供者在底层依赖到操作系统提供的随机数,在linux上,与之相关的是/dev/random和dev/urandom/
当熵池为空时,来自/dev/random的读取操作将被阻塞,直到熵池收集到足够的环境噪声数据。这么做的目的是成为一个密码安全的伪随机数发生器,熵池要有尽可能大的输出。对于生成高质量的加密密钥或者是需要长期保护的场景,一定要这么做。
参考资料:https://www.icode9.com/content-1-1184596.html

4、编写shell脚本

#!/bin/bash 

current=$(date "+%Y%m%d%H%M%S") # 1、定义时间变量,主要用于记录历史jar包的时间

# 2、切换到存放项目的路径下
cd /opt/develop/git/walker-learn/springboot-function

# 3、拉取项目  这里根据自己的分支而定
git pull origin master
# 4、使用maven指令进行清除和打包
mvn clean package -D maven.test.skip=true

# 5、移动jar包,主要是将之前的版本的jar包保存下来,用于出现问题之后回退版本
mv /opt/develop/docker/springboot-function/springboot-function-0.0.1-SNAPSHOT.jar /opt/develop/docker/springboot-function/springboot-function-0.0.1-SNAPSHOT.jar.$current
# 6、复制maven打包成功后jar包到docker-compose.yml同个文件夹下
cp -f /opt/develop/git/walker-learn/springboot-function/target/springboot-function-0.0.1-SNAPSHOT.jar /opt/develop/docker/springboot-function

# 7、转移到docker-compose.yml的路径下
cd /opt/develop/docker/springboot-function

# 8、docker-compose重启   第一次启动还是需要使用docker-compose up -d 自行启动,第二次才可以使用shell脚本进行重启
docker-compose restart

  • #!/bin/sh 是指此脚本使用/bin/sh来解释执行,**#!**是特殊的表示符,其后面跟的是此解释此脚本的shell的路径。

5、执行

image.png
使用./exec.sh 具体的文件看自己的命名,我使用的是exec.sh

若结果出现,则表示项目构建成功了
image.png

也可以查看日志查看结果
image.png

问题

bash: ./springboot-function.sh: /bin/bash^M: bad interpreter: No such file or directory

这里可能是格式的问题,我是因为在idea写的,写完直接把文件复制过去的。
这个方式不是很好,可以先在idea写,写完把文本内容复制过去,或者直接在linux上面写
image.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WalkerShen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值