2、Docker安装与配置:在Ubuntu/CentOS上安装Docker、配置镜像加速器、Docker daemon配置

好,咱们正式开始动手了。这一章我带你走一遍Docker的安装和配置流程。说实话,安装本身并不复杂,但很多新手容易在细节上翻车。我当年第一次装Docker时,就因为漏了一个步骤,折腾了整整一个下午。嗯,咱们今天就把这些坑都填平。

2.1 在Ubuntu上安装Docker

我个人习惯用Ubuntu做开发环境,社区活跃,文档也全。Ubuntu上安装Docker,官方推荐用apt仓库的方式,而不是直接apt install docker.io。为什么?因为仓库里的版本太老了,你想想看,用老版本可能连新特性都体验不到。

先清理旧版本(如果有的话):

sudo apt remove docker docker-engine docker.io containerd runc

然后安装依赖包:

sudo apt update
sudo apt install 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引擎:

sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
小提示:安装完成后,记得把当前用户加入docker组,这样就不用每次敲sudo了。命令是:sudo usermod -aG docker $USER。然后退出重新登录,或者newgrp docker一下。

2.2 在CentOS上安装Docker

CentOS的安装思路和Ubuntu类似,但命令有些不同。我在生产环境里用过CentOS 7和8,都挺稳的。

先卸载旧版本:

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

安装yum-utils:

sudo yum install -y yum-utils

添加Docker仓库:

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

安装Docker引擎:

sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin

启动Docker并设置开机自启:

sudo systemctl start docker
sudo systemctl enable docker
注意:CentOS 8从2021年底就停止维护了,如果你还在用,建议尽快迁移到CentOS Stream或者Rocky Linux。我曾经在一个老项目里看到CentOS 8的服务器,结果yum源都失效了,装个包都得手动找镜像。

2.3 验证安装

装完了,怎么知道成没成功?跑个hello-world镜像试试:

docker run hello-world

如果看到类似这样的输出,就说明安装成功了:

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

嗯,这里要注意,第一次运行会从Docker Hub拉取镜像,如果网络不好可能会超时。别慌,咱们接下来就配置镜像加速器。

2.4 配置镜像加速器

Docker Hub在国内的访问速度,说实话,有时候真的慢得让人抓狂。我记得有一次部署一个项目,拉一个几百兆的镜像等了快半小时。后来配了加速器,几分钟就搞定了。

常用的镜像加速器有阿里云、腾讯云、华为云等。这里以阿里云为例:

首先,登录阿里云容器镜像服务控制台,获取你的专属加速器地址。每个人的地址都不一样,格式类似:https://xxxxx.mirror.aliyuncs.com

然后编辑Docker的配置文件:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"]
}
EOF

重启Docker服务:

sudo systemctl daemon-reload
sudo systemctl restart docker

验证加速器是否生效:

docker info | grep -A 1 "Registry Mirrors"

如果看到你配置的地址,就说明配置成功了。

重要:可以配置多个镜像加速器,用逗号分隔。比如同时配置阿里云和腾讯云的,这样如果一个挂了,另一个还能用。我一般会配两到三个,以防万一。

2.5 Docker daemon配置详解

Docker daemon是Docker的后台进程,它的配置都写在/etc/docker/daemon.json里。这个文件默认不存在,需要自己创建。说白了,Docker的所有核心行为,都靠这个文件来调教。

常用的配置项有哪些?我给你列个表:

配置项 说明 示例值
registry-mirrors 镜像加速器地址 ["https://xxxxx.mirror.aliyuncs.com"]
insecure-registries 非HTTPS的私有仓库地址 ["192.168.1.100:5000"]
data-root Docker数据存储目录 "/data/docker"
log-driver 日志驱动 "json-file"
log-opts 日志选项 {"max-size": "10m", "max-file": "3"}
exec-opts 运行时选项 ["native.cgroupdriver=systemd"]
storage-driver 存储驱动 "overlay2"

我挑几个重点说说:

data-root:默认Docker的数据存在/var/lib/docker,但根分区通常不大。我在项目里遇到过根分区被Docker日志和镜像撑爆的情况,那叫一个惨。所以建议把数据目录挪到大磁盘上。

log-opts:容器日志如果不限制大小,会一直增长。我曾经有个容器跑了半年,日志文件占了50多G。所以一定要设置max-size和max-file,比如每个日志文件最大10M,最多保留3个。

exec-opts:这个在Kubernetes环境下特别重要。如果你用systemd管理cgroup,一定要设置native.cgroupdriver=systemd,否则kubelet会报错。

一个完整的daemon.json示例:

{
  "registry-mirrors": [
    "https://xxxxx.mirror.aliyuncs.com",
    "https://docker.mirrors.ustc.edu.cn"
  ],
  "insecure-registries": [
    "192.168.1.100:5000"
  ],
  "data-root": "/data/docker",
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  },
  "exec-opts": [
    "native.cgroupdriver=systemd"
  ],
  "storage-driver": "overlay2",
  "live-restore": true
}
小技巧:配置完daemon.json后,用docker info检查一下配置是否生效。如果Docker启动失败,可以查看日志:journalctl -u docker.service。我遇到过好几次因为JSON格式错误导致Docker起不来的情况,少个逗号或者多个逗号都不行。

2.6 常见问题与避坑指南

最后,分享几个我踩过的坑:

  • 权限问题:安装完Docker后,如果不用sudo跑不了,八成是没把用户加到docker组。或者加了组但没重新登录。
  • 端口冲突:Docker默认占用2375/2376端口,如果和现有服务冲突,可以在daemon.json里改hosts配置。
  • 存储空间:Docker默认数据目录在根分区,建议提前规划好磁盘空间。我曾经因为根分区满了,导致整个系统都卡住了。
  • 内核版本:Docker对内核版本有要求,Ubuntu建议18.04以上,CentOS建议7.6以上。内核太老的话,overlay2存储驱动可能用不了。

好了,这一章的内容就到这里。安装和配置是Docker的基础,基础打牢了,后面构建镜像、编排容器才能得心应手。下一章咱们聊聊Docker镜像的构建,那才是真正有意思的部分。