上一篇,大概讲了下springoot项目部署在docker中,但是在做项目的过程中,还有可能会用到redis、项目可以依赖另外一个javaweb(需要部署在tomcat中)项目、在部署的时候可能会用到nginx。同样的,该文章也是记录一下我在研究过程中遇到的问题和解决办法。大佬们有好的建议欢迎评价!
关于redis、tomcat、nginx等的部署
docker部署redis
首先,我们需要下载redis镜像(该步骤可以参考菜鸟教程,毕竟得承认人家写的更全更细一点)
#下载
docker pull redis:3.2
#查看
docker images
然后我们在启动的时候可以修改配置文件,例如密码等等
#启动
docker run --name myredis -p 6379:6379 -d redis:3.2 redis-server --appendonly yes --requirepass "myPwd" --bind 0.0.0.0
#查看
docker ps
这样,我们的redis就算是部署好了,集群的话我还没研究,后续更新。。
docker部署tomcat
同样的,我们首先要下载tomcat镜像(该步骤也可以参考菜鸟教程,毕竟得承认人家写的更全更细一点)
#下载
docker pull tomcat
#查看
docker images
然后我发现一个很坑的地方,是关于网络模式的,也就是访问其他应用(例如数据库)的坑,解决办法是启动,然后停止,然后重启docker,就可以了,我倒现在也不知道是为什么。。希望有大佬可以给出解释
#启动,并设置网络模式为host
docker run --name mytomcat -d -p 8081:8080 --net=host docker.io/tomcat
#重启docker
service docker restart
#停止
docker stop mytomcat
#删除容器
docker rm mytomcat
#启动tomcat,将日志、webapps目录和时区映射在宿主机
docker run -it -d --name mytomcat \
-p 8080:8080 \
-v /docker/tomcat/logs:/usr/local/tomcat/logs \
-v /docker/tomcat/webapps:/usr/local/tomcat/webapps \
-v /docker/tomcat/conf:/usr/local/tomcat/conf \
-v /etc/localtime:/etc/localtime \
docker.io/tomcat
然后我们进入该容器,就可以ping的到外部的应用了
#进入tomcat容器内部
docker exec -it /bin/bash mytomcat
#ping外部应用,例如www.baidu.com
ping www.baidu.com
然后我们将war包放在/docker/tomcat/webapps目录中,重启即可,可以在/docker/tomcat/log目录中的日志文件中查看
#重启tomcat,可以在tomcat中查看启动日志
docker restart mytomcat
这样,我们的javaweb应用在tomcat中就算是部署好了
docker部署nginx
同样的,我们首先要下载nginx镜像(该步骤也可以参考菜鸟教程,毕竟得承认人家写的更全更细一点)
#下载
docker pull nginx
#查看
docker images
然后我们在服务器上创建我们自己的配置文件,修改配置文件启动即可
#启动nginx,将部署javaweb项目的tomcat容器和springboot项目容器link进来
docker run --name=mynginx \
--link=mytomcat:t1 \
--link=springboot:t2 \
-v /root/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /root/docker/nginx/conf/conf.d:/etc/nginx/conf.d \
-p 8888:80 -d nginx
这样,我们的nginx就算是部署好了
在nginx.conf中配置如下:
upstream java_web {
server t1:8080;
}
upstream spring_boot {
server t2:9001;
}
在default.conf中配置如下:
location /springboot_demo {
#用于多重转发时获取用户实际IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
#转发原始请求的host头部
proxy_set_header Host $http_host;
#转发用户实际发出的协议(http/https)
proxy_set_header X-Forwarded-Proto $scheme;
#禁用反向代理缓存,保证每次请求真实转发
proxy_buffering off;
#转发到upstream块定义的服务器集群
proxy_pass http://spring_boot;
#请求报文大小上限,默认1m,限制上传文件大小
client_max_body_size 1000m;
}
最后,在浏览器中访问 ip:8080/springboot_demo 就可以了,美滋滋,大功告成!
关于容器保存,移植至其他服务器启动的方式见下一篇文章