在某些情况下,我们可能希望让多个容器通过不同的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实例。

本地化是指不同地区用户在键盘上输入不同语言的字符集。例如 en_US 表示美国英语字符集,因此只有正确设置了服务器的字符集,服务器才能理解用户的输入字符。setlocale 命令可以帮助用户来设置本地化字符集。

出现以上问题是因为服务器无法理解 en_US.UTF-8 字符集,首先,我们需要检查系统上是否已经安装了所需的locale。可以通过以下命令查看已安装的locale:
locale -a
确保在输出中能够找到 "en_US.UTF-8",如果没有,我们需要在服务器上生成 en_US.UTF-8 字符集:
sudo locale-gen en_US.UTF-8
然后使用最新生成的字符集更新本地仓库:
sudo dpkg-reconfigure locales
最后更新 /etc/default/locale 文件,例如更新前的文件内容为:
LANG=C.UTF-8
更新后:
lC_ALL=en_US.UTF-8
LANG=en_US.UTF-8

环境变量 LC_ALL 会覆写所有的本地化设置(在某些情况下 $LANGUAGE 不会被覆写),例如 LC_NAME, LC_ADDRESS 等等。设置 LC_ALL=en_US.UTF-8 表示所有的本地化设置都使用 en_US.UTF-8。

重新登录服务器,warning 警告不再出现,问题解决

如果是容器,也是需要重启容器才能生效

Plausible Community Edition 是一个开源的网站分析工具,它的目录结构如下:
plausible-ce/
├── clickhouse/
│ └── ... # ClickHouse 数据库相关文件
├── .gitignore
├── LICENSE
├── README.md
├── compose.yml
└── .env

目录和文件说明:
clickhouse/:包含 ClickHouse 数据库的相关文件。
.gitignore:指定 Git 忽略的文件和目录。
LICENSE:项目使用的 MIT 许可证文件。
README.md:项目的自述文件,包含项目介绍和使用说明。
compose.yml:Docker Compose 文件,用于定义和运行多容器 Docker 应用。
.env:环境变量配置文件。

  1. 项目的启动文件介绍
    项目的启动主要通过 docker-compose 来完成。以下是启动项目的基本步骤:

1.克隆项目仓库到本地:

git clone -b v2.1.5 --single-branch https://github.com/plausible/community-edition plausible-ce

2.进入项目目录:
cd plausible-ce

3.创建和配置环境变量文件 .env:
touch .env
echo "BASE_URL=https://plausible.example.com" >> .env
echo "SECRET_KEY_BASE=$(openssl rand -base64 48)" >> .env

确保 BASE_URL 设置为你计划托管服务的实际域名。域名必须有一个指向你的服务器的 DNS 记录,以便正确解析和自动颁发 Let's Encrypt TLS 证书。

4.暴露 Plausible 服务器到网络,创建一个 compose.override.yml 文件:

echo "HTTP_PORT=80" >> .env
echo "HTTPS_PORT=443" >> .env
cat > compose.override.yml << EOF
services:
  plausible:
    ports:
      - 80:80
      - 443:443
EOF

设置 HTTP_PORT=80 和 HTTPS_PORT=443 可以启用自动 Let's Encrypt TLS 证书颁发。如果你打算在反向代理后面运行 Plausible,你可能需要选择不同的值。

5、使用 Docker Compose 启动服务:
docker compose up -d

6、访问你的实例 BASE_URL 并创建第一个用户。

简介
Plausible is intuitive, lightweight and open source web analytics. No cookies and fully compliant with GDPR, CCPA and PECR.
Simple, open source, lightweight (< 1 KB) and privacy-friendly web analytics alternative to Google Analytics.

部署 Plausible Analytics(Docker Compose 方式)
前提条件
Docker 和 Docker Compose: 确保已安装。
服务器或 VPS: 建议至少 1GB 内存。
域名: 可选,但建议使用以便配置 HTTPS。
步骤
1.创建目录并下载配置文件
mkdir plausible
cd plausible
下载 docker-compose.yml 文件:
wget https://plausible.io/docs/docker-compose.yml -O docker-compose.yml

2.配置 docker-compose.yml 文件

version: "3.9"
services:
  plausible_db:
    image: postgres:13-alpine
    restart: always
    volumes:
      - plausible_db:/var/lib/postgresql/data
    environment:
      POSTGRES_PASSWORD: your_postgres_password # 更改为您自己的密码

  plausible_events_db:
    image: clickhouse/clickhouse-server:21.3
    restart: always
    ulimit:
      nofile: 262144
    volumes:
      - plausible_events_db:/var/lib/clickhouse

  plausible:
    image: plausible/analytics:latest
    restart: always
    depends_on:
      - plausible_db
      - plausible_events_db
    ports:
      - "8000:8000" # 可以根据需要更改端口
    environment:
      ADMIN_USER_EMAIL: your_email@example.com # 更改为您自己的邮箱
      ADMIN_USER_PASSWORD: your_password # 更改为您自己的密码
      BASE_URL: https://your_domain.com # 更改为您自己的域名
      DISABLE_REGISTRATION: false # 如果您想禁止注册,设置为 true

volumes:
  plausible_db:
  plausible_events_db:

注意: 请更改上述注释中提示的密码、邮箱和域名为您自己的。

3.启动 Plausible Analytics
docker-compose up -d

4.配置反向代理(可选)

使用 Nginx 或 Caddy 配置反向代理,以便使用 HTTPS 访问 Plausible Analytics。

Nginx 配置示例:

server {
    listen 80;
    server_name your_domain.com; # 更改为您自己的域名
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name your_domain.com; # 更改为您自己的域名

    ssl_certificate /path/to/your/ssl_certificate.pem; # 更改为您的 SSL 证书路径
    ssl_certificate_key /path/to/your/ssl_certificate_key.pem; # 更改为您的 SSL 证书密钥路径

    location / {
        proxy_pass http://localhost:8000; # 确保端口与 docker-compose.yml 中设置的端口一致
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Caddy 配置示例:

your_domain.com { # 更改为您自己的域名
    reverse_proxy localhost:8000 # 确保端口与 docker-compose.yml 中设置的端口一致
}

5.访问 Plausible Analytics
在浏览器中输入您的域名(或服务器 IP 地址),即可访问 Plausible Analytics 的管理界面。使用您在 docker-compose.yml 文件中设置的管理员邮箱和密码登录。

6.将 Plausible Analytics 嵌入到您的网站
登录后,按照 Plausible Analytics 的指引,将 JavaScript 代码添加到您想要跟踪的网站的 `` 标签中。

<script defer data-domain="your_domain.com" src="https://your_domain.com/js/plausible.js"></script>

注意: 将 your_domain.com 替换为您的域名。

完成以上步骤后,Plausible Analytics 应该就可以正常工作了。

其他说明:

如果您需要更详细的配置说明,可以参考 Plausible Analytics 的官方文档:plausible.io/docs
如果您在使用过程中遇到问题,可以参考 Plausible Analytics 的 GitHub 仓库:github.com/plausible/a…

启动docker服务
systemctl start docker

查看Docker状态
systemctl status docker

设置Docker开机自启
systemctl enable docker

禁用Docker开机自启
systemctl disable docker

重新启动Docker服务
systemctl restart docker

查看Docker信息
docker info

停止docker服务
systemctl stop docker

加载已有的镜像到Docker中:
docker load < xxx.tar # xxx.tar表示镜像文件

查看Docker内的镜像列表
docker images

查看容器列表

格式

docker ps [参数]
docker ps # 查看当前系统中正在运行的容器列表

参数

-a : 查看系统中所有的容器。
-q : 仅显示容器的ID

创建容器

格式

docker run [参数] [镜像名称] [运行容器的启动命令]

参数

-d : 以守护进程的方式运行一个容器
    docker run -d [镜像名称] [cmd]
--name : 指定容器的名称
    docker run -d --name [容器名称] [镜像的名称] [cmd]
-p : 指定端口映射
    docker run -d -p 宿主主机端口:容器内端口 [镜像名称] [cmd]
-P :随机端口映射
    docker run -d -P [镜像名称] [cmd]
-i : 打开标准输出
-t : 创建一个伪终端
    docker run -it [镜像名称] [cmd]
-v : 挂载目录到容器中
    docker run -v 宿主主机目录:容器内目录  [镜像名称] [cmd]
--rm : 容器生命周期结束时立即删除
    docker run --rm [镜像名称] [cmd]
-e : 在容器中创建一个环境变量
    docker run -e NAME=Centos -d [镜像名称] [cmd]
--link : 连接上一个容器,实现网络互通
    docker run --link 被连接的容器的名称:连接别名 [镜像名称] [cmd]
-h : 设置容器主机名
    docker run -h "主机名"  [镜像名称] [cmd]

docker run 运行流程
1、检查本地是否用指定镜像,如果没有则去对应的仓库下载镜像
2、启动容器,如果指定了命令则使用指定的命令,如果没有则使用默认的命令
3、返回容器ID

进入容器
容器启动后,需要进入容器做相关的操作,这个时候就需要进入到容器内部。

容器ID可以通过查看容器列表获得
docker attach [容器ID] # 个人最常用
docker exec -it [容器ID] /bin/bash # 这种方式也是可以的

删除镜像和容器
删除镜像
docker rmi [镜像ID] # 如果镜像有关联容器,将执行失败
docker rmi -f [镜像ID] # 强制删除镜像,同时删除关联的容器

删除容器
docker rm [容器ID] # 删除容器,如果容器在运行貌似也是删不掉的
docker rm -f [容器ID] # 强制删除

不进入容器情况下在容器内执行命令
docker exec -d [容器名称] /bin/bash -c [需要执行的命令] -g "daemon off;"

示例:
docker exec -d my_container_name /bin/bash -c "nohup java -jar /home/my/xxx.jar > /home/my/log/xxx.log 2>&1 &" -g "daemon off;"