Docker 简介与安装:把环境打包,省去折腾

我记得几年前刚开始搞蛋白质组学数据分析时,最头疼的就是软件环境。MaxQuant 本来跑在 Windows 上,换个 Linux 服务器就得从头编译一堆依赖。同事发来一个分析流程,我这边跑不起来,查半天发现是 .NET 版本对不上。那会儿我就想,要是能把整个环境做成一个“包裹”,解压即用,该有多好。

后来接触了 Docker,发现这就是我想要的工具。Docker 说白了,是一个轻量级的容器引擎。把你的应用程序和它需要的操作系统、库、依赖全部打包成一个镜像。别人拿到这个镜像,一条命令就能跑起来,完全不管底层是什么系统。这对我们做组学分析的人来说,简直是福音。

Docker 从哪里来

Docker 的故事得从 2013 年说起。那家叫 dotCloud 的公司,最开始是做 PaaS 平台生意的。他们内部用了一个叫容器的东西来隔离应用,后来发现这东西比虚拟机轻巧太多了,启动只要秒级,资源占用也小。于是他们把它开源了,就是现在的 Docker。

为什么 Docker 能火?我个人觉得,核心还是解决了“它在我电脑上能跑,在你那儿就不行”这个世纪难题。以前我们用虚拟机,得装一整个操作系统,动辄几个 G,启动也得几分钟。容器直接共享宿主机的内核,只打包应用和它的依赖,体积小、启动快、迁移也方便。你想想看,同样的分析流程,之前部署要半天,现在几分钟搞定。

Docker 与传统虚拟机的对比

我经常跟身边的学生说,别把 Docker 当成虚拟机。虚拟机是“虚拟”了一套完整的硬件和操作系统,而容器是“隔离”出进程级别的运行环境。下面这个表格能看得更清楚:

特性 Docker 容器 虚拟机
启动时间 秒级 分钟级
镜像体积 通常 MB 到 GB 几 GB 起步
性能损耗 几乎没有(直接调用宿主机内核) 有一定的性能开销(需要虚拟化硬件)
资源利用率 高(共享宿主机内核) 偏低(每个虚拟机都要单独装操作系统)
隔离级别 进程级隔离 完全隔离(包括内核)
跨平台迁移 可能受内核版本影响 更灵活(虚拟了整个硬件)

看到没?容器启动快、体积小,适合我们这种需要频繁调试分析流程的场景。虚拟机更安全隔离,但开销大。做组学数据预处理、运行 MaxQuant 这种工具,用 Docker 就非常合适。

下面这张图展示了 Docker 跟传统虚拟化在架构上的本质区别:

Docker 容器 vs 传统虚拟机架构对比 Docker 容器结构 App A App B App C 共享宿主机内核 传统虚拟机结构 App A Guest OS A App B Guest OS B Hypervisor 宿主机硬件 共享内核,资源占用小,启动快 每个 VM 独占内核,更隔离,但资源开销大

Docker 的优势到底在哪里

下面这几点,是我在实际项目中体会最深的:

  • 环境一致性:一个 Docker 镜像打包了所有依赖。你在自己笔记本上调试好,推到服务器上,结果完全一样。再也不用出现“我这跑出来是 1.23,你那怎么是 0.98”这种尴尬了。
  • 快速部署:我曾在集群上部署过一套 MaxQuant 分析流程。以前手动装 Mono、装依赖、再配环境变量,得折腾一上午。用 Docker 之后,一条 docker run 搞定。
  • 版本管理:Docker 镜像有标签(tag),你可以保留每一个版本的镜像。假如新版本出了问题,随时回滚到旧版本。我在项目里就用 maxquant:2.0.3.0 这样的标签来精确控制使用哪个版本。
  • 资源隔离:同一台服务器上可以同时跑多个容器,每个容器限制 CPU 和内存。我们的组学分析任务经常要占用大量内存,用 Docker 可以避免出现“一个任务吃光所有资源”的情况。

核心观点:Docker 的本质是一种“轻量级虚拟化”。它不是一个完整的虚拟机,而是对进程进行隔离。你只需要把应用和它的依赖打包进去,省掉了一整个操作系统的开销。

在主流操作系统上安装 Docker

好,现在我们来动手。不同系统的安装方法略有差别,我分别说下。

1. Windows 系统

Windows 上安装 Docker 主要分两种方式:

  • Docker Desktop for Windows:这是官方推荐的方式。它会自动启用 Windows 的 WSL 2 或 Hyper-V 功能。我个人建议用 WSL 2 后端,性能和兼容性都更好。
  • Docker Toolbox:如果你的电脑不支持虚拟化(比如比较老的硬件),那就只能用这个。它会在 VirtualBox 里创建一个 Linux 虚拟机来跑 Docker。但说实话,性能差很多,不太推荐。

安装步骤(以 Docker Desktop 为例):

  1. 先确保你的系统满足要求:Windows 10 64 位(专业版/企业版/教育版,Build 19041 或更高),或者 Windows 11。
  2. 开启 WSL 2 功能。以管理员身份打开 PowerShell,运行以下命令:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

重启电脑后,下载并安装 WSL 2 Linux 内核更新包(官网搜一下就能找到)。然后将 WSL 2 设为默认版本:

wsl --set-default-version 2

然后下载 Docker Desktop 安装程序,双击安装。安装完成后重启电脑,Docker 就会自动启动。任务栏托盘中会出现一个鲸鱼图标,右键点击它,选择“Dashboard”就能看到 Docker 桌面端了。

小提示:我第一次在 Windows 上装 Docker 时,遇到了“Docker Desktop requires a newer WSL2 kernel”的错误。解决办法很简单:打开 PowerShell,运行 wsl --update 更新一下 WSL 内核就行。

2. macOS 系统

macOS 上的 Docker Desktop 安装很简单,直接从官网下载 .dmg 安装包就行。不过要注意:

  • Intel 芯片的 Mac:下载对应 Intel 版本的 Docker Desktop。
  • Apple Silicon 芯片的 Mac(M1/M2/M3):必须下载 Apple Silicon 专用版本,否则可能会出现某些镜像不兼容的问题。我记得 M1 刚出来那会儿,很多旧镜像还不支持 ARM 架构,所以早期用户在容器里跑 x86 程序时偶尔会踩坑。现在大部分镜像都提供多架构版本了,问题少了很多。

安装步骤:

  1. 从 Docker 官网下载 Docker.dmg 文件,拖到 Applications 文件夹。
  2. 打开终端,验证是否安装成功:
docker --version

正常会输出类似 Docker version 26.1.1, build 4c2514b 的信息。

3. Linux 系统(以 Ubuntu 为例)

Linux 上安装 Docker 最直接,没有额外的虚拟机层,性能也最好。我工作用的主力机就是 Ubuntu,平时在终端里跑 Docker 非常顺手。

安装步骤:

更新包索引,安装必要的依赖工具:

sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release

添加 Docker 的官方 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
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

更新包索引并安装 Docker:

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

验证安装:

sudo docker run hello-world

如果看到信息中提示“Hello from Docker!”,说明一切正常。

嗯,这里要注意,默认情况下 Docker 需要 root 权限才能运行。你每次都要用 sudo docker 来执行命令,时间久了会有点烦。我建议把当前用户加到 docker 组里:

sudo usermod -aG docker $USER
newgrp docker

然后注销重新登录,之后就不用加 sudo 了。

避坑指南:我曾经在 Ubuntu 上遇到过一个问题——安装完成后,Docker 服务没有自动启动。解决办法很简单,手动启动并设置开机自启:

sudo systemctl enable docker
sudo systemctl start docker

验证安装是否成功

无论你在哪个系统上安装,最后都可以运行这个经典的测试命令:

docker run hello-world

这条命令会从 Docker Hub(官方镜像仓库)拉取一个叫 hello-world 的镜像,然后运行它。如果看到类似下面的输出,说明 Docker 已经在你的机器上正常工作:

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

看到这个界面,你的 Docker 环境就算搭建好了。下一步,我们可以正式开始用它来封装 MaxQuant 了。