修改Docker文档目录层级,更新Docker脚本,更新Docker文档
All checks were successful
continuous-integration/drone Build is passing

This commit is contained in:
2025-11-06 23:06:28 +08:00
parent 05791351c3
commit 103ee74cab
36 changed files with 1731 additions and 133 deletions

View File

@@ -0,0 +1,56 @@
> 本文作者:丁辉
# Docker部署Bitnami-Mysql主从
1. 创建持久化目录
```bash
mkdir -p /opt/mysql/data
chmod 777 /opt/mysql/data
```
2. 部署 Master 容器
```bash
docker run --name mysql-master --restart=always \
-p 3306:3306 \
-v /opt/mysql/data:/bitnami/mysql/data \
-e MYSQL_ROOT_PASSWORD=root \
-e MYSQL_REPLICATION_MODE=master \
-e MYSQL_REPLICATION_USER=slave \
-e MYSQL_REPLICATION_PASSWORD=slave_password \
-e MYSQL_AUTHENTICATION_PLUGIN=mysql_native_password \
-d bitnami/mysql:latest
```
3. 部署 Slave 容器
```bash
docker run --name mysql-slave --restart=always \
-p 3306:3306 \
-v /opt/mysql/data:/bitnami/mysql/data \
-e MYSQL_MASTER_HOST=<MYSQL_MASTER_HOST> \
-e MYSQL_MASTER_ROOT_PASSWORD=root \
-e MYSQL_MASTER_PORT_NUMBER=3306 \
-e MYSQL_REPLICATION_MODE=slave \
-e MYSQL_REPLICATION_USER=slave \
-e MYSQL_REPLICATION_PASSWORD=slave_password \
-e MYSQL_AUTHENTICATION_PLUGIN=mysql_native_password \
-d bitnami/mysql:latest
```
4. 进入 Slave 容器
```bash
docker exec -it mysql-slave bash
mysql -u root -proot
```
5. 查看同步状态
```bash
show slave status\G;
```
> 切记请勿在主使用清空 GTID 信息命令,会使主从状态失效

View File

@@ -0,0 +1,39 @@
> 本文作者:丁辉
# Docker部署Caddy
[官网](https://caddyserver.com/)
1. 启动 Caddy 容器
```bash
docker run -itd \
--restart always \
-p 80:80 \
-v /data/caddy:/etc/caddy/ \
--name=caddy \
caddy:latest
```
2. 进入容器修改配置文件
```bash
vi /data/caddy/Caddyfile
```
内容如下
```bash
:80 {
root * /etc/caddy/www
file_server
}
```
3. 重启容器
```bash
docker restart caddy
```
4. 访问 IP:80

View File

@@ -0,0 +1,82 @@
> 本文作者:丁辉
# Docker部署Fio磁盘读写测试
[官方文档](https://fio.readthedocs.io/en/latest/fio_doc.html)
1. 拉取测试工具镜像
```bash
docker pull registry.cn-hangzhou.aliyuncs.com/offends/fio:latest
```
2. 启动并进入容器
> 为了更好的测试磁盘读写速率我们挂载 /data 目录进行测试
```bash
docker run --name disktest \
-it --rm -v /data/disk_test:/data/disk_test \
registry.cn-hangzhou.aliyuncs.com/offends/fio:latest \
sh
```
3. 开始测试
- 随机写
```bash
fio --ioengine=libaio --runtime=300 --numjobs=2 --iodepth=64 --bs=4k --size=2G --rw=randwrite --filename=/data/disk_test --time_based=1 --direct=1 --name=test --group_reporting --cpus_allowed=3 --cpus_allowed_policy=split
```
- 顺序写
```bash
fio --ioengine=libaio -runtime=300 --numjobs=2 --iodepth=64 --bs=1024k --size=10G --rw=write --filename=/data/disk_test --time_based=1 --direct=1 --name=test --group_reporting --cpus_allowed=3 --cpus_allowed_policy=split
```
4. 查看结果
> 随机写看IOPS
>
> 顺序写看吞吐量BW
# 命令参数
| 参数 | 描述 |
| -------------------- | ------------------------------------------------------------ |
| --debug=options | 启用调试日志记录可以选择启用不同类型的调试信息比如进程、文件、IO等等。 |
| --parse-only | 仅解析选项不执行任何IO操作。 |
| --output | 将输出写入文件。 |
| --bandwidth-log | 生成带宽日志。 |
| --minimal | 生成最小化(简洁)的输出。 |
| --output-format=type | 指定输出格式可以是简洁、JSON等。 |
| --terse-version=type | 设置简洁版本输出格式。 |
| --version | 打印版本信息并退出。 |
| --help | 打印帮助信息。 |
| --cpuclock-test | 执行CPU时钟的测试/验证。 |
| --crctest=[type] | 测试校验和功能的速度。 |
| --cmdhelp=cmd | 打印命令帮助,使用"all"可以查看所有命令。 |
| --enghelp=engine | 打印IO引擎的帮助信息或者列出可用的IO引擎。 |
| --enghelp=engine,cmd | 打印特定IO引擎命令的帮助信息。 |
| --showcmd | 将作业文件转换为命令行选项。 |
| --eta=when | 指定何时打印ETA预计完成时间估计值。 |
| --eta-newline=time | 每个 'time' 时间段强制换行显示ETA。 |
| --status-interval=t | 每个 't' 时间段强制完整状态转储。 |
| --readonly | 打开安全只读检查,防止写入。 |
| --section=name | 只运行作业文件中指定的部分,可以指定多个部分。 |
| --alloc-size=kb | 将smalloc池的大小设置为指定的kb数默认为16384。 |
| --warnings-fatal | Fio解析器警告变为致命错误。 |
| --max-jobs=nr | 支持的最大线程/进程数。 |
| --server=args | 启动后端fio服务器。 |
| --daemonize=pidfile | 后台运行fio服务器将PID写入文件。 |
| --client=hostname | 与远程后端fio服务器通信。 |
| --remote-config=file | 告诉fio服务器加载本地作业文件。 |
| --idle-prof=option | 报告系统或每CPU基础的CPU空闲情况或运行单位工作校准。 |
| --inflate-log=log | 解压缩并输出压缩日志。 |
| --trigger-file=file | 当文件存在时执行触发命令。 |
| --trigger-timeout=t | 在指定的时间执行触发器。 |
| --trigger=cmd | 将此命令设置为本地触发器。 |
| --trigger-remote=cmd | 将此命令设置为远程触发器。 |
| --aux-path=path | 使用此路径作为fio生成文件的路径。 |

View File

@@ -0,0 +1,169 @@
> 本文作者:丁辉
# Docker部署Gitlab
[企业版官网网址](https://docs.gitlab.com/ee/install/docker.html)
> 部署开源版
>
> 例:本地 IP 为 192.168.1.10
## 部署Gitlab
1. 启动容器
> 这里也可以通过 `--hostname 192.168.1.10` 指定 Clone 地址Gitlab会通过读取本地主机名作为默认的 Clone 地址
```bash
docker run -itd \
--restart always \
-p 80:80 \
-p 222:22 \
-u root \
-v $PWD/data/log:/var/log/gitlab \
-v $PWD/data/opt:/var/opt/gitlab \
-v $PWD/data/etc:/etc/gitlab \
--privileged=true \
--name=gitlab \
gitlab/gitlab-ce:latest
```
2. 进入容器查看 root 初始密码
```bash
docker exec -it gitlab bash
```
```bash
cat /etc/gitlab/initial_root_password
```
> 访问 192.168.1.10:80
3. 修改 SSH Clone 地址(进入容器内执行)
```bash
cp /etc/gitlab/gitlab.rb /etc/gitlab/gitlab.rb.bak
vi /etc/gitlab/gitlab.rb
```
写入如下内容
```bash
external_url "http://192.168.1.10:80" #http对外clone地址
gitlab_rails["gitlab_ssh_host"] = "192.168.1.10" #ssh对外clone地址
gitlab_rails["gitlab_shell_ssh_port"] = 222 #ssh对外clone端口
```
4. 重启服务
```bash
gitlab-ctl reconfigure
```
## 安装Gitlab-runner
1. 启动容器
```bash
docker run -itd --name gitlab-runner \
--restart always \
--privileged=true \
-v $PWD/data/gitlab-runner-config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/local/bin/docker:/usr/bin/docker \
gitlab/gitlab-runner:latest
```
2. 创建 Runner 实例获取 Token
点击Admin Area(管理员设置) > 点击CI/CD > 点击Runners > 点击New project runner > 选择Linux > 填写一个Tags > 点击Create runner
3. 进入容器
```bash
docker exec -it gitlab-runner bash
```
4. 开始注册 Runner
```bash
gitlab-ci-multi-runner register
```
过程如下
```bash
Runtime platform arch=amd64 os=linux pid=106 revision=6e766faf version=16.4.0
Running in system-mode.
Enter the GitLab instance URL (for example, https://gitlab.com/):
http://192.168.1.10 #Gitlab地址
Enter the registration token:
******** #刚刚获取到的Token
Verifying runner... is valid runner=Te1gEas2d
Enter a name for the runner. This is stored only in the local config.toml file:
[f94c7a9b1272]: test #名称
Enter an executor: docker+machine, instance, kubernetes, docker-windows, shell, virtualbox, docker-autoscaler, custom, docker, parallels, ssh:
shell #输入一个执行器
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
Configuration (with the authentication token) was saved in "/etc/gitlab-runner/config.toml"
```
5. 开始测试
在测试仓库内创建 `.gitlab-ci.yml` 文件编写内容
```yml
stages:
- test
build-test:
stage: test
tags:
- test
script:
- echo "Hello world"
```
6. 查看结果
进入测试仓库 > 点击Build > 点击Pipelines > 查看到 `passed` 即为成功可点击进去查看
## 忘记密码
1. 进入容器
```bash
docker exec -it gitlab /bin/bash
```
2. 进⼊控制台(需要等待一段时间)
```bash
gitlab-rails console -e production
```
3. 查询root⽤户
```bash
user=User.where(id:1).first
```
4. 设置密码
```bash
user.password='password'
```
5. 保存退出
```bash
user.save!
exit
```

View File

@@ -0,0 +1,31 @@
> 本文作者:丁辉
# Docker部署JumpServer
[官网](https://docs.jumpserver.org/zh/master/install/setup_by_fast/) [JumpServer安装包](https://github.com/jumpserver/installer/releases)
1. 部署 Mysql 数据库
```bash
docker run -itd --name jump-mysql \
--restart=always -p 3306:3306 \
-v /usr/local/jumpserver/data:/var/lib/mysql \
-v /usr/local/jumpserver/logs:/var/log/mysql \
-v /usr/local/jumpserver/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=jumpserver \
-e MYSQL_DATABASE=jumpserver \
mysql:5.7
```
2. 解压 JumpServer 安装包
```bash
tar -xf jumpserver-installer-v*.tar.gz
cd jumpserver-installer-v*
```
3. 修改 `config-example.txt` 文件配置参数, 并启动
```bash
./jmsctl.sh install
```

View File

@@ -0,0 +1,23 @@
> 本文作者:丁辉
# Docker部署LobeChat
[Github](https://github.com/lobehub/lobe-chat) [官方文档](https://lobehub.com/zh/features) [官方部署文档](https://lobehub.com/zh/docs/self-hosting/platform/docker)
[OpenAi-Api-keys页面](https://platform.openai.com/api-keys)
```
docker run -d -p 3210:3210 \
-e OPENAI_API_KEY=sk-xxxx \
-e ACCESS_CODE=lobe66 \
--name lobe-chat \
lobehub/lobe-chat
```
**参数解释**
- `OPENAI_API_KEY`:这是用于访问 OpenAI 服务的 API 密钥。这个密钥用于验证请求的身份,并确保请求是由授权用户发起的。
- `OPENAI_PROXY_URL`:这是一个代理服务器的 URL用于将请求重定向到指定的地址。这可以用于在请求 OpenAI API 时绕过直接访问限制,或者用于增加安全性。
- `ACCESS_CODE`:这是一个访问代码,可能用于程序内部的身份验证或控制访问某些功能。

View File

@@ -0,0 +1,58 @@
> 本文作者:丁辉
# Docker部署Nacos
[官网文档](https://nacos.io/zh-cn/docs/v2/guide/user/auth.html)
1. 启动 MYSQL
```bash
docker run --name nacos-mysql --restart=always \
-p 3306:3306 \
-v /data/mysql:/var/lib/mysql \
-e MYSQL_USER=nacos \
-e MYSQL_PASSWORD=nacos \
-e MYSQL_DATABASE=nacos \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:latest
```
2. 启动 NACOS
```bash
docker run --name nacos --restart=always \
-p 8848:8848 \
-e MYSQL_SERVICE_HOST=${MYSQL_HOST} \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=nacos \
-e MYSQL_SERVICE_PASSWORD=nacos \
-e MYSQL_SERVICE_DB_NAME=nacos \
-e MODE=standalone \
-e PREFER_HOST_MODE=hostname \
-d mysql:latest
```
3. 开启登录
```bash
vi /data/nacos/application.properties
```
内容如下
```bash
# vi /data/nacos/application.properties
nacos.core.auth.enabled=true
nacos.core.auth.server.identity.key=nacos
nacos.core.auth.server.identity.value=nacos
nacos.core.auth.plugin.nacos.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789
```
4. 访问http://localhost:8848/nacos/#/login
> 启动挂载配置文件
>
> ```bash
> -e /data/nacos/application.properties:/home/nacos/conf/application.properties
> ```

View File

@@ -0,0 +1,57 @@
> 本文作者:丁辉
>
# Docker部署Nginx使用配置文件读取变量
## 方法一使用 Envsubst 渲染替换环境变量
1. 编辑 Dockerfile
```dockerfile
FROM nginx:alpine-slim
COPY ./nginx.conf.template /etc/nginx/conf.d/nginx.conf.template
ENV PROXY_SERVER=default
CMD /bin/sh -c "envsubst '\$PROXY_SERVER \$SERVER_NAME' < /etc/nginx/conf.d/nginx.conf.template > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'"
```
2. 编辑 nginx.conf.template 文件
```bash
vi nginx.conf.template
```
内容如下
```nginx
server {
listen 80;
server_name ${SERVER_NAME};
location / {
proxy_pass http://${PROXY_SERVER}:3080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
```
3. 构建镜像
```bash
docker build -t <name:tag> .
```
4. 启动容器(指定变量)
```bash
docker run -itd -e PROXY_SERVER=127.0.0.1 -e SERVER_NAME=localhost <name:tag>
```
## 方法二
**查看此文档**
[Nginx镜像构建](https://gitee.com/offends/Kubernetes/tree/main/Docker/Dockerfile/Nginx)

View File

@@ -0,0 +1,16 @@
> 本文作者:丁辉
# Docker部署Node-exporter
```bash
docker run -d --restart=always \
-p 9100:9100 \
-v "/proc:/host/proc:ro" \
-v "/sys:/host/sys:ro" \
-v "/:/rootfs:ro" \
--net="host" \
--restart=always \
--name node-exporter \
prom/node-exporter
```

View File

@@ -0,0 +1,45 @@
> 本文作者:丁辉
>
# Docker部署Portainer
[官方文档](https://docs.portainer.io/)
> 通过Portainer管理docker
## Docker部署
```bash
docker run -d -p 9000:9000 \
--name portainer --restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /data/portainer:/data \
portainer/portainer-ce:latest
```
## 远程连接Docker
远程连接默认端口是2375 [Docker配置2375端口文档](https://gitee.com/offends/Kubernetes/blob/main/Docker/Docs/Docker%E9%85%8D%E7%BD%AE2375%E7%AB%AF%E5%8F%A3.md)
## 忘记密码
1. 下载新镜像
```bash
docker pull portainer/helper-reset-password
```
2. 关闭容器
```bash
docker stop portainer
```
3. 启动观看密码
```bash
docker run --rm -v portainer_data:/data portainer/helper-reset-password
```

View File

@@ -0,0 +1,68 @@
> 本文作者:丁辉
# Docker部署Tor实现匿名通信
## 介绍
TorThe Onion Router是一种免费的开源软件用于实现匿名通信。它通过全球范围内的一系列自愿维护的节点或“路由器”来转发和加密用户的互联网流量从而隐藏用户的身份和位置。
[官方文档](https://community.torproject.org/onion-services/setup/install/)
## 开始部署
> 准备一个 Nginx 服务,部署 Tor 实现匿名通信 Nginx
>
> Nginx访问地址192.168.1.10:80
1. 创建持久化目录
```bash
mkdir -p $HOME/tor-data
```
2. 目录授权
```bash
chmod 700 $HOME/tor-data
chown 100:65533 $HOME/tor-data
```
3. 编写配置文件
```bash
vi $HOME/tor-data/torrc
```
内容如下
```bash
Log notice file /var/log/tor/notices.log
SOCKSPort 0
HiddenServiceNonAnonymousMode 1
HiddenServiceSingleHopMode 1
# 配置代理
#Socks5Proxy sslocal-rust:1080
HiddenServiceDir /var/lib/tor/nginx
HiddenServicePort 80 192.168.1.10:80
```
4. 启动容器
```bash
docker run -itd \
--restart always \
-v $HOME/tor-data:/var/lib/tor \
-v $HOME/tor-data:/etc/tor \
--name=tor \
osminogin/tor-simple:latest
```
5. 查看 hostname
```bash
cat $HOME/tor-data/nginx/hostname
```
6. 通过匿名浏览器访问
> xxx.onion

View File

@@ -0,0 +1,158 @@
> 本文作者:丁辉
# Docker部署Watchtower管理容器更新
[Github仓库](https://github.com/containrrr/watchtower)
## 介绍
Watchtower 是一个开源的容器监控和自动更新工具设计用于Docker容器环境。它可以监控正在运行的容器及其使用的镜像当发现镜像有更新时自动拉取新镜像并重新启动容器。这种自动化管理方式有助于确保部署的应用保持最新状态从而减少安全风险和改进功能。
## 快速开始
```bash
docker run -d \
--name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower
```
所有容器都会自动更新,也包括 Watch­tower 本身。
## 其他启动参数
- 自动清除旧镜像
```bash
docker run -d \
--name watchtower \
--restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower \
--cleanup
```
> `--cleanup` 选项可以简写为 `-c`
```bash
docker run -d \
--name watchtower \
--restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower -c
```
- 选择性自动更新
```bash
docker run -d \
--name watchtower \
--restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower -c \
nginx redis
```
- 配置容器更新列表
```bash
vi ~/.watchtower.list
```
内容如下
```bash
nginx
reidis
```
启动 Watchtower 容器
```bash
docker run -d \
--name watchtower \
--restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower -c \
$(cat ~/.watchtower.list)
```
- 设置单个容器自动更新标签
```bash
docker run -d \
--name nginx \
--restart always \
--label com.centurylinklabs.watchtower.enable=true \
nginx:latest
```
启动 Watchtower 容器
```bash
docker run -d \
--name watchtower \
--restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower -c \
--label-enable
```
> `--label-enable` 可以简写为 `-e`
```bash
docker run -d \
--name watchtower \
--restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower -ce
```
- 设置自动更新检查频率
- `--interval` 设置更新检测时间间隔单位为秒。
```bash
docker run -d \
--name watchtower \
--restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower -c \
--interval 3600
```
- `--schedule` 设置定时检测更新时间。格式为 6 字段 Cron 表达式,而非传统的 5 字段,第一位是秒。
> 比如每天凌晨 2 点检查一次更新
```bash
docker run -d \
--name watchtower \
--restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower -c \
--schedule "0 0 2 * * *"
```
- 手动更新
> 检查 nginx 是否需要更新
```bash
docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower -c \
--run-once \
nginx
```
> `--run-once` 可以简写为 `-R`
```bash
docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower -cR \
nginx
```
> 当容器设置过 `com.centurylinklabs.watchtower.enable=false` 参数则不会更新