3、Docker安装与配置:在Linux(Ubuntu/CentOS)上安装Docker、在Windows/Mac上安装Docker Desktop、Docker Daemon配置、非root用户运行Docker
3.1 为什么安装Docker比想象中“讲究”
说实话,Docker的安装本身并不复杂。但我在项目中见过太多人因为安装时的小疏忽,后面排查问题花了一整天。比如版本不兼容、权限没配好、或者daemon配置不对导致容器跑不起来。
所以这一章,我会把每个平台的安装细节都讲透。你跟着做就行,别跳步骤。
3.2 在Ubuntu上安装Docker
我个人习惯用Ubuntu做开发环境。它社区活跃,文档也全。安装Docker其实就几步,但每一步都有坑。
3.2.1 卸载旧版本
先看看系统里有没有老版本的Docker。如果有,先卸掉。不然新老版本冲突,你会很头疼。
sudo apt-get remove docker docker-engine docker.io containerd runc
嗯,这一步不是必须的。但如果你之前装过,建议跑一下。我曾经遇到过旧版docker.io和新版冲突,导致容器网络一直不通。
3.2.2 安装依赖
Docker需要一些基础工具来支持HTTPS和软件源管理。
sudo apt-get update
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
3.2.3 添加Docker官方GPG密钥
这一步是为了验证软件包的签名。说白了,就是确保你下载的Docker是官方原版,没被篡改过。
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
3.2.4 添加软件源
把Docker的仓库加到你的apt源列表里。这样以后更新也方便。
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
3.2.5 安装Docker引擎
终于到正题了。直接安装最新版。
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
apt-cache madison docker-ce 查看可用版本列表,然后指定版本号安装。
3.2.6 验证安装
跑一下hello-world镜像,看看Docker能不能正常工作。
sudo docker run hello-world
看到“Hello from Docker!”就说明成功了。我第一次看到这个输出时,还挺有成就感的。
3.3 在CentOS上安装Docker
CentOS和Ubuntu的安装流程大同小异。但有几个细节不一样,我单独拎出来说。
3.3.1 卸载旧版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
3.3.2 安装yum-utils
sudo yum install -y yum-utils
3.3.3 添加软件源
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
3.3.4 安装Docker引擎
sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
3.3.5 启动Docker并设置开机自启
CentOS不会自动启动Docker服务。你需要手动启动,并设置开机自启。
sudo systemctl start docker
sudo systemctl enable docker
3.4 在Windows/Mac上安装Docker Desktop
Windows和Mac的安装就简单多了。说白了,就是下载一个安装包,双击运行。但有几个关键点要注意。
3.4.1 Windows上的安装
Windows上安装Docker Desktop,需要满足两个前提:
- Windows 10 64位专业版/企业版/教育版(或Windows 11)
- 启用Hyper-V和容器功能
安装步骤:
- 去Docker官网下载Docker Desktop for Windows
- 双击安装包,一路默认就行
- 安装完成后,重启电脑
- 启动Docker Desktop,接受许可协议
我记得第一次在Windows上装Docker时,卡在了Hyper-V没开启这一步。后来发现需要在“启用或关闭Windows功能”里手动勾选Hyper-V。嗯,这个坑我踩过。
3.4.2 Mac上的安装
Mac上就简单多了。直接下载Docker Desktop for Mac,拖到Applications文件夹就行。
不过要注意:
- Mac需要是2010年以后的型号(支持Apple Silicon或Intel芯片)
- macOS版本至少是10.15 Catalina
如果你是M1/M2芯片的Mac,记得下载Apple Silicon版本。我有个同事用Intel版本在M1上跑,结果容器启动不了,折腾了半天才发现是版本下错了。
3.5 Docker Daemon配置
Docker Daemon是Docker的后台守护进程。说白了,所有容器操作都是通过它来完成的。默认配置够用,但有些场景需要调整。
3.5.1 配置文件位置
Daemon的配置文件在 /etc/docker/daemon.json。如果这个文件不存在,你可以手动创建。
3.5.2 常用配置项
| 配置项 | 说明 | 示例 |
|---|---|---|
registry-mirrors |
镜像加速器地址 | ["https://your-mirror.com"] |
log-driver |
日志驱动类型 | "json-file" |
log-opts |
日志参数 | {"max-size": "10m", "max-file": "3"} |
storage-driver |
存储驱动 | "overlay2" |
data-root |
数据存储目录 | "/data/docker" |
举个例子,配置镜像加速和日志限制:
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"],
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"storage-driver": "overlay2"
}
sudo systemctl restart docker
3.5.3 配置镜像加速器
国内访问Docker Hub经常很慢。我建议配置一个镜像加速器。常用的有阿里云、中科大、网易等。
配置方法就是在daemon.json里加一行:
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
我曾经在项目上线前,因为没配镜像加速器,拉取一个200MB的镜像花了20分钟。后来配了加速器,3分钟就搞定了。你想想看,这差距有多大。
3.6 非root用户运行Docker
默认情况下,Docker命令需要root权限。每次都要加sudo,很烦对吧?
解决办法很简单:把当前用户加到docker用户组里。
3.6.1 创建docker用户组
如果docker用户组不存在,先创建它。
sudo groupadd docker
3.6.2 将用户加入docker组
sudo usermod -aG docker $USER
这里的 $USER 就是你的当前用户名。如果你要指定其他用户,直接写用户名就行。
3.6.3 重新登录
退出当前终端,重新登录。或者直接重启电脑。这样才能让用户组变更生效。
验证一下:
docker run hello-world
如果不用sudo也能跑,就说明配置成功了。
3.7 避坑指南
最后,分享几个我踩过的坑:
- 版本不兼容: 我曾经在Ubuntu 18.04上装了最新版Docker,结果内核太老,overlay2驱动不支持。后来换了Ubuntu 20.04才解决。
- 磁盘空间不足: Docker默认把数据存在
/var/lib/docker。如果你的根分区空间不大,建议改到其他分区。我就是因为没改,有一次磁盘满了,所有容器都挂了。 - 防火墙规则: Docker会修改iptables规则。如果你自己配了防火墙,可能会冲突。我建议用Docker自带的网络管理,别手动改iptables。
好了,安装配置就讲到这里。下一章我们聊聊Docker的常用命令,到时候你会发现自己已经能熟练操作Docker了。