Docker部署springbot项目过程记录

前期已经在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.service,docker镜像重启后,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

至此过程记录结束

你可能感兴趣的:(docker,容器,运维)