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
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
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
}
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镜像的构建,那才是真正有意思的部分。