Docker部署SpringBoot+redis+nginx项目完整 还有docker不可以一个容器跑多个程序
最近公司要求在NAS上部署一个前后端分离的SpringBoot+redis+nginx项目,同时要求使用Docker来进行部署。首先领导的想法是用一个容器跑SpringBoot+redis+nginx
,接下来我只能是疯狂找资料。最后确定Docker好像每个容器只跑一个程序
,即使是有办法能做到运行多个程序(听说是可以但是我没找到办法)也不方便后期线上维护,违背了使用docker的初衷。
最后我们选择了正常部署。
整体部署步骤
- 首先解决redis的部署 使用docker下载官方镜像 并启动。
很简单因为项目是公司内网使用,redis不需要设置密码直接使用即可,所以直接使用官方镜像 无需多于配置
代码:sudo docker run -d --name 容器名 -p 6379:3679 redis
- 第二步使用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都一样
- 最后在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的制作镜像和运行容器大功告成!
- 我在这里没有安装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
收官!!!