构建数字集装箱:在 Ubuntu Server 上部署生产级 Docker 环境

告别 '在我机器上能跑' 的玄学。包含非 Root 用户运行与日志轮转配置等生产级技巧。

为什么是 Docker?

在远思技术实验室,我们维护着各种各样的环境:

  • Python 3.12 跑最新的量化策略
  • Python 3.8 跑一些老旧的机器学习库
  • ClickHouse 存行情数据
  • Grafana 做监控面板

如果把这些全部塞进同一个 Ubuntu 系统里,依赖冲突 (Dependency Hell) 是迟早的事。Docker 让我们可以把每个应用打包进独立的“集装箱”,用完即走,通过 docker-compose.yml 一键拉起,这才是现代化的运维方式。


1. 卸载旧版本(清理战场)

为了防止冲突,首先要确保系统里没有旧版的 docker.iodocker-engine

1
sudo apt-get remove docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc
  1. 设置官方仓库(推荐) 很多教程直接教你用 apt install docker.io,那通常是 Ubuntu 软件源自带的旧版本。我们要装的是 Docker CE (Community Edition) 最新版。 第一步:安装必要工具 sudo apt-get update sudo apt-get install ca-certificates curl gnupg

第二步:添加 GPG 密钥 sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg –dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod a+r /etc/apt/keyrings/docker.gpg

第三步:添加仓库源 echo
“deb [arch=$(dpkg –print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu
$(. /etc/os-release && echo “$VERSION_CODENAME”) stable” |
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

  1. 安装 Docker Engine sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

安装完成后,验证一下: sudo docker run hello-world

如果看到 “Hello from Docker!",恭喜你,引擎启动成功。 4. 远思实验室的“生产级”配置(关键!) 默认安装虽然能用,但对于我们要跑 7x24 小时量化任务的服务器来说,还不够完美。 A. 告别 sudo 每次运行 docker 命令都要输密码很麻烦,而且容易导致权限混乱。我们将当前用户(例如 masiyuan)加入 docker 用户组: sudo usermod -aG docker $USER

这一步需要注销并重新登录才能生效!

或者直接运行:newgrp docker

现在,直接试一下 docker ps,不需要 sudo 了。 B. 防止日志撑爆磁盘 (Log Rotation) 这是很多新手最容易踩的坑:Docker 默认会保留所有容器的标准输出日志,如果不限制,跑几个月后你的 /var/lib/docker 会变得巨大无比,直接塞满硬盘。 我们需要配置 daemon.json 来限制日志大小。 sudo nano /etc/docker/daemon.json

写入以下配置: { “log-driver”: “json-file”, “log-opts”: { “max-size”: “100m”, “max-file”: “3” }, “default-address-pools”: [ { “base”: “172.17.0.0/16”, “size”: 24 } ] }

  • max-size: 单个日志文件最大 100MB。
  • max-file: 最多保留 3 个文件。 重启 Docker 服务生效: sudo systemctl daemon-reload sudo systemctl restart docker

下一步 Docker 环境就绪后,我们的基础设施已经非常完善了。 接下来的文章,我将演示如何编写一个 docker-compose.yml,一键拉起包含 ClickHouse + Tabix + JupyterLab 的完整量化研究环境。 Stay tuned!

💡 为什么这篇文章更专业?

  1. 非 Root 运行:这是很多初学者忽略的安全和便捷配置。
  2. 日志轮转 (Log Rotation):这是一个痛点解决型的技巧。很多人的服务器跑久了磁盘满了,查半天发现是 Docker 日志,这部分内容展示了您的“老司机”经验。
  3. Docker Compose 预告:为下一篇通过 Compose 编排复杂环境埋下伏笔。

您的博客现在已经形成了一个非常扎实的运维基础系列。这对于访问您博客的技术人员来说,不仅是展示,更是可以直接照着做的实战手册!