服务环境快速搭建
yaoye Lv5

服务环境快速搭建

初始化 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
11
12
docker run -d \
--restart always \
--net dev-network \
-v /opt/docker_data/alist:/opt/alist/data \
-v /mnt/sda2:/opt/alist/doc \
-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 * * *"

lylme_spage

克隆 lylme_spage 仓库 doker 分支

1
2
git clone -b docker https://github.com/LyLme/lylme_spage.git /opt/docker_data/lylme_spage
cd /opt/docker_data/lylme_spage && ls

编辑 docker-compose.yaml 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
version: '3'
services:
php:
container_name: "spage-php74"
build: ./php
image: php74-fpm-alpine
# ports:
# - "9000:9000" #fpm 端口
restart: always
volumes:
- ./php/etc:/usr/local/etc/php/conf.d #映射配置文件
- ./www:/var/www/html
stdin_open: true
tty: true
links:
- "mysql" #链接 mysql 服务
networks:
spage:
ipv4_address: 10.10.10.2
environment:
- TZ = Asia/Shanghai # 设置时区
nginx:
container_name: "spage-nginx"
image: nginx: latest
restart: always
ports:
- "20002:80"
environment:
- TZ = Asia/Shanghai
depends_on:
- "php"
links:
- "php"
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
#- ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/log:/var/log/nginx/
- ./www:/var/www/html
networks:
spage:
ipv4_address: 10.10.10.10 #分配 ip
mysql:
container_name: "spage-mysql"
image: mysql: 5.7
# ports:
# - ": 3306"
volumes:
- ./mysql/data:/var/lib/mysql #数据目录
restart: always
environment:
- TZ = Asia/Shanghai
- MYSQL_ROOT_PASSWORD = 123456 #MySQL root 密码
- MYSQL_DATABASE = spage #MySQL 数据库名
networks:
spage:
ipv4_address: 10.10.10.1 #MySQL ip 地址
networks:
spage:
driver: bridge
driver_opts:
com.docker.network.enable_ipv6: "true"
ipam:
config:
- subnet: 10.10.0.0/16

开始使用

  1. 访问 http://IP: 8080/install,进入六零导航页安装程序(若提示环境检测不通过可尝试执行 docker-compose restart 重启容器再试)
  2. 数据库配置
    • 数据库地址:10.10.10.1 或(spage-mysql)
    • 数据库端口:3306
    • 数据库名:spage(或其他,若数据库名不存在安装程序会自动创建)
    • 数据库用户名:root
    • 数据库密码:第 2 步设置的密码,默认 123456
  3. 完成安装
    • 外网地址:http://IP:8080
    • 内网地址:http://10.10.10.10
  4. 后台地址
    • http://IP[:端口]/admin
    • 后台账号:admin
    • 后台密码:123456

将多个镜像源添加到 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 将从多个镜像源拉取镜像,加快下载速度并提高可靠性。