Docker部署springbot项目过程记录-CSDN博客
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
前期已经在idea中编译打包好了jar包然后部署在xx云服务器上xx云服务器是ubuntu系统装了openjdk环境然后执行
java -jar xxxxx.jar &
nginx上再做端口映射或者反向代理不详细说了。
最近云服务器到期换了一台更商业化的只有docker环境不能安装jdk此为背景
第一种尝试docker部署ubuntu或者centos
这是顺其自然的想法既然只能docker那就docker装个ubuntu/centos不就行了
sudo docker run --name ubuntu -i -t -d -p 10022:22 homebrew/ubuntu20.04
然后就切换到docker环境中安装部署java环境开ssh
docker exec -it ubuntu /bin/bash
sudo apt-get update
sudo apt install openssh-server vim openjdk-8-jdk
还包括把jar包拷贝到docker内创建rc.local自运行脚本等都是按部就班那套不详细说了一切都完成后发现问题了用systemctl enable rc-local.servicedocker镜像重启后jar包没有运行一步步查发现是rc.local中的脚本没有运行折腾了一天搞不定换个思路
既然rc.local不行那在宿主机里执行容器的命令总行吧
docker exec -it ubuntu /bin/bash -c 'java -jar /home/xxxx.jar &'
实践证明不可行但是只要把命令最后的&去掉就可以了百思不得其解
直到发现了docker容器重启后ssh端口也没了排查发现是sshd服务没有起来大概想到什么原因了看到这篇文章后证实了想法
rabbitmq - Is there a way to set the run level on the docker? - Stack Overflow
csdn上还有个哥们也碰到了类似的问题文章说可以把命令加入entrypoint中执行我没有尝试
docker镜像中安装rabbitmq报错_invoke-rc.d: could not determine current runlevel-CSDN博客
docker镜像是静态的后安装的服务如果以start service方式运行会随着命令的结束而终止容器不会保存状态。
第二种尝试docker部署spingbot环境
上述过程失败了回想了整个过程我其实是想找个java运行环境不得不把操作系统引入尽量换个思路找个单纯的java运行环境即可过程如下
1. 新建一个目录里面只放待部署的jar包
2. 新建Dockerfile内容如下
FROM openjdk:8
EXPOSE 38000
VOLUME /tmp
ADD xxxxxxx-1.0.1.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
其中端口号和xxx.jar根据情况修改
3. docker pull openjdk:8
4. docker build -t app:1.0 .
5. docker run --name container_name --restart=always -itd -p 38000:38000 app:1.0
部署结束打开浏览器输入
http://servierip:38000
至此过程记录结束