引言
最近准备新开几个项目,但是考虑到服务的成本问题,原本的轻量级服务器恐怕难以委以重任,于是便去捣鼓了frp的内网穿透,最后选择的方案是准备在轻量级的服务器上通过部署frp来实现本地项目的公网访问,因为本人的E5神机作为工作站使用还是绰绰有余,所以拿来部署项目也没有太大压力。在选择这个方案进行服务端和客户端测试的时候,发现frp也是基于端口的映射(觉得配置麻烦可以选择现成的内网穿透工具,一个月10块钱左右就可以拿到一个公共域名),不过因为已经有一个服务器了,就不想着再增加成本,考虑到以后会部署多个项目,每个都单独去买端口映射有点肉疼的,所以还是打算自己来部署。有兴趣的也可以去看看内网穿透和隧道打洞的相关服务,但是需要注意保护好自己的信息安全,毕竟打洞暴露端口还是有点风险的。好了回到正题,在部署客户端的时候,因为我用的都是docker的拉取frp,所以客户端连接也是用docker部署,因为不想一直在idea中启动项目,所以最后也是把项目打包成镜像一起放到docker中,然后做一个端口映射来实现部署服务,今天主要来分享如何部署到docker中的内容。
一、前置准备
- JDK 8+(用于编译 Java 项目)
- Maven 或 Gradle(构建工具)
- Docker Desktop(Windows/Mac)或 Docker Engine(Linux)
- 项目已能本地运行:
java -jar your-app.jar
windows上的docker安装可以参考网上的,注意区分自己系统的版本,家庭版是不支持开启虚拟化的
二、编写 Dockerfile
在项目根目录创建一个名为 Dockerfile 的文件(无后缀),内容如下:
# 基础镜像 openjdk:8-jre-slim
FROM openjdk:8-jre-slim
# 维护者信息(可选)
LABEL maintainer="your-name@example.com"
# 配置
ENV PARAMS=""
# 时区
ENV TZ=PRC
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 添加应用
ADD target/frp-test-app.jar /frp-test-app.jar
## 在镜像运行为容器后执行的命令
ENTRYPOINT ["sh","-c","java -jar $JAVA_OPTS /frp-test-app.jar $PARAMS"]
三、构建docker镜像
在当前根目录下执行命令,该命令会基于当前目录的 Dockerfile 构建一个名为 test/frp-test-app:1.0 的 Docker 镜像。
docker build -t test/frp-test-app:1.0 -f ./Dockerfile .
随后只要把该镜像启动即可
当然可以直接在命令行启动,这里为了后续方便管理和维护,在idea项目中建立一个 docker-compose.yml文件,内容如下:
version: '3.8'
# 命令执行 docker-compose -f docker-compose-app.yml up -d
services:
frp-test-app:
image: test/frp-test-app:1.0
container_name: frp-test-app
restart: always
ports:
- "8080:8080"
在idea中配置相关的docker操作即可运行该文件,随后就可以从docker desktop中看到自己的镜像启动,也可以看到日志记录,后续会继续捣鼓如何把镜像上传。