服务环境快速搭建

初始化docker环境

创建自定义网络,后续容器连接到这个网络

1
docker network create dev-network 

解包镜像

1
docker load -i /opt/docker_images/mysql-8.0.28.tar

redis

配置文件修改

1
2
# requirepass foobared  修改密码
bind 127.0.0.1 -::1 # 修改允许访问地址

启动容器

1
2
3
4
5
6
7
8
9
sudo docker run -d \
--name redis_6_2_14 \
--net dev-network \
-v /opt/docker_data/redis/6.2.14/data:/data \
-v /opt/docker_data/redis/6.2.14/redis.conf:/usr/local/etc/redis/redis.conf \
-p 6379:6379 \
--restart always \
redis:6.2.14 \
redis-server /usr/local/etc/redis/redis.conf

mysql

运行 mysql 容器

某些 Bash 配置中,! 字符被解释为历史展开符号。

使用单引号并在命令前禁用历史展开功能:

1
set +H
1
2
3
4
5
6
7
sudo docker run -d \
--name mysql_8_0_28 \
-e MYSQL_ROOT_PASSWORD='root_password' \
-v /opt/application/mysql/data_mysql_8_0_28:/var/lib/mysql \
-p 3306:3306 \
--restart always \
mysql:8.0.28

查看当前的 wait_timeoutinteractive_timeout 设置:

1
2
SHOW VARIABLES LIKE 'wait_timeout';
SHOW VARIABLES LIKE 'interactive_timeout';

修改 wait_timeoutinteractive_timeout 设置:

1
2
SET GLOBAL wait_timeout = 300;   -- 设置为5分钟
SET GLOBAL interactive_timeout = 300; -- 设置为5分钟

查看最大连接数:

1
SHOW VARIABLES LIKE 'max_connections';

已有数据卷

1
2
3
4
5
6
7
8
sudo docker run -d \
--name mysql_8_0_28 \
--net dev-network \
-v /opt/docker_data/mysql/8.0.28/data:/var/lib/mysql \
-v /opt/docker_data/mysql/8.0.28/config/my.cnf:/etc/mysql/my.cnf \
-p 3306:3306 \
--restart always \
mysql:8.0.28

打包镜像

1
docker save -o /opt/docker_images/mysql-8.0.28.tar  mysql:8.0.28

解包镜像

1
docker load -i /opt/docker_images/mysql-8.0.28.tar

alist

1
2
3
4
5
6
7
8
9
10
docker run -d --restart=always \
--net dev-network \
-v /opt/docker_data/alist:/opt/alist/data \
-p 5244:5244 \
-e PUID=0 \
-e PGID=0 \
-e UMASK=022 \
-e "TZ=Europe/Warsaw" \
--name="alist" \
xhofe/alist:latest
1
2
3
4
5
6
7
8
9
10
mkdir -p /opt/docker_data/alist && docker run -d --restart=always \
--net dev-network \
-v /opt/docker_data/alist:/opt/alist/data \
-p 5244:5244 \
-e PUID=0 \
-e PGID=0 \
-e UMASK=022 \
-e "TZ=Europe/Warsaw" \
--name="alist" \
xhofe/alist:latest

docker 安装时挂载本地存储只能挂载容器内部存储,无法挂载宿主机的,只能通过映射。

或者,直接在本机安装

1
2
3
4
5
6
7
# 最后的参数为安装路径,使用 /root 和 /root/alist 时都会安装到 /root/alist 中,
# Install
curl -fsSL "https://alist.nn.ci/v3.sh" | bash -s install /opt/application
# update
curl -fsSL "https://alist.nn.ci/v3.sh" | bash -s update /opt/application
# Uninstall
curl -fsSL "https://alist.nn.ci/v3.sh" | bash -s uninstall /opt/application

napcatQQ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
docker run -d \
-p 3000:3000 \
-p 3001:3001 \
-p 6099:6099 \
--restart=always \
-e HTTP_ENABLE=true \
-e HTTP_POST_ENABLE=true \
-e HTTP_URLS='["http://ip:5140/onebot"]' \
-e ACCOUNT=qq账号 \
-e WS_ENABLE=true \
-e WSR_ENABLE=true \
-e WS_URLS='["ws://ip:5140/onebot"]' \
-e DEBIAN_FRONTEND=noninteractive \
-e TZ=Asia/Shanghai \
-v /opt/docker_data/napcat/QQ:/root/.config/QQ \
-v /opt/docker_data/napcat/config:/usr/src/app/napcat/config \
mlikiowa/napcat-docker:latest bash entrypoint.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
docker run -d \
-e ACCOUNT=qq账号 \
-e WS_ENABLE=true \
-e WSR_ENABLE=true \
-e WS_URLS='["ws://ip:5140/onebot"]' \
-e HTTP_ENABLE=true \
-e HTTP_POST_ENABLE=true \
-e HTTP_URLS='["http://ip:5140/onebot"]' \
-p 3000:3000 \
-p 3001:3001 \
-p 6099:6099 \
--name napcat \
--restart=always \
-v /opt/docker_data/napcat/QQ:/root/.config/QQ \
-v /opt/docker_data/napcat/config:/usr/src/app/napcat/config \
mlikiowa/napcat-docker:latest

登录

1
docker logs napcat

Vaultwarden 密码管理

1
docker run -d --name vaultwarden -v /opt/docker_data/vaultwarden/:/data/ --restart always -p 50000:80 vaultwarden/server:latest
1
2
3
4
5
6
7
8
docker run -d --name vaultwarden \
-e SIGNUPS_ALLOWED=false \
-e INVITATIONS_ALLOWED=false \
-e ADMIN_TOKEN=some_random_token_as_per_above_explanation \
-e LOG_FILE=/data/vaultwarden.log \
-v /vw-data/:/data/ \
-p 80:80 \
vaultwarden/server:latest

nacos

1
2
3
4
5
6
7
docker run --name nacos_2_2_3 \
--net dev-network \
-e MODE=standalone \
-v /opt/docker_data/nacos/2.2.3:/home/nacos \
-p 8848:8848 \
-p 9848:9848 \
-d nacos/nacos-server:v2.2.3

ElasticSearch

1
docker run -d --name elasticsearch_8_12_1 --net dev-network -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -v /opt/docker_data/elasticsearch/8.12.1:/usr/share/elasticsearch elasticsearch:8.12.1
1
2
3
4
5
6
7
docker run -d --name elasticsearch_8_12_1 \
--net dev-network \
-p 9200:9200 \
-p 9300:9300 \
-e "discovery.type=single-node" \
-v /opt/docker_data/elasticsearch/8.12.1:/usr/share/elasticsearch \
elasticsearch:8.12.1

ncmctl

登录

1
2
3
4
5
docker run --rm -it \
-v /opt/docker_data/ncmctl:/root \
-v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime:ro \
-e TZ=Asia/Shanghai \
chaunsin/ncmctl:latest /app/ncmctl login qrcode

先检查时区,错误时执行

1
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

删除原容器

1
2
docker stop ncmctl   # 停止已有的容器
docker rm ncmctl # 删除已有的容器

启动

1
2
3
4
5
docker run -it -d --name ncmctl \
-v /opt/docker_data/ncmctl:/root \
-v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime:ro \
-e TZ=Asia/Shanghai \
chaunsin/ncmctl:latest /app/ncmctl task --sign.cron "5 0 * * *" --partner.cron "5 0 * * *"

将多个镜像源添加到 Docker 配置

要将多个镜像源添加到 Docker 配置中,可以在 daemon.json 文件中配置多个镜像源。

编辑 Docker 配置文件: 创建或编辑 /etc/docker/daemon.json 文件:

1
sudo vi /etc/docker/daemon.json

配置 Docker 使用多个镜像源: 在 daemon.json 文件中添加或修改以下内容:

1
2
3
4
5
{
"registry-mirrors": [
"https://hub.atomgit.com/"
]
}

重新启动 Docker 服务 : 保存文件后,重新启动 Docker 服务以应用更改:

1
2
sudo systemctl daemon-reload
sudo systemctl restart docker

验证配置: 运行以下命令来验证新的镜像源是否生效:

1
docker info

在输出信息中查找 Registry Mirrors 部分,确保显示 https://hub.atomgit.com/https://0vsv80z0.mirror.aliyuncs.com

完成这些步骤后,Docker 将使用多个镜像源。然后可以再次尝试构建镜像:

1
docker build -t qmsgredis -f qmsg-redis-Dockerfile .

这样配置后,Docker 将从多个镜像源拉取镜像,加快下载速度并提高可靠性。