2025年7月

我们在创建基础容器之后,进入容器,进行编辑配置文件的时候,需要使用rpm,但是会出现:bash: rpm: command not found

解决
使用如下命令安装:

apt-get update
apt-get install rpm

在docker中运行第三方服务时,通常需要绑定服务端口到本地主机。但使用 -p 参数进行的端口映射,会自动在iptables中建立规则,绕过firewalld,这对于端口级的黑白名单控制管理是很不利的,所以我们需要对iptables进行手动修改。
iptables --list
发现在Chain DOCKER下多出了一条
删除DOCKER链中的1号规则;如果待删除规则不位于第一行,则将数字改为对应行号
iptables -D DOCKER 1

此容器只接受来自地址123.345.456.567的连接请求
iptables -A DOCKER -s 123.345.456.567 -d 172.17.0.2 -p tcp --sport 81 -j ACCEPT
再次进行端口扫描,发现27017端口已经关闭,只有IP为123.234.345.456的主机能够连接。

还有一种更简单的方式。因为docker绕过防火墙的原理是修改了iptables,那不让它修改即可,此方法无需切换默认防火墙。

vim /etc/default/docker
#修改文件,此处设置等同于在创建容器时手动指定iptables=false参数
DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4 -iptables=false"

vim /etc/docker/daemon.json
{
"iptables": false
}
#此处对更改设置之前创建的容器也有效,编辑后需重启docker服务

Nginx Proxy Manager 简介
This project comes as a pre-built docker image that enables you to easily forward to your websites running at home or otherwise, including free SSL, without having to know too much about Nginx or Letsencrypt.
该项目是一个预先构建的docker映像,使您能够轻松地转发到在家中或其他位置运行的网站,包括免费的SSL,而无需过多地了解Nginx或Letsencrypt。

Nginx Proxy Manager 官网
https://nginxproxymanager.com/

安装 Nginx Proxy Manager

  1. 安装 Docker-compose
    curl -L https://github.com/docker/compose/releases/download/v2.4.1/docker-compose-uname -s-uname -m -o /usr/local/bin/docker-compose
    chmod +x /usr/local/bin/docker-compose

国内机器可以使用 Github 反代,下方反代并非小俊所有,不保证其稳定性!
curl -L https://ghproxy.com/https://github.com/docker/compose/releases/download/v2.4.1/docker-compose-uname -s-uname -m -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

  1. 新建docker-compose.yml文件
    vi docker-compose.yml

然后输入以下配置内容

version: "3"
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      # These ports are in format <host-port>:<container-port>
      - '80:80' # Public HTTP Port
      - '443:443' # Public HTTPS Port
      - '81:81' # Admin Web Port
      # Add any other Stream port you want to expose
      # - '21:21' # FTP

    # Uncomment the next line if you uncomment anything in the section
    # environment:
      # Uncomment this if you want to change the location of 
      # the SQLite DB file within the container
      # DB_SQLITE_FILE: "/data/database.sqlite"

      # Uncomment this if IPv6 is not enabled on your host
      # DISABLE_IPV6: 'true'

    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

注意:docker-compose.yml 文件中 81 为暴露端口,如被占用,请自行更改替换,需要在腾讯云轻量应用服务器的后台防火墙开放相应端口!

  1. 启动容器
    输入以下命令后台启动容器

docker-compose up -d

输入以下命令确认所有容器都是up状态

docker-compose ps

至此,我们已经安装完成 Nginx Proxy Manager 啦!
浏览器访问您 ServerIP:81 即可访问!进入登录后即可享用 Nginx Proxy Manager 在线协作翻译平台啦!
Ps:需要在腾讯云轻量应用服务器的后台防火墙开放相应端口!默认需要开放 81 tcp 哦。

简单使用教程
默认账号密码:

Email: admin@example.com
Password: changeme
使用默认账号密码登录 Nginx Proxy Manager ,第一次登录会弹出编辑用户信息的窗口,你可以忽略,也可以进行修改。

然后紧接着会弹出修改密码的窗口,第一行输入旧密码,第二行第三行输入新密码,点击 Save 保存。
然后就可以正常使用啦!

配置反向代理
先把域名解析到服务器
进入 Nginx Proxy Manager ,点击 Hosts ,然后点击 Add Proxy Host

Domain Names:# 填写你想用在该程序的域名
Scheme:默认http # 一般不用改
Forward Hostname / IP:172.17.0.1 # 一般为 172.17.0.1 ,可能有所不一,请执行 ip addr 自行查找 docker0 网卡的内网IP!
Forward Port:40789 # 暴露端口
Websockets Support:开启!!!开启!!!开启!!!

然后我们可以为程序添加上SSL证书
Request a new SSL Certificate ,然后把 Force SSL 和 HTTP/2 Support 打开,修改一下 Email Address for Let’s Encrypt 的邮箱,然后 Save 即可。
你也可以不用 Let’s Encrypt 的证书,但这个程序记得部署SSL证书!

至此,我们已经部署完成 Plausible Analytics 了。浏览器访问你刚刚配置的域名即可访问啦,然后创建账号并初始化使用即可!

注意:

需要在服务器的后台防火墙开放相应端口!需要开放 80 tcp 、 443 tcp 与 81 tcp 哦,如果你不使用域名访问程序,则只需要开放 40789 tcp 。

更新apt索引

sudo apt-get update

安装Docker

sudo apt-get install docker.io

创建Docker网络

启动前端服务容器

配置反向代理

安装Nginx

sudo apt-get install nginx
接着,创建一个Nginx配置文件,例如/etc/nginx/sites-available/myproject,来配置反向代理:

server{
listen 80;
location /app1{
proxy_pass http://app1:80; #转发到app1容器
}
location /app2{
proxy_pass http://app2:80; #转发到app1容器
}
}

将配置文件链接到site-enabled目录并重启Nginx:

链接配置文件到sites-enabled

sudo ln -s /etc/nginx/site-available/myproject /etc/nginx/sites-enabled/

检查Nginx配置是否正确

sudo nginx -t

重启Nginx

sudo systemctl restart nginx

在某些情况下,我们可能希望让多个容器通过不同的ip地址或不同的主机名共享同一个服务。
例如,在微服务架构中,每个服务可以作为一个容器独立运行,但可能会有多个实例与同一个端口进行通信。

使用Docker网络共享服务
首先,我们创建一个Docker网络,允许多个容器共享服务。随后,我们可以运行多个容器并让它们彼此通讯。
创建docker网络
docker network create my_network
启动两个Nginx容器
docker run -d name nginx1 --network my_network nginx
docker run -d name nginx2 --network my_network nginx
测试网络可达性
docker exec -it nginx1 ping nginx2
验证服务可用性
之需使用curl命令
docker exec -it nginx1 curl http://nginx1
docker exec -it nginx2 curl http://nginx2

使用负载均衡器
另一种常见的方法是使用负载均衡器,例如Nginx或HAProxy,来分发流量到多个后端容器。
创建一个Nginx负载均衡器
我们可以创建一个新的Nginx容器,作为负载均衡器,监听在主机的8080端口,然后将流量分发到其他两个Nginx容器:

#nginx.conf
http{
upstream backend{
server nginx1:80;
server nginx2:80;
}
server{
listen 8080;
location /{
proxy_pass http://backend;
}
}
}

启动Nginx负载均衡器
将上面的配置文件保存为nginx.conf,并通过Dockerfile构建自己的Nginx负载均衡器:

#Dockerfile
FROM nginx
COPY nginx.conf /etc/nginx/nginx.conf

构建并运行负载均衡器:

docker build -t my-nginx-lb
docker run -d -name nginx-lb --network my_network -p 8080:8080 my-nginx-lb

测试负载均衡
http://localhost:8080实现负载均衡,验证流量是否能被成功转发到不同的Nginx实例。