第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 安装步骤
- 更新软件包索引
sudo apt update
- 安装依赖包
sudo apt install -y ca-certificates curl gnupg lsb-release
- 添加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
- 设置稳定版仓库
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 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 本章知识结构
下面这张图帮你理清本章的知识脉络。安装与配置就这些核心点,缺一不可。
这张图的逻辑很直白:从系统检查开始,一步步往下走。每个环节都卡住了就没法往后推进。尤其是镜像加速器这一步,很多人忽略,结果后面拉大型宏基因组镜像时等得抓狂。我建议你装完立刻就配好。
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吃满,其他服务全挂了。后面我会讲到资源限制的方法,但这里先记住这个教训。