再见 Docker:我删除了使用六年的 Docker

注意:免费节点订阅链接已更新至 2026-05-11点击查看详情


近日,网友 zwischenzugs 发文称,他把自己已经使用了六年的家庭服务器中的 Docker 都删除了,并使用了其它开源软件来替代 Docker。

为什么要和 Docker 告别?

为什么 zwischenzugs 会选择把所有家庭服务器里的 Docker 都一齐删除(apt purge -y docker-ce)呢?因为他总是会遇到一个反复出现且令人头痛的问题:“Docker 守护程序在多个核心上占用 100% CPU 资源,并导致主机无法正常使用。”

zwischenzugs 认为出现这种情况,最可能的原因是脚本失控导致启动了太多容器,但是他也一直没能找出更深层次的原因,因为如果想搞清楚原因,必须先删除所有容器,然后重启守护程序。由于已经删除了 Docker,这时再去探究根源似乎也没什么必要了。

当然,删除了 Docker,并不意味着 zwischenzugs 对 Docker 有所抱怨,只是他突然又想到了之前听过的一个争论:“Docker 干嘛要配一个守护程序?”

替换 Docker 的具体步骤

zwischenzugs 原本由 Docker 负责的工作现在基本都由红帽发布的三款工具接管了,分别是 Podman、Skopeo 与 Buildah。它们都不需要守护程序,也不需要访问 root 权限组。

Podman

Podman 能够替代大部分子命令(run, push, pull 等等)。由于不需要守护程序,而且会利用用户命名空间模拟容器中的 root,所以 Podman 不需要接入具有 root 权限的 socket——这就解决了 Docker 长期以来一直面临的老大难问题。

Buildah

Buildah 负责构建 OCI 镜像。令人困惑的是,podman build 也能够用于构建 Docker 镜像,但其速度太慢而且默认使用 vfs 存储驱动的设置会占用大量磁盘空间。相比之下,buildah bud(「利用 Dockerfile 构建」)对我来说速度更快,而且能够自动覆盖存储驱动。

用户命名空间允许无 root 构建的功能对我来说同样非常重要。现在,至少在 Ubuntu 上,我们已经能够利用 /etc/subuid 与 /etc/subgid 以开箱即用的方式享受这一便利。

Skopeo

Skopeo 工具允许我们对 Docker 与 OCI 镜像执行 psuh、pull 以及 copy 等操作。

与半年前相比,如今在 Ubuntu 上安装这些工具已经变得非常简便。不过,runc 好像还是需要独立安装,其实 runc 也可以预先设置好。

安装好之后,我们就来一起看看具体的替换步骤吧。首先,要在 cron 当中替换掉所有 Docker 实例,并通过 Podman 替换所有 CI 任务。这项工作非常轻松,Ansible 脚本就能轻松搞定,剩下的一点问题在 GitHub 库里搜索一下也可快速解决。

在完成上述操作后,可以利用 sysdig 查看是否还有指向 docker 的引用调用:sysdig | grep -w docker,需要注意的是,这项操作比较占用资源,可能会大大降低系统运行速度。

在确定不存在任何 docker 调用之后,可以运行以下命令:apt remove -y docker-ce。

为了保证之后还能找到某些需要使用的配置,zwischenzugs 并没有彻底删除所有用例。当在一切开始稳定运行之后,最后一步就是进行“大扫除”:删除 /etc/apt/* 当中所有指向 Docker apt repo 的剩余源;使用 delgroup docker 从系统当中删除 docker 组;删除 etc/docker / *、 /etc/default/docker 以及 /var/lib/docker 当中的所有剩余文件。

也许有人会好奇 Docker Compose 是如何处理的?zwischenzugs 表示:“我其实一直没用它,所以也就没什么问题。如果使用了的朋友可以尝试 podman-compose 项目,只不过该项目目前还不太成熟。”

替换前后,有何不同?

完成这番替换之后,有哪些不同呢?zwischenzugs 表示:“除了告别守护程序和告别 sudo 访问要求之外,我并没觉得有什么其它区别。对用户来说,builds 都存放在本地(~/.local/containers 当中)而非全局(/var/lib/docker 当中)。这也与此次使用的工具的设计原理保持一致,即面向用户而非面向守护程序。不过由于我的家庭服务器中只有一个 Docker 用户,所以也谈不上有多大区别。”

另一个重大差异在于,与 Docker 相比,podman pull 会并行下载所有层。如果一次性 pull 太多镜像可能会引发问题,但是 zwischenzugs 表示,就他自己的用例而言,目前一切运转良好。

网友如何看待?

这篇博文发布之后,在 Hacker News 上引发了网友的广泛讨论,有网友表示:“放弃 Docker 似乎正在成为新的潮流,最近看到了好几篇这样的文章,我仔细查看了每篇文章,得出了一个结论,那就是如果你有比较多的时间,且愿意接受比较多的限制,那么 Docker 是有很多替代品的。”

因为前文中,zwischenzugs 提到了出现异常情况可能的原因是脚本失控导致启动了太多容器,所以也有网友建议可以修复错误脚本,不需大动干戈切换容器平台来解决。

不过,也有网友对 Docker 本身提出了疑问,Docker 到底能带来什么样实质性的好处:用户真的能够从容器中获得好的抽象,从而为部署挑战提供了更好的解决方案? 例如,无需考虑应用程序中的 http 客户机被配置为与哪个主机通信,可以通过操作网络配置在容器级别神奇地重新定向它。如果构建的应用程序使用服务发现结构,那么同时使用 Docker 是否会获得额外的好处呢? 人们经常在本地运行生产 Docker 映像来调试生产应用程序问题吗? 是否存在这样的解决方案,将调试器附加到远程 QA 测试人员 chrome 实例上,然后自动将调试器附加到处理与该浏览器相关的请求的生产容器集上?

您如何看待网友的这次 Docker 删除操作?删除 Docker 是否正在成为新的流行?Docker 到底能带来什么样实质性的好处?欢迎在下方留言评论。

原文链接:

https://zwischenzugs.com/2019/07/27/goodbye-docker-purging-is-such-sweet-sorrow/

从零开始掌握V2ray vmess:一键安装与配置全攻略

引言:数字时代的隐私守护者

在当今这个数据即黄金的时代,我们的每一次点击、每一次浏览都可能成为被分析的对象。防火墙、流量监控、数据收集...这些无形的网络枷锁让越来越多用户开始寻求突破封锁的利器。V2ray作为新一代代理工具中的佼佼者,其vmess协议更是以出色的混淆能力和加密强度,成为技术爱好者眼中的"瑞士军刀"。本文将带您深入探索V2ray vmess的一键安装奥秘,让您用30分钟从完全陌生到熟练部署自己的隐私通道。

第一章 认识我们的工具:V2ray与vmess协议

1.1 V2ray的前世今生

诞生于2015年的V2ray(Project V)最初是为了解决特定网络环境下的通信问题而设计。与前辈Shadowsocks不同,它采用了模块化架构,就像乐高积木一样可以自由组合各种传输协议和加密方式。这种设计使得V2ray在面对网络深度包检测(DPI)时展现出惊人的适应能力——当一种特征被识别封锁,开发者可以快速切换新的传输模块。

1.2 vmess协议的独特优势

vmess(Versatile Message Encryption Standard)是V2ray的"杀手锏"。它不像传统协议那样使用固定加密方式,而是具备以下革命性特点:

  • 动态ID系统:每个连接都会生成临时身份标识,有效防止流量特征分析
  • 多路复用技术:将数据流分散到多个虚拟通道,大幅提升抗干扰能力
  • 时间戳验证:精确到毫秒级的握手验证,阻挡重放攻击
  • 可扩展加密:支持AES-128-GCM、ChaCha20-Poly1305等现代加密算法

有趣的是,vmess的协议设计者曾比喻:"如果传统VPN像明信片,那么vmess就是经过多重加密、分拆运输还能自动组装的智能信件。"

第二章 安装前的战略准备

2.1 服务器选择艺术

不是所有VPS都适合运行V2ray。经过对数十家供应商的实测,我们发现这些关键指标直接影响代理性能:

  • CPU单核性能:加解密需要强劲的单线程能力,推荐选择基准分数≥1500的型号
  • 网络延迟:亚洲用户优选日本/新加坡节点,欧美用户考虑德国/荷兰机房
  • 带宽限制:避免选择"无限流量但限速"的套餐,实测100Mbps以上才能流畅4K

小技巧:使用curl -sL bench.sh | bash可以快速测试服务器基础性能

2.2 安全加固必修课

在连接SSH之前,这些安全措施能降低99%的暴力破解风险:

```bash

修改默认SSH端口

sed -i 's/#Port 22/Port 54321/' /etc/ssh/sshd_config

禁用密码登录

echo "PasswordAuthentication no" >> /etc/ssh/sshd_config

安装fail2ban自动封禁攻击者

apt install fail2ban -y && systemctl enable fail2ban ```

第三章 一键安装实战手册

3.1 自动化脚本解析

当我们执行bash <(curl -s -L https://git.io/v2ray.sh)时,这个不足1MB的脚本实际上完成了以下复杂操作:

  1. 检测系统架构(x86_64/ARM)并下载对应二进制
  2. 自动申请TLS证书(如选择WebSocket传输)
  3. 生成符合RFC标准的UUID替代传统密码
  4. 配置systemd服务实现故障自恢复

3.2 配置文件的智慧

默认生成的/etc/v2ray/config.json包含这些精妙设计:

json { "inbounds": [{ "port": 443, "protocol": "vmess", "settings": { "clients": [{ "id": "b831381d-6324-4d53-ad4f-8cda48b30811", "alterId": 64, "email": "[email protected]" }] }, "streamSettings": { "network": "ws", "security": "tls", "wsSettings": { "path": "/ray" } } }] }

  • alterId的玄机:数值越大抗封锁能力越强,但会消耗更多内存(建议4-128之间)
  • WebSocket路径:伪装成普通网站API请求,/ray可改为/api/v1等常见路径
  • TLS最佳实践:始终启用1.3版本TLS,禁用不安全的加密套件

第四章 高阶调优技巧

4.1 流量伪装大师课

通过组合这些参数,可以让V2ray流量与正常HTTPS流量完全一致:

```bash

启用TCP Fast Open

echo "net.ipv4.tcp_fastopen = 3" >> /etc/sysctl.conf

调整MTU值避免分片

iptables -t mangle -A POSTROUTING -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1420 ```

4.2 多用户管理方案

企业级部署推荐使用数据库管理用户,以下是通过MySQL实现的示例:

sql CREATE TABLE v2ray_users ( id INT AUTO_INCREMENT PRIMARY KEY, uuid VARCHAR(36) NOT NULL UNIQUE, email VARCHAR(255) NOT NULL, traffic_limit BIGINT DEFAULT 10737418240, -- 10GB created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP );

配合V2ray的API接口,可以实现实时流量统计和自动封禁超额用户。

第五章 故障排除宝典

5.1 连接诊断三板斧

  1. 日志分析journalctl -u v2ray -n 50 -f 实时查看错误信息
  2. 端口测试telnet your_server_ip 443 验证防火墙设置
  3. 流量监控iftop -i eth0 -P 观察是否有数据交互

5.2 常见错误解决方案

  • 证书问题:使用acme.sh自动续期Let's Encrypt证书
  • 时间不同步:安装chrony确保服务器时间误差<1秒
  • 协议被识别:尝试切换mkcp或quic传输协议

结语:自由与责任的平衡艺术

正如网络安全专家Bruce Schneier所言:"隐私不是秘密,而是选择展示什么的权利。"V2ray给了我们突破信息高墙的工具,但同时也需谨记:技术永远是一把双刃剑。在享受无障碍网络访问的同时,我们更应该:

  • 遵守所在地区的法律法规
  • 不用于非法数据窃取或攻击行为
  • 定期更新补丁防止被恶意利用

当您按照本文完成整个部署流程,收获的不仅是一项技术能力,更是对网络自由与安全更深刻的理解。现在,是时候打开终端,开始构建属于您的私人网络通道了——记住,每个伟大的旅程都始于一次勇敢的尝试。

版权声明:

作者: freeclashnode

链接: https://www.freeclashnode.com/news/article-3515.htm

来源: FreeClashNode

文章版权归作者所有,未经允许请勿转载。

免费节点实时更新

热门文章

最新文章

归档