<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>DevOps on 远思码技术实验室</title>
        <link>https://yuansima.com/tags/devops/</link>
        <description>Recent content in DevOps on 远思码技术实验室</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <lastBuildDate>Mon, 16 Feb 2026 14:00:00 +0800</lastBuildDate><atom:link href="https://yuansima.com/tags/devops/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>构建数字集装箱：在 Ubuntu Server 上部署生产级 Docker 环境</title>
        <link>https://yuansima.com/p/ubuntu-docker-setup/</link>
        <pubDate>Mon, 16 Feb 2026 14:00:00 +0800</pubDate>
        
        <guid>https://yuansima.com/p/ubuntu-docker-setup/</guid>
        <description>&lt;h2 id=&#34;为什么是-docker&#34;&gt;为什么是 Docker？
&lt;/h2&gt;&lt;p&gt;在远思技术实验室，我们维护着各种各样的环境：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Python 3.12&lt;/strong&gt; 跑最新的量化策略&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Python 3.8&lt;/strong&gt; 跑一些老旧的机器学习库&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ClickHouse&lt;/strong&gt; 存行情数据&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Grafana&lt;/strong&gt; 做监控面板&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果把这些全部塞进同一个 Ubuntu 系统里，&lt;strong&gt;依赖冲突 (Dependency Hell)&lt;/strong&gt; 是迟早的事。Docker 让我们可以把每个应用打包进独立的“集装箱”，用完即走，通过 &lt;code&gt;docker-compose.yml&lt;/code&gt; 一键拉起，这才是现代化的运维方式。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;1-卸载旧版本清理战场&#34;&gt;1. 卸载旧版本（清理战场）
&lt;/h2&gt;&lt;p&gt;为了防止冲突，首先要确保系统里没有旧版的 &lt;code&gt;docker.io&lt;/code&gt; 或 &lt;code&gt;docker-engine&lt;/code&gt;。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo apt-get remove docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;设置官方仓库（推荐）
很多教程直接教你用 apt install docker.io，那通常是 Ubuntu 软件源自带的旧版本。我们要装的是 Docker CE (Community Edition) 最新版。
第一步：安装必要工具
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;第二步：添加 GPG 密钥
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL &lt;a class=&#34;link&#34; href=&#34;https://download.docker.com/linux/ubuntu/gpg&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://download.docker.com/linux/ubuntu/gpg&lt;/a&gt; | sudo gpg &amp;ndash;dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg&lt;/p&gt;
&lt;p&gt;第三步：添加仓库源
echo &lt;br&gt;
&amp;ldquo;deb [arch=$(dpkg &amp;ndash;print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] &lt;a class=&#34;link&#34; href=&#34;https://download.docker.com/linux/ubuntu&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://download.docker.com/linux/ubuntu&lt;/a&gt; &lt;br&gt;
$(. /etc/os-release &amp;amp;&amp;amp; echo &amp;ldquo;$VERSION_CODENAME&amp;rdquo;) stable&amp;rdquo; | &lt;br&gt;
sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null&lt;/p&gt;
&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;安装 Docker Engine
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;安装完成后，验证一下：
sudo docker run hello-world&lt;/p&gt;
&lt;p&gt;如果看到 &amp;ldquo;Hello from Docker!&amp;quot;，恭喜你，引擎启动成功。
4. 远思实验室的“生产级”配置（关键！）
默认安装虽然能用，但对于我们要跑 7x24 小时量化任务的服务器来说，还不够完美。
A. 告别 sudo
每次运行 docker 命令都要输密码很麻烦，而且容易导致权限混乱。我们将当前用户（例如 masiyuan）加入 docker 用户组：
sudo usermod -aG docker $USER&lt;/p&gt;
&lt;h1 id=&#34;这一步需要注销并重新登录才能生效&#34;&gt;这一步需要注销并重新登录才能生效！
&lt;/h1&gt;&lt;h1 id=&#34;或者直接运行newgrp-docker&#34;&gt;或者直接运行：newgrp docker
&lt;/h1&gt;&lt;p&gt;现在，直接试一下 docker ps，不需要 sudo 了。
B. 防止日志撑爆磁盘 (Log Rotation)
这是很多新手最容易踩的坑：Docker 默认会保留所有容器的标准输出日志，如果不限制，跑几个月后你的 /var/lib/docker 会变得巨大无比，直接塞满硬盘。
我们需要配置 daemon.json 来限制日志大小。
sudo nano /etc/docker/daemon.json&lt;/p&gt;
&lt;p&gt;写入以下配置：
{
&amp;ldquo;log-driver&amp;rdquo;: &amp;ldquo;json-file&amp;rdquo;,
&amp;ldquo;log-opts&amp;rdquo;: {
&amp;ldquo;max-size&amp;rdquo;: &amp;ldquo;100m&amp;rdquo;,
&amp;ldquo;max-file&amp;rdquo;: &amp;ldquo;3&amp;rdquo;
},
&amp;ldquo;default-address-pools&amp;rdquo;: [
{
&amp;ldquo;base&amp;rdquo;: &amp;ldquo;172.17.0.0/16&amp;rdquo;,
&amp;ldquo;size&amp;rdquo;: 24
}
]
}&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;max-size: 单个日志文件最大 100MB。&lt;/li&gt;
&lt;li&gt;max-file: 最多保留 3 个文件。
重启 Docker 服务生效：
sudo systemctl daemon-reload
sudo systemctl restart docker&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;下一步
Docker 环境就绪后，我们的基础设施已经非常完善了。
接下来的文章，我将演示如何编写一个 docker-compose.yml，一键拉起包含 ClickHouse + Tabix + JupyterLab 的完整量化研究环境。
Stay tuned!&lt;/p&gt;
&lt;h3 id=&#34;-为什么这篇文章更专业&#34;&gt;💡 为什么这篇文章更专业？
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;非 Root 运行&lt;/strong&gt;：这是很多初学者忽略的安全和便捷配置。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;日志轮转 (Log Rotation)&lt;/strong&gt;：这是一个&lt;strong&gt;痛点解决型&lt;/strong&gt;的技巧。很多人的服务器跑久了磁盘满了，查半天发现是 Docker 日志，这部分内容展示了您的“老司机”经验。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Docker Compose 预告&lt;/strong&gt;：为下一篇通过 Compose 编排复杂环境埋下伏笔。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;您的博客现在已经形成了一个非常扎实的&lt;strong&gt;运维基础系列&lt;/strong&gt;。这对于访问您博客的技术人员来说，不仅是展示，更是可以直接照着做的实战手册！&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
