环境
- docker
- nginx容器
配置nginx代理
不知道nginx容器的基本创建,可以去看这篇博客: 小白学习nginx(一)--docker创建nginx容器
1、编辑default.conf,该文件被我映射到宿主机的/usr/local/docker/nginx/config/conf.d/default.conf
vi /usr/local/docker/nginx/config/conf.d/default.conf
内容如下:
#将/springboot-service请求转发给http://127.0.0.1:8081/springboot-service处理
# 这里的ip不能设置成127.0.0.1,因为这是在nginx容器里,那么127.0.0.1就是代表nginx容器的IP地址,
# 而要代理的项目是运行在宿主机上的,所以这里的ip地址应该是你的宿主机的IP
location /springboot-service {
proxy_pass http://ip:8888/springboot-service; #这里的端口记得改成项目对应的哦
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
}
2、修改springboot项目的application.yml文件,添加如下内容
servlet:
context-path: /springboot-service
检查nginx配置文件并重新运行
docker exec nginx nginx -t
docker exec nginx nginx -s reload
请求的接口需要加上反向代理的路径/springboot-service
,对应location /springboot-service
打包springboot项目
1、使用maven命令打包,编辑打包命令
然后将打包好的jar拷到服务器,我存放在了服务器的/tmp/test/docker-springboot目录下。
因为宿主机没有安装jdk,所以没有java程序的运行环境,而且,我希望能够容器化运行,所以要将springboot项目放到jdk容器中运行,jdk容器中包含jdk,即有java项目运行的环境。
2、在/tmp/test/docker-springboot目录下新建Dockerfile文件
cd /tmp/test/docker-springboot
vi Dockerfile
Dockerfile内容如下:
# 基础镜像
FROM openjdk:8-jdk-alpine
# 作者信息
MAINTAINER "**@qq.com"
# 添加一个存储空间
VOLUME /tmp
# 暴露8888端口,不写默认和项目的端口保持一致
# EXPOSE 8888
# 往容器中添加jar包
COPY app-1.0.jar app.jar
# 启动镜像自动运行程序,这里的/app.jar是上面拷贝到容器中的app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
3、打包springboot项目的镜像
// .代表当前目前
docker build -t springboot-app:1.0 .
4、查看镜像
docker images
可以看到已存在springboot-app这个镜像
5、创建容器
docker run -d --name springboo-app -p 8888:8888 springboot-app:1.0
docker ps
6、接口测试
打开浏览器输入:http://ip/springboot-service/user/index 可以看到通过反向代理部署成功
7、让项目一开机就运行
docker update --restart=always springboot-app
备注:# docker中OpenJDK验证码无法显示 java.lang.NullPointerException at sun.awt.FontConfiguration.getVersion,解决办法:Dockerfile中添加如下命令:
RUN apk add --update font-adobe-100dpi ttf-dejavu fontconfig