第2章 Docker基础:安装与配置

说实话,第一次接触Docker的时候,我也觉得它有点玄乎。什么容器、镜像、仓库,听着像物流公司。但干我们这行的,最头疼的就是环境不一致:你在Ubuntu上跑通的流程,换到CentOS上全崩了。Docker就是来解决这个问题的——把整个分析环境打包,走到哪跑到哪。

这一章我们把基础打牢。我带你一步步装好Docker,配好环境。这可是后续所有分析流程的根基。

2.1 安装前检查

别急着敲命令。先看看你的机器够不够格。这点很重要,我在项目里见过有人折腾半天,结果发现内核版本太老。

检查项最低要求备注
操作系统Ubuntu 20.04+ / CentOS 7+LTS版本优先
Linux内核3.10以上推荐4.15+
CPU架构x86_64 / arm64大部分服务器都支持
磁盘空间20GB以上宏基因组镜像挺大的
内存4GB以上8GB以上更稳

内核版本怎么看?

运行下面这条命令,一眼就清楚了:

uname -r

输出类似 5.4.0-150-generic 就没问题。如果低于3.10,我建议你直接升级系统吧。

我个人习惯先确认一下系统是不是64位的。32位系统跑Docker会很吃力,而且很多镜像都不支持。

uname -m

输出 x86_64 或 aarch64 就对了。看到 i686?嗯,你得重装系统了。

2.2 安装Docker Engine

装Docker其实就几步。不同系统命令稍有区别,但核心思路一样。我以Ubuntu为例带你走一遍,CentOS的用户注意看后面的小贴士。

2.2.1 Ubuntu 安装步骤

  1. 更新软件包索引
sudo apt update
  1. 安装依赖包
sudo apt install -y ca-certificates curl gnupg lsb-release
  1. 添加Docker官方GPG密钥
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
  1. 设置稳定版仓库
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
  1. 安装Docker Engine
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

CentOS用户看这里

其实就是换一下源和包管理器。核心命令:

sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

装完记得启动服务:sudo systemctl start docker。

2.3 配置镜像加速器

国内拉取Docker镜像速度……你懂的。我曾经在项目里等一个宏基因组镜像,硬生生拖了40分钟。后来配了加速器,几分钟就搞定了。

加速器配置很简单。编辑或创建 /etc/docker/daemon.json:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "https://hub-mirror.c.163.com"
  ]
}
EOF

配置完了别忘重启Docker:

sudo systemctl daemon-reload
sudo systemctl restart docker

为什么用多个镜像地址?说白了,一个挂了你还能用另一个。我在生产环境里碰到过单点故障,从那以后就习惯多配几个备用的。

2.4 非root用户使用docker

每次敲命令都加 sudo,烦不烦?我反正是受不了。而且你想想看,在脚本里还要小心提权问题,很麻烦。

解决办法是把你自己的用户加入 docker 组:

sudo usermod -aG docker $USER

然后退出重新登录,或者执行:

newgrp docker

验证一下:

docker ps

能正常显示列表,说明权限搞定了。

安全警告

加入docker组的用户相当于有了root权限。因为Docker可以挂载宿主机目录,甚至直接操作内核。我个人建议:只在可信的机器上这样做,别在多人共享的服务器上随意开放。

2.5 验证安装

来个经典的 hello-world 测试。虽然这个镜像很小,但它能验证整个Docker环境是否正常工作。

docker run hello-world

正常输出应该类似:

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

看到这段信息,说明Docker已经成功安装并且能正常拉取和运行镜像了。

再检查一下版本信息,确认各个组件都匹配:

docker version

输出会显示Client和Server两部分的版本。我之前遇到过客户端版本和服务端版本不一致,导致有些API调用失败。万一遇到类似情况,先检查版本。

还有,记得确认一下Docker Compose是否装上了:

docker compose version

这些信息对后面章节很重要

记下你的Docker版本和系统内核版本。后续搭建宏基因组分析环境时,有些镜像对版本有要求。比如一些基于CUDA的镜像,必须要匹配特定的Docker版本。

2.6 本章知识结构

下面这张图帮你理清本章的知识脉络。安装与配置就这些核心点,缺一不可。

Docker基础:安装与配置 知识结构 Docker 安装配置 ① 系统检查 内核 ≥ 3.10 64位操作系统 磁盘/内存充足 ② 安装 Docker Engine Ubuntu / CentOS 命令 docker-ce + containerd docker-compose-plugin ③ 镜像加速器 配置 daemon.json 多镜像地址备用 重启 docker 服务 ④ 非root用户权限 usermod -aG docker ⑤ 验证安装 docker run hello-world

这张图的逻辑很直白:从系统检查开始,一步步往下走。每个环节都卡住了就没法往后推进。尤其是镜像加速器这一步,很多人忽略,结果后面拉大型宏基因组镜像时等得抓狂。我建议你装完立刻就配好。

2.7 常见问题与排错

装Docker一般都很顺利,但万一出问题,别慌。我整理了几个高频坑:

  • 权限拒绝:加了docker组还报错?退出终端重进一次,或者直接重启系统。
  • 无法连接到Docker守护进程:检查服务有没有启动。sudo systemctl status docker 看一下。
  • 镜像拉取超时:检查加速器配置有没有生效。docker info | grep -i mirror 看看有没有输出。
  • 安装包冲突:旧版本没卸载干净。先 sudo apt remove docker docker-engine docker.io 清干净再装。

生产环境注意

如果你要在服务器上部署,建议不要使用 root 用户运行Docker。我曾经见过因为没有限制Docker资源使用,一个容器把整个服务器的CPU吃满,其他服务全挂了。后面我会讲到资源限制的方法,但这里先记住这个教训。