Docker部署SpringBoot+redis+nginx项目完整 还有docker不可以一个容器跑多个程序

最近公司要求在NAS上部署一个前后端分离的SpringBoot+redis+nginx项目,同时要求使用Docker来进行部署。首先领导的想法是用一个容器跑SpringBoot+redis+nginx,接下来我只能是疯狂找资料。最后确定Docker好像每个容器只跑一个程序,即使是有办法能做到运行多个程序(听说是可以但是我没找到办法)也不方便后期线上维护,违背了使用docker的初衷。
最后我们选择了正常部署。

整体部署步骤

  1. 首先解决redis的部署 使用docker下载官方镜像 并启动。

很简单因为项目是公司内网使用,redis不需要设置密码直接使用即可,所以直接使用官方镜像 无需多于配置
代码:sudo docker run -d --name 容器名 -p 6379:3679 redis

  1. 第二步使用docker下载nginx镜像 启动并挂载目录。 具体可以参考这篇文章详情http://t.csdn.cn/XSXHI

和运行redis一样先下载官方镜像然后需要挂载目录,挂载目录是方便后期更改页面和配置文件 具体可参考详情
代码:sudo docker run --name nginx -d -p 8000:80 --net=host -v 宿主机地址/data:/usr/share/nginx/html -v 宿主机地址/conf/nginx.conf:/etc/nginx/nginx.conf -v 宿主机地址/logs:/var/log/nginx -v 宿主机地址/conf.d:/etc/nginx/conf.d -d nginx#容器内的nginx配置文件及页面地址是固定的 官方提供的 所有nginx都一样

  1. 最后在nas中使用docker将本地jar打包成镜像并启动。 具体可以参考这篇文章详情http://t.csdn.cn/oEvM2

3.1 新建一个abc目录创建Dockerfile文件
FROM openjdk:8-jre #基于java8环境
MAINTAINER yang #作者信息 可省略
ADD xxx-admin.jar xxx-java.jar # xxx-admin.jar代表园项目的jsr , xxx-java.jar代表新名字
EXPOSE 8080
ENTRYPOINT ["java","-jar","xxx-java.jar"] #注意xxx-java.jar的名字要和第三步的新名字一致
3.2 将jar放到Dockerfile同级目录
在abc目录中只放入写好的Dockerfile和从项目中打包的jar文件
3.3执行生成镜像命令
sudo docker build -t xxx-java:1.2 . #注意“.”不可漏掉 :1.2是给镜像一个版本号可不写
3.4查看Docker镜像 刚刚生成的是否存在
sudo docker images
3.5 确定镜像生成成功后进行启动容器
sudo docker run -d --name pms-java -p 8080:8080 pms-java:1.2 #pms-java:1.2是咱们刚做好的镜像名
到这里jar的制作镜像和运行容器大功告成!

  1. 我在这里没有安装mysql,因为公司之前就已经搭建好了mysql.需要的同学可以去别的文章上

最后这里是我个人的总结:
每个容器只跑一个程序,每个容器都应该暴露端口,程序间互相通过IP加端口访问.

最后介绍一下我实战中常用到的Docker指令

常用指令代码.

#拷贝 宿主机到容器的文件拷贝
sudo docker cp /home/mynginx/nginx/conf/nginx.conf 2d0264f6614a:/etc/nginx/

#将容器提交为镜像 注意:挂载过的容器打包镜像不会将挂载内容一起打包,需要你自己将宿主机的文件拷贝到容器中然后进行打包镜像
sudo docker commit 容器ID pms-nginx:1.0

#将镜像保存出镜像文件 镜像名称 > 输出地址
sudo docker save pms-java:1.0 > /home/pms/pms-java.tar

#加载用save保存的镜像文件 
sudo docker load < /home/pms/pms-java.tar

#设置容器开机自启
sudo docker update --restart=always 容器ID

#运行nginx且挂载 前提要建好宿主机文件夹及文件
sudo docker run --name nginx -d -p 8000:80 --restart=always --privileged=true --net=host -v /volume1/中转站/pms前后端镜像/挂载目录/data:/usr/share/nginx/html -v  /volume1/中转站/pms前后端镜像/挂载目录/conf/nginx.conf:/etc/nginx/nginx.conf  -v  /volume1/中转站/pms前后端镜像/挂载目录/logs:/var/log/nginx -v  /volume1/中转站/pms前后端镜像/挂载目录/conf.d:/etc/nginx/conf.d -d nginx

#运行容器且自启
sudo docker run -d --restart=always --name pms-java -p 8001:8080  pms-java:1.2   #这个表示docker容器在停止或服务器开机之后会自动重新启动 --restart=always

#重命名镜像
sudo docker tag 容器ID 新名字

#重命名容器
sudo docker rename 容器ID 新名字

#使用Dockerfile打包镜像
sudo docker build -t pms-java:1.2 .

#已有容器设置开机自启
sudo docker update --restart=always nginx

收官!!!

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐