2. 安装与部署:在Linux/CentOS上安装Docker、配置镜像加速器、Docker daemon配置、验证安装

好,咱们直接进入正题。这一章我带你亲手把Docker环境搭起来。别小看安装这一步,我见过太多项目因为一开始配置没弄好,后面排查问题排查到崩溃。说白了,地基没打牢,楼盖得再高也悬。

2.1 环境准备与系统要求

先看看你的机器。Docker对Linux内核有要求,版本得是3.10以上。怎么查?一条命令搞定:

uname -r

如果输出小于3.10,嗯,你得先升级内核。我个人习惯用CentOS 7.9或8.x,这两个版本我踩过无数坑,相对稳定。

另外,记得把系统更新到最新:

sudo yum update -y

为什么要先更新?我在一个项目里遇到过,旧版本的device-mapper和Docker不兼容,容器启动直接报错。那次排查花了我整整一个下午。所以,别偷懒。

2.2 卸载旧版本(如果有)

如果你之前装过Docker,先清理干净。否则新老版本冲突,你会怀疑人生的。

sudo yum remove docker \
                docker-client \
                docker-client-latest \
                docker-common \
                docker-latest \
                docker-latest-logrotate \
                docker-logrotate \
                docker-engine

我曾经帮一个客户排查问题,他机器上装了三个不同版本的Docker,结果容器网络全乱套了。嗯,这种情况直接重装系统反而更快。

2.3 安装Docker Engine

我推荐用官方仓库安装,这样后续更新方便。先安装依赖包:

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

然后添加Docker的官方仓库:

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

接下来安装Docker Engine:

sudo yum install -y docker-ce docker-ce-cli containerd.io

这里有个小细节。安装过程中如果提示GPG密钥验证失败,别慌。检查一下系统时间是不是对的。我遇到过一台服务器时间差了两年,GPG签名验证自然过不去。

2.4 启动Docker并设置开机自启

安装完别急着用,先启动服务:

sudo systemctl start docker

设置开机自启,这个一定要做。你想想看,服务器重启后Docker没起来,所有容器都挂了,那画面太美我不敢看。

sudo systemctl enable docker

2.5 配置镜像加速器

国内拉取Docker镜像,那速度,简直了。我刚开始用Docker时,拉一个几百兆的镜像等了一个小时。后来才知道有镜像加速器这玩意儿。

编辑Docker的配置文件:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://你的加速器地址.mirror.aliyuncs.com"]
}
EOF

加速器地址去哪搞?阿里云、腾讯云、华为云都有免费的。我个人习惯用阿里云的,注册个账号就能拿到专属地址。

小提示: 配置完加速器后,记得重启Docker:sudo systemctl daemon-reload && sudo systemctl restart docker

2.6 Docker daemon核心配置

daemon.json这个文件,说白了就是Docker的命根子。除了镜像加速,还有很多关键配置可以在这里调。

我给你列几个我常用的配置项:

配置项 说明 我的建议值
storage-driver 存储驱动 overlay2(性能最好)
log-driver 日志驱动 json-file
log-opts.max-size 单个日志文件大小 10m
log-opts.max-file 日志文件保留数量 3
exec-opts 容器运行时参数 ["native.cgroupdriver=systemd"]

一个完整的daemon.json示例:

{
  "registry-mirrors": ["https://你的加速器地址.mirror.aliyuncs.com"],
  "storage-driver": "overlay2",
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  },
  "exec-opts": ["native.cgroupdriver=systemd"],
  "live-restore": true
}
注意: live-restore这个配置我强烈建议加上。它能让Docker daemon重启时,正在运行的容器不受影响。我曾经在生产环境重启Docker,结果所有容器都停了,那叫一个惨。

2.7 验证安装

配置完了,怎么知道装好了没?跑几个命令验证一下。

先看Docker版本:

docker version

输出应该包含Client和Server两部分信息。如果只有Client没有Server,说明Docker daemon没启动。

再看系统信息:

docker info

这个命令会显示Docker的详细配置,包括存储驱动、镜像加速器、容器数量等。我每次配置完都会跑一下这个命令,确认所有配置都生效了。

最后跑一个Hello World容器:

docker run hello-world

如果看到类似这样的输出,恭喜你,安装成功了:

Hello from Docker!
This message shows that your installation appears to be working correctly.
避坑指南: 我曾经在CentOS 8上安装Docker,跑hello-world时一直报"container_linux.go:380: starting container process caused: process_linux.go:545: container init caused: rootfs_linux.go:76: mounting..."。后来发现是SELinux的问题。临时关闭SELinux可以解决:sudo setenforce 0。但生产环境建议配置SELinux策略,而不是直接关闭。

2.8 非root用户运行Docker

默认情况下,Docker需要root权限。但你想想看,每次敲命令都要加sudo,多麻烦。把当前用户加入docker组:

sudo usermod -aG docker $USER

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

newgrp docker

验证一下:

docker ps

如果没报权限错误,说明配置成功了。

安全提醒: 把用户加入docker组,相当于给了这个用户root权限。因为docker组里的用户可以启动任何容器,包括挂载宿主机目录的容器。所以,别把不信任的用户加进去。

2.9 总结

好了,到这里Docker的安装和部署就完成了。你想想看,整个过程其实不复杂,但每个环节都有坑。从内核版本检查,到镜像加速器配置,再到daemon.json的调优,每一步都值得认真对待。

我个人习惯把daemon.json的配置版本化管理起来,这样换机器时直接复制过去就行。嗯,下一章我会带你深入Docker的核心概念——镜像和容器,到时候咱们再聊。

公众号:蓝海资料掘金营,微信deep3321