Docker deploy frpc

原本是想用openwrt上运行两个frpc,但是luci的app只能运行一个。于是谋生了使用docker来部署一个frpc的想法。方便管理。

准备

前置准备:
机器部署docker
创建目录:/data/frp/
准备frpc.ini文件,并放在/data/frp/目录下
在修改/data/frp/frpc.ini后,需要重启镜像,重新加载配置文件。连接状态使用docker logs查看

执行,完毕

docker pull snowdreamtech/frpc

docker run --restart=always --network host -d -v /data/frp/frpc.ini:/etc/frp/frpc.ini --name frpc_new snowdreamtech/frpc

走弯路

构建docker镜像

需要部署docker。新建一个目录tmp,并在目录下新建Dockerfile.

mkdir tmp
cd tmp
#一起复制执行
cat << EOF >Dockerfile
FROM golang:1.19
WORKDIR /frpc
RUN apt-get update && apt-get install -y unzip
RUN wget https://github.com/fatedier/frp/archive/refs/tags/v0.46.0.zip && unzip v0.46.0.zip && cd frp-0.46.0/ && make build && cp bin/* /frpc
ENTRYPOINT ["./frpc", "-c", "/mnt/frp/frpc.ini"]
EOF

Dockerfile解析:

FROM golang:1.19  #基础镜像是golang:1.19
WORKDIR /frpc    #指定工作目录
RUN apt-get update && apt-get install -y unzip  #运行命令:安装unzip
RUN wget https://github.com/fatedier/frp/archive/refs/tags/v0.46.0.zip && unzip v0.46.0.zip && cd frp-0.46.0/ && make build && cp bin/* /frpc   # 运行命令:wget下载frpc安装包,然后解压,然后make build构建二进制运行文件,然后把构建出来的frpc复制到工作目录
ENTRYPOINT ["./frpc", "-c", "/mnt/frp/frpc.ini"]  #指定容器启动的时候执行的命令:./frpc -c /mnt/frp/frpc.ini

构建docker镜像:

docker -t是tag,是构建docker镜像的标签。注意最后有一个点,代表的是读取当前目录下的Dockerfile

docker build -t frpc .

构建完成的镜像:

docker images 


[root@OpenWrt:10:24 AM /data/tmp] # docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
frpc          latest    7b04ef70a9b2   16 hours ago   1.36GB
golang        1.19      ee6a422e97e0   2 days ago     993MB

运行

运行镜像:

docker run --name frpc --net=host --restart=always -v /data/frp:/mnt/frp -d frpc
--name: 指定容器名字
--net: 容器使用宿主机网络
--restrat: 重启策略,always是总是重启
-v: 目录挂载,是把宿主机的/data/frp目录,挂载到容器的/mnt/frp目录。
-d: 指定使用的镜像,刚打镜像出来的frpc

其他命令:

#查看日志:
docker logs frpc

#重启容器
docker restart frpc

#停止容器
docker stop frpc

#删除容器
docker rm frpc

#查看所有运行容器:
docker ps 

#查看所有运行容器(包括非运行状态)
docker ps -a