docker部署frps

简介: docker部署frps

以容器的方式部署frps

准备工作

  • 准备目录
[root@k81 ~]# mkdir -p frps/frps-dockerfile 
  • 上官网下载frp的可执行文件
[root@k81 ~]# cd frps/frps-dockerfile
[root@k81 frps-dockerfile]# wget https://github.com/fatedier/frp/releases/download/v0.48.0/frp_0.48.0_linux_amd64.tar.gz
# 如果下载不下来也可以用这个链接  https://gh.con.sh/https://github.com/fatedier/frp/releases/download/v0.48.0/frp_0.48.0_linux_amd64.tar.gz 尝试 
  • 删除不需要的文件并重新打包
[root@k81 frps-dockerfile]# tar -xf frp_0.48.0_linux_amd64.tar.gz
[root@k81 frps-dockerfile]# cd frp_0.48.0_linux_amd64
[root@k81 frp_0.48.0_linux_amd64]# rm -f frpc*  # 因为是做frps的容器,frpc没用就给删掉了,如果做frpc的镜像可以删除frps*
[root@k81 frps-dockerfile]# cd ..
[root@k81 frps-dockerfile]# mv frp_0.48.0_linux_amd64 frps && tar czf frps.tgz frps # 重新打包  


构建镜像

  • 编写dockerfile
[root@k81 frps-dockerfile]# cat  > Dockerfile <<EOF
FROM alpine:latest
MAINTAINER xiaohu
ADD ./frps.tgz /  # 这里add的源文件一定要和上面的压缩包一致
WORKDIR /frps
CMD ["./frps", "-c", "./frps.ini"]
EOF  
  • build镜像
[root@k81 frps-dockerfile]# docker build -t frps_xiaohu:0.1
ERROR: "docker buildx build" requires exactly 1 argument.
See 'docker buildx build --help'.
Usage:  docker buildx build [OPTIONS] PATH | URL | -
Start a build
## 第一次build的时候报了一个error
## 因此修改了一下build的命令
[root@k81 frps-dockerfile]# docker buildx build -t frps_xiaohu:0.1 .
[+] Building 2.2s (8/8) FINISHED                                                                                                          
 => [internal] load build definition from Dockerfile                                                                                 0.0s
 => => transferring dockerfile: 142B                                                                                                 0.0s
 => [internal] load .dockerignore                                                                                                    0.0s
 => => transferring context: 2B                                                                                                      0.0s
 => [internal] load metadata for docker.io/library/alpine:latest                                                                     1.6s
 => [internal] load build context                                                                                                    0.1s
 => => transferring context: 5.82MB                                                                                                  0.1s
 => CACHED [1/3] FROM docker.io/library/alpine:latest@sha256:124c7d2707904eea7431fffe91522a01e5a861a624ee31d03372cc1d138a3126        0.0s
 => [2/3] ADD ./frps.tgz /                                                                                                           0.3s
 => [3/3] WORKDIR /frp                                                                                                               0.0s
 => exporting to image                                                                                                               0.1s
 => => exporting layers                                                                                                              0.1s
 => => writing image sha256:3f4e30f5ddf0527c23ecf39cfdee714247c5789e46b05571136a5f99f8392ae0                                         0.0s
 => => naming to docker.io/library/frps_xiaohu:0.1 
  • 检查镜像
[root@k81 frps-dockerfile]# docker images |egrep -i "size|^frps"
REPOSITORY                                            TAG                 IMAGE ID       CREATED          SIZE
frps_xiaohu                                           0.1                 7adc9914cd05   25 minutes ago   22.6MB
# 可以看到镜像size只有22.6MB,还是比较小巧的
[root@k81 frps-dockerfile]# docker history frps_xiaohu:0.1 
IMAGE          CREATED          CREATED BY                                      SIZE      COMMENT
7adc9914cd05   25 minutes ago   CMD ["./frps" "-c" "./frps.ini"]                0B        buildkit.dockerfile.v0
<missing>      25 minutes ago   WORKDIR /frps                                   0B        buildkit.dockerfile.v0
<missing>      29 minutes ago   ADD ./frps.tgz / # buildkit                     15.5MB    buildkit.dockerfile.v0
<missing>      29 minutes ago   MAINTAINER xiaohu                               0B        buildkit.dockerfile.v0
<missing>      3 weeks ago      /bin/sh -c #(nop)  CMD ["/bin/sh"]              0B        
<missing>      3 weeks ago      /bin/sh -c #(nop) ADD file:9a4f77dfaba7fd2aa…   7.05MB  


docker-compose跑起来

  • 准备frps.ini
[root@k81 frps]# cd /root/frps
[root@k81 frps]# cat > frps.ini <<EOF
[common]
bind_port = 6000
dashboard_addr = 0.0.0.0  # web页面的登录地址,0.0.0.0表示所有地址
dashboard_port = 6001  # web界面的端口
dashboard_user = xxx  # web的user
dashboard_pwd = xxx # web的密码
EOF
# 具体配置文件写法可以参考官方文档  

准备docker-compose.yaml  

[root@k81 frps]# cat > docker-compose.yaml  <<EOF
version: "3"
services:
  frps:
    image: frps_xiaohu:0.1
    container_name: My-frps
    restart: always
    ports:
    - "6000-6040:6000-6040"  # 这些端口后面可以用来做穿透
    volumes:
    - './frps.ini:/frps/frps.ini'
EOF 
  • 启动
[root@k81 frps]# docker-compose up -d 
Creating My-frps ... done
[root@i-9d1eq6no frps]# docker-compose top
My-frps
UID     PID    PPID    C   STIME   TTY     TIME             CMD         
------------------------------------------------------------------------
root   31619   31600   4   23:14   ?     00:00:00   ./frps -c ./frps.ini 


客户端运行frpc

如需要客户端也使用容器运行的话,可以参考服务端的容器构建


考虑到有些客户端没有跑容器,我这边就直接用二进制在客户端跑frpc了  


准备工作

  • 下载可执行文件
[root@c-2 ~]# wget https://github.com/fatedier/frp/releases/download/v0.48.0/frp_0.48.0_linux_amd64.tar.g
# 如果下载不下来也可以用这个链接  https://gh.con.sh/https://github.com/fatedier/frp/releases/download/v0.48.0/frp_0.48.0_linux_amd64.tar.gz 尝试
[root@c-2 ~]# tar -xf frp_0.48.0_linux_amd64.tar.gz -C /opt/
[root@c-2 ~]# cd /opt/
[root@c-2 opt]# mv frp_0.48.0_linux_amd64/ frpc && cd  frpc
[root@c-2 frpc]# rm -f frps*
[root@c-2 frpc]# ls 
  • 准备frpc.ini
[root@c-2 frpc]# cat > frpc.ini <<EOF
[common]
server_addr = xxx # frps的公网IP
server_port = 6000
[ssh_xgyt_c5]
type = tcp
local_port = 22
remote_port = 6003
EOF 


运行frpc

[root@c-2 frpc]# ./frpc -c ./frpc.ini
# 看看是否有错误,没错误的话就可以 CTRL C中断下一步了
[root@c-2 frpc]# cat > /etc/systemd/system/frpc.service <<EOF  # 编写一个service文件
[Unit]
Description=frpc
Wants=network-online.target
After=network-online.target
[Service]
ExecStart=/opt/frpc/frpc -c /opt/frpc/frpc.ini
ExecReload=/bin/kill -HUP $MAINPID
Restart=always
StartLimitInterval=0
[Install]
WantedBy=multi-user.target
EOF
[root@c-2 frpc]# systemctl daemon-reload && systemctl enable --now frpc  # 配置fprc开机自启
Created symlink from /etc/systemd/system/multi-user.target.wants/frpc.service to /etc/systemd/system/frpc.service.
[root@c-2 frpc]# systemctl status frpc
● frpc.service - frpc
   Loaded: loaded (/etc/systemd/system/frpc.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2023-04-22 23:55:02 CST; 7s ago  # active代表服务已经起来了
 Main PID: 2597 (frpc)
    Tasks: 6
   CGroup: /system.slice/frpc.service
           └─2597 /opt/frpc/frpc -c /opt/frpc/frpc.ini
Apr 22 23:55:02 c5 systemd[1]: Started frpc.
Apr 22 23:55:02 c5 frpc[2597]: 2023/04/22 23:55:02 [I] [service.go:299] [9fd0677df9f333fd]... [0]
Apr 22 23:55:02 c5 frpc[2597]: 2023/04/22 23:55:02 [I] [proxy_manager.go:142] [9fd0677df9f..._c5]
Apr 22 23:55:02 c5 frpc[2597]: 2023/04/22 23:55:02 [I] [control.go:172] [9fd0677df9f333fd]...cess  复制成功,转载请保留本站链接: www.chenjiao.cloud

注:

在systemd的Service文件中,Restart=可以有以下几种值可选:
no:表示不自动重启服务。
on-success:表示只有在服务正常退出(退出状态码为0)时才会自动重启服务。
on-failure:表示只有在服务异常退出(退出状态码非0)时才会自动重启服务。
on-abnormal:表示只有在服务因信号而异常退出时才会自动重启服务。
on-abort:表示只有在服务因收到SIGABRT信号而退出时才会自动重启服务。
on-watchdog:表示只有在服务因超时未响应而退出时才会自动重启服务。
always:表示无论服务退出状态码为何,都会自动重启服务。
如果想要在服务异常退出时自动重启服务,可以设置Restart=on-failure,这里是直接设置了Restart=always  复制成功,转载请保留本站链接: www.chenjiao.cloud


检查成功与否

登录frps的web管理界面,管理界面配置在frps.ini中有声明

image-gdxp.png

目录
相关文章
|
5天前
|
消息中间件 监控 RocketMQ
Docker部署RocketMQ5.2.0集群
本文详细介绍了如何使用Docker和Docker Compose部署RocketMQ 5.2.0集群。通过创建配置文件、启动集群和验证容器状态,您可以快速搭建起一个RocketMQ集群环境。希望本文能够帮助您更好地理解和应用RocketMQ,提高消息中间件的部署和管理效率。
149 91
|
6天前
|
存储 NoSQL Redis
Docker 部署 Redis
在使用 Docker 部署 Redis 时,为实现数据持久化,需正确挂载容器内的数据目录到宿主机。推荐命令如下: ``` docker run -d --name redis -v /mnt/data/redis:/data -p 6379:6379 redis ``` 该命令将宿主机的 `/mnt/data/redis` 目录挂载到容器的 `/data` 目录,确保 Redis 数据持久化。此路径更通用,适合大多数场景。避免使用不匹配的挂载路径,如 `/var/lib/redis` 或 `/mnt/data/redis` 到非默认目录,以防止数据无法正确持久化。
|
13天前
|
JavaScript 前端开发 Docker
如何通过pm2以cluster模式多进程部署next.js(包括docker下的部署)
通过这些步骤,可以确保您的Next.js应用在多核服务器上高效运行,并且在Docker环境中实现高效的容器化管理。
72 44
|
21天前
|
存储 关系型数据库 MySQL
美团面试:MySQL为什么 不用 Docker部署?
45岁老架构师尼恩在读者交流群中分享了关于“MySQL为什么不推荐使用Docker部署”的深入分析。通过系统化的梳理,尼恩帮助读者理解为何大型MySQL数据库通常不使用Docker部署,主要涉及性能、管理复杂度和稳定性等方面的考量。文章详细解释了有状态容器的特点、Docker的资源隔离问题以及磁盘IO性能损耗,并提供了小型MySQL使用Docker的最佳实践。此外,尼恩还介绍了Share Nothing架构的优势及其应用场景,强调了配置管理和数据持久化的挑战。最后,尼恩建议读者参考《尼恩Java面试宝典PDF》以提升技术能力,更好地应对面试中的难题。
|
24天前
|
SQL Java Maven
docker部署apollo
docker部署apollo步骤
|
1月前
|
监控 Java 应用服务中间件
tomcat相关概念与部署tomcat多实例-zabbix监控(docker部署)
通过上述步骤,您可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使您能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
58 23
|
1月前
|
监控 Java 应用服务中间件
tomcat相关概念与部署tomcat多实例-zabbix监控(docker部署)
通过上述步骤,您可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使您能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
49 22
|
1月前
|
监控 Java 应用服务中间件
tomcat相关概念与部署tomcat多实例-zabbix监控(docker部署)
通过上述步骤,您可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使您能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
66 25
|
1月前
|
SQL 关系型数据库 MySQL
docker-compose部署mysql8
使用docker-compose容器化部署mysql8
|
2月前
|
Ubuntu Linux 开发工具
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖项打包成标准化单元(容器),确保在任何支持 Docker 的操作系统上一致运行。容器共享主机内核,提供轻量级、高效的执行环境。本文介绍如何在 Ubuntu 上安装 Docker,并通过简单步骤验证安装成功。后续文章将探讨使用 Docker 部署开源项目。优雅草央千澈 源、安装 Docker 包、验证安装 - 适用场景:开发、测试、生产环境 通过以上步骤,您可以在 Ubuntu 系统上成功安装并运行 Docker,为后续的应用部署打下基础。
96 8
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈