Docker 基础概念与安装
为什么要学容器化?
做生物信息学的人,最头疼什么?我猜是环境依赖。
记得刚入行那会儿,为了跑一个 RNA-seq 质控管线,我在三台服务器上反复装软件。每次不是 Python 版本冲突,就是某个 C 库没装对。一个流程拖了两周。后来同事丢给我一个 Dockerfile,直接在容器里跑。嗯,从那时起我就再也没被环境折腾过。
说白了,容器化就是把你的应用和它的依赖打包成一个独立单元。你想想看,这样不管在哪台机器上,跑出来的结果和日志完全一致。对质控管线这种要求可重复的场景,简直是标配。
核心观点: 容器 ≠ 虚拟机。容器共享宿主操作系统内核,启动快、体积小、资源利用率高。虚拟机每份自带完整 OS,开销大得多。
容器化原理——轻量级隔离
容器的底层用了 Linux 的两项关键技术:
- Namespace 隔离进程、网络、文件系统等视图。每个容器看到自己的独立世界。
- Cgroups 限制 CPU、内存、磁盘 I/O。防止某个容器吃光资源。
我在项目中遇到过:某次跑质控管线时,容器内进程占满内存,直接把宿主机搞挂了。后来加了内存限制,再没出过问题。
| 特性 | 虚拟机 | 容器 |
|---|---|---|
| 启动速度 | 分钟级 | 秒级 |
| 镜像大小 | GB~10+ GB | MB~数百 MB |
| 内核依赖 | 自有内核 | 共享宿主机内核 |
| 隔离粒度 | 硬件级虚拟化 | 操作系统级进程隔离 |
Docker 架构——客户端↔守护进程↔仓库
我个人习惯先把整体架构画在脑子里,再动手操作。Docker 的架构其实很简单:
- 客户端(docker CLI):你敲命令的地方。
- 守护进程(dockerd):真正干活的后台服务,管理镜像、容器、网络等。
- 镜像(Image):只读模板,用来创建容器。
- 容器(Container):镜像运行后的实例。有读写层。
- 仓库(Registry):存储和分发镜像的地方,比如 Docker Hub。
你敲 docker run hello-world,客户端把这个命令发给守护进程。守护进程从仓库拉取镜像,创建一个容器并运行它。
提示: 如果你在 Mac 或 Windows 上,Docker Desktop 会替你管理一个轻量 Linux 虚拟机来运行守护进程。实际操作上跟 Linux 完全一致,不用特别在意底层差异。
安装 Docker——一步一坑
下面分别给出不同系统的安装方式。我曾经在 Ubuntu 20.04 上直接用 apt install docker.io,结果版本太旧,后端 API 不兼容,折腾了半天。建议用官方仓库。
Ubuntu / Debian
# 卸载旧版
sudo apt remove docker docker-engine docker.io containerd runc
# 安装依赖
sudo apt update
sudo apt install ca-certificates curl gnupg lsb-release
# 添加 Docker 官方 GPG key 和仓库
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装 Docker Engine
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
CentOS / RHEL
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo systemctl start docker
sudo systemctl enable docker
macOS / Windows
直接下载 Docker Desktop 安装包:
https://www.docker.com/products/docker-desktop/
(注意:不要用包管理器安装,容易版本混乱)
避坑: 在 macOS 上,Docker Desktop 默认使用 HyperKit 虚拟机。如果你的质控管线对磁盘 I/O 要求高,建议在设置里把资源 – Disk image 调大,避免因空间不足导致容器启动失败。
验证安装——确认一切就绪
安装完别急着跑。先做这三个检查:
- 查看版本
docker --version
# 输出类似:Docker version 24.0.7, build afdd53b
- 运行 hello-world(验证守护进程和拉取功能)
docker run hello-world
# 能看到一段 Hello from Docker! 的英文提示
- 查看系统信息
docker info
# 重点看 Containers: 0, Images: 0, Server Version: 24.0.7
嗯,如果你走到这一步没报错,恭喜,Docker 已经跑起来了。
小技巧: 如果你在 Linux 上不想每次敲
注意:加入组后要重新登录才能生效。我自己一直这么做,非常方便。
sudo docker,可以把当前用户加入 docker 组:sudo usermod -aG docker $USER。注意:加入组后要重新登录才能生效。我自己一直这么做,非常方便。
到这里你掌握了什么?
第一章我们覆盖了:
- 容器化原理:Namespace + Cgroups,与虚拟机的区别
- Docker 架构:客户端、守护进程、镜像、容器、仓库的协作关系
- 安装步骤:Ubuntu、CentOS、macOS/Windows 的官方方式
- 验证命令:version、run hello-world、info