使用Docker玩转VPS服务器

本文最后更新于 2024年10月20日 下午

1. 前言

由于手动配置服务器环境LNMPLAMP好像有点麻烦诶,所以我干脆就使用Docker来部署服务啦,剩下不能用Docker部署的项目就用宝塔海外版本aapanel留作备用来部署(别问为什么不用国内版,因为加入了强制手机登陆验证)。

4. 环境说明

  • 服务器:我自己搭建用的是 Racknerd 的VPS,最好是选 非大陆(香港)的服务器
  • 系统:Debian10或以上(Ubuntu 20.04以上)

3. BBR

新的 TCP 拥塞控制算法 BBR (Bottleneck Bandwidth and RTT) 可以让服务器的带宽尽量跑满,并且尽量不要有排队的情况,让网络服务更佳稳定和高效。

Linux Kernel 内核升级到 4.9 及以上版本可以实现 BBR 加速(Ubuntu 18.04 默认的内核是 4.15 版本的内核,Ubuntu 20.04 默认的内核是 5.4 版本的内核,并已经默认编译了 TCP BBR 模块,可以直接通过参数开启)。

目前 Debian10 自带的内核版本一般是4.19,我们可以查看一下内核版本(如果是 5.6 及以上内核则集成了WireGuard

1
hostnamectl   #或者 uname -r

查看内核.webp

我们选择更新到新的稳定版本的5.1内核(目前为止),再开启BBR

3.1 给 Debian 10 添加官方backports源,获取更新的软件库

1
sudo nano /etc/apt/sources.list

说明:本文以 Debian 10 为例,所以使用 /etc/apt/sources.list 仍无问题,但如果你并不是根据本文从头开始,或者使用了其他 Linux 发行版,那么建议你建立 /etc/apt/sources.list.d/ 文件夹,并在这个文件夹内建立自己的配置文件,例如 /etc/apt/sources.list.d/vpsadmin.list ,以此保证兼容性,也可避免默认文件在不可预见的情况下被覆盖而导致配置丢失

然后把下面这一条加在最后,并保存退出

1
deb http://archive.debian.org/debian buster-backports main

添加backports软件源.webp

3.2 刷新软件库并查询 Debian 官方的最新版内核并安装

请务必安装你的 VPS 对应的版本(本文以比较常见的 amd64 为例)

1
sudo apt update && sudo apt -t buster-backports install linux-image-amd64

说明 如果你的 VPS 支持,可以尝试【云服务器专用内核】linux-image-cloud-amd64,优点就是精简、资源占用低,缺点嘛,不支持的系统强行安装会导致无法开机(Kernel 无法识别)。
为了避免无法识别的悲剧,请确保:

  • 尝试前做一个系统快照
  • 你有 vnc 可以救场(并且你知道怎么用)

3.3 修改 kernel 参数配置文件 sysctl.conf 并指定开启 BBR

1
sudo nano /etc/sysctl.conf

说明:本文以 Debian 10 为例,所以使用 /etc/sysctl.conf 仍无问题,但如果你并不是跟着本文从头开始,或者使用了其他 Linux 发行版,那么建议你建立 /etc/sysctl.d/ 文件夹,并在这个文件夹内建立自己的配置文件,例如 /etc/sysctl.d/vpsadmin.conf,以此保证兼容性,因为部分发行版在 systemd 207 版本之后便不再从 /etc/sysctl.conf 读取参数。使用自定义配置文件也可避免默认文件在不可预见的情况下被覆盖而导致配置丢失。

把下面的内容添加进去

1
2
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr

开启BBR.webp

重启 VPS、使内核更新和BBR设置都生效

1
sudo reboot

说明:因为我使用的 VPS 支持云服务器专用内核,所以我使用了 linux-image-cloud-amd64 。如果你不确定你的 VPS 是否支持,那请务必按照 3.2 的命令,使用常规内核 linux-image-amd64

3.3 确认BBR开启

如果你想确认 BBR 是否正确开启,可以使用下面的命令:

1
lsmod | grep bbr

此时应该返回这样的结果:

1
tcp_bbr

如果你想确认 fq 算法是否正确开启,可以使用下面的命令:

1
lsmod | grep fq

此时应该返回这样的结果:

1
sch_fq
1
uname -r

查看升级后内核.webp

可以看到,内核版本已经变成了5.10

4. 修改时间

首先,我们需要修改服务器的时间与我们本地的时间一致

香港的服务器的话时间是一样的,如果是海外的服务器,可以通过下面的方式修改

先查看时间:

1
timedatectl

可以看到我们的时间是洛杉矶时区,这边需要修改改一下

查看时区.webp

把时区改成上海

1
sudo timedatectl set-timezone Asia/Shanghai

查看修改后时区.webp

5. 安装Docker、Docker-compose

5.1 非大陆Docker安装

1
wget -qO- get.docker.com | bash

5.2 查看版本

1
docker -v

5.3 开机自启

1
systemctl enable docker

5.4 卸载Docker

1
sudo apt-get purge docker-ce docker-ce-cli containerd.io
1
2
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

6. 安装Docker-compose

6.1 非大陆Docker-compose安装

1
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

6.2 修改权限

1
sudo chmod +x /usr/local/bin/docker-compose

6.3 查看版本

1
docker-compose --version

Docker和docker-compose版本.webp

6.4 修改Docker配置(来自烧饼博客

以下配置会增加一段自定义内网 IPv6 地址,开启容器的 IPv6 功能,以及限制日志文件大小,防止 Docker 日志塞满硬盘 (泪的教训)

1
2
3
4
5
6
7
8
9
10
11
12
13
cat > /etc/docker/daemon.json <<EOF
{
"log-driver": "json-file",
"log-opts": {
"max-size": "20m",
"max-file": "3"
},
"ipv6": true,
"fixed-cidr-v6": "fd00:dead:beef:c0::/80",
"experimental":true,
"ip6tables":true
}
EOF

然后重启 Docker 服务

1
systemctl restart docker

7. 文件管理

建议专门给Docker的数据、配置文件新建一个文件夹

1
mkdir -p data/docker_data

这样换服务器或者备份都会方便一点

8. 备份数据(以Remark42为例)

8.1 Docker挂载目录打包

1
docker inspect  容器名

查看Mounts,就可以看到映射到本地的目录
然后直接用下面这个命令:

1
docker run --rm --volumes-from CONTAINER -v $(pwd):/backup busybox tar cvfz /backup/backup.tar CONTAINERPATH

更改CONTAINER(容器名)和 CONTAINERPATH(容器内部路径)

1
docker run --rm --volumes-from bitwarden -v $(pwd):/backup busybox tar cvfz /backup/backup.tar /data

8.2 SCP传输文件到另一台服务器

1
scp /root/backup/backup.tar adminuser@198.171.214.58:/root/data/docker-data

8.2 其他常用命令

8.2.1 解压

1
tar -zxvf /root/data/docker-data/remark42/backup.tar

8.2.2 重命名

1
mv data remark42  #重命名文件夹

使用Docker玩转VPS服务器
https://zxlx.ink/archives/hello-docker
作者
逐星落汐.
发布于
2024年8月9日
许可协议