Linux配置Docker环境(以Ubuntu为例)
-
目录
一、为什么在Ubuntu上配置Docker?
在Linux系统中,Ubuntu是最主流的发行版之一,它不仅社区活跃、文档丰富,还对Docker有完美的兼容性——Docker本质上依赖Linux内核的容器化技术(如Namespace、Cgroups),在Ubuntu上运行时无需额外的虚拟化层(如Windows的Hyper-V、macOS的虚拟机),性能更接近原生,且配置步骤更简洁。
对开发者而言,在Ubuntu上配置Docker,既能避免Windows/macOS下的“环境割裂”问题,又能模拟生产环境(大多数生产服务器使用Linux),让“开发环境与生产环境一致”的目标更容易实现。
[示意1:Ubuntu与Docker的适配优势]
Windows/macOS运行Docker → 依赖虚拟机/Hyper-V → 性能损耗+配置复杂 | 对比 | Ubuntu运行Docker → 直接调用Linux内核 → 原生性能+配置简洁
我曾在Windows上遇到过Docker容器无法访问宿主机网络的问题,切换到Ubuntu后,只需简单配置网络参数就能解决,这也是我推荐在Ubuntu上使用Docker的重要原因。
二、前置准备:确认Ubuntu环境与权限
在开始配置前,需要完成两项基础检查,避免后续出现兼容性问题。
1. 检查Ubuntu系统版本
Docker对Ubuntu的版本有明确要求,需确保系统为 Ubuntu 20.04 LTS、22.04 LTS 或更高版本(LTS版本长期支持,更稳定)。
检查版本的命令:
lsb_release -a
若输出中“Release”字段为20.04、22.04等,说明版本符合要求;若版本过低,建议先升级系统(执行
sudo apt upgrade
)或重新安装LTS版本。2. 确认当前用户权限
Docker命令默认需要
root
权限(或加入docker
用户组的权限),后续操作中需频繁使用sudo
,建议提前确认当前用户是否有sudo
权限:# 执行简单的sudo命令,测试权限 sudo echo "权限正常"
若输出“权限正常”,说明
sudo
权限可用;若提示“xxx is not in the sudoers file”,需联系系统管理员添加sudo
权限(或切换到root
用户操作)。3. 卸载旧版本Docker(可选)
若之前安装过旧版Docker(如
docker
、docker.io
、docker-engine
),需先卸载,避免冲突:sudo apt-get remove docker docker-engine docker.io containerd runc
即使从未安装过,执行此命令也不会报错,可放心操作。
三、核心步骤:Ubuntu上安装Docker
按照“配置仓库→安装依赖→安装Docker”的顺序操作,全程通过官方源安装,确保安全性和稳定性。
1. 安装必要的依赖工具
首先安装
apt-transport-https
、ca-certificates
等工具,这些工具用于支持HTTPS协议的仓库访问和GPG密钥验证:sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
apt-transport-https
:允许apt
通过HTTPS访问仓库;ca-certificates
:用于验证HTTPS证书,确保仓库来源可靠;curl
:用于下载Docker官方GPG密钥。
2. 添加Docker官方GPG密钥
为了确保后续安装的Docker包是官方发布的(避免篡改),需要添加Docker的官方GPG密钥并验证:
# 下载官方GPG密钥并添加到系统信任列表 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg # 验证密钥(可选,确保密钥正确) sudo gpg --no-default-keyring --keyring /usr/share/keyrings/docker-archive-keyring.gpg --list-keys
若验证时输出包含“Docker Release (CE deb) docker@docker.com”,说明密钥正确。
3. 配置Docker官方仓库
将Docker官方仓库添加到Ubuntu的
apt
源列表中,后续安装Docker时会从官方源下载,而非Ubuntu默认的第三方源:echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$(dpkg --print-architecture)
:自动识别系统架构(如amd64
、arm64
);$(lsb_release -cs)
:自动获取Ubuntu的版本代号(如20.04对应focal
,22.04对应jammy
)。
4. 安装Docker Engine
配置完仓库后,即可安装最新版的Docker Engine(包含
docker-ce
、docker-ce-cli
、containerd.io
):# 更新apt源列表(让系统识别新添加的Docker仓库) sudo apt-get update # 安装Docker Engine sudo apt-get install -y docker-ce docker-ce-cli containerd.io
5. 验证安装是否成功
安装完成后,通过启动Docker服务并运行
hello-world
容器,验证Docker是否正常工作:# 启动Docker服务(Ubuntu 20.04+/22.04默认使用systemd) sudo systemctl start docker # 设置Docker开机自启(避免每次重启系统后手动启动) sudo systemctl enable docker # 运行hello-world容器,测试Docker功能 sudo docker run hello-world
若输出包含“Hello from Docker!”的欢迎信息,说明Docker已成功安装并能正常运行。
四、关键配置:让Docker用起来更顺手
基础安装完成后,还需要做一些优化配置,比如免
sudo
使用Docker、更换国内镜像源,避免后续使用中频繁踩坑。1. 配置免sudo使用Docker(推荐)
默认情况下,每次执行
docker
命令都需要加sudo
,频繁操作很繁琐。通过将当前用户加入docker
用户组,可以实现免sudo
使用Docker:# 将当前用户加入docker用户组 sudo usermod -aG docker $USER # 注销当前用户并重新登录(使配置生效)
⚠️ 注意:修改用户组后,必须注销当前会话(如关闭终端重开、重启系统),否则配置不会生效。
生效后,执行
docker ps
(无需sudo
),若能正常显示容器列表(即使为空),说明配置成功。我第一次配置时忘记注销,以为命令出错,后来才发现是用户组配置未生效,这个细节一定要注意。
2. 更换Docker国内镜像源(解决拉取慢问题)
Docker默认使用国外的官方仓库(
https://hub.docker.com/
),国内访问时经常出现拉取镜像慢、超时的问题。通过配置国内镜像源(如阿里云、网易云),可以大幅提升拉取速度。步骤如下:
-
创建Docker配置目录(若不存在):
sudo mkdir -p /etc/docker
-
编写配置文件
daemon.json
:sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": [ "https://docker.mirrors.ustc.edu.cn", # 中国科学技术大学镜像 "https://hub-mirror.c.163.com", # 网易云镜像 "https://cr.console.aliyun.com" # 阿里云镜像(需登录阿里云获取专属地址,更稳定) ] } EOF
⚠️ 阿里云镜像建议使用专属地址:登录阿里云控制台(https://cr.console.aliyun.com/),在“镜像加速器”中获取自己的专属地址,替换上述配置中的阿里云地址,速度更快且更稳定。
-
重启Docker服务,使配置生效:
sudo systemctl daemon-reload sudo systemctl restart docker
-
验证镜像源是否生效:
docker info
若输出中“Registry Mirrors”字段包含刚才配置的国内地址,说明配置成功。
3. 检查Docker服务状态(日常维护)
后续使用中,若遇到Docker无法启动的问题,可通过以下命令检查服务状态:
# 查看Docker服务状态 sudo systemctl status docker # 若服务异常,重启Docker sudo systemctl restart docker # 查看Docker日志(排查故障) sudo journalctl -u docker -f
五、常见问题:安装与使用中的坑及解决方法
在配置过程中,可能会遇到各种小问题,这里总结几个我踩过的坑及解决方案。
1. 安装时提示“无法定位包docker-ce”
原因:Docker仓库配置错误,导致
apt
无法找到docker-ce
包。
解决方案:- 检查
/etc/apt/sources.list.d/docker.list
文件是否正确:
确保内容包含“cat /etc/apt/sources.list.d/docker.list
https://download.docker.com/linux/ubuntu
”和正确的版本代号(如focal
、jammy
)。 - 重新执行“添加GPG密钥”和“配置仓库”的步骤,确保命令没有拼写错误。
- 再次更新
apt
源列表:sudo apt-get update
2. 运行
docker run hello-world
时提示“permission denied”原因:当前用户未加入
docker
用户组,无权限操作Docker。
解决方案:- 重新执行“配置免sudo使用Docker”的步骤,确保用户已加入
docker
组:groups $USER # 查看当前用户所属组,若包含docker则说明已加入
- 注销当前用户并重新登录,使用户组配置生效。
3. 拉取镜像时出现“timeout”或“no such host”
原因:国外镜像源访问不畅,或国内镜像源配置错误。
解决方案:- 检查网络连接是否正常(如
ping baidu.com
)。 - 重新配置国内镜像源,确保
daemon.json
中的地址正确(尤其是阿里云专属地址)。 - 重启Docker服务:
sudo systemctl restart docker
- 尝试手动指定镜像源拉取(临时方案):
# 以拉取nginx为例,指定阿里云镜像源 docker pull registry.cn-hangzhou.aliyuncs.com/library/nginx
4. Docker服务无法启动,提示“failed to start docker.service: Unit docker.service is masked”
原因:Docker服务被“屏蔽”(masked),通常是误操作导致。
解决方案:- 解除服务屏蔽:
sudo systemctl unmask docker.service sudo systemctl unmask docker.socket
- 重启Docker服务:
sudo systemctl start docker
六、总结:Ubuntu配置Docker的完整流程回顾
将整个配置过程梳理为“5步核心流程”,方便后续查阅或重新配置:
- 前置检查:确认Ubuntu版本(20.04+/22.04 LTS)、sudo权限,卸载旧版Docker;
- 安装依赖:
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
; - 配置仓库:添加Docker官方GPG密钥→配置官方仓库→更新apt源;
- 安装Docker:
sudo apt-get install docker-ce docker-ce-cli containerd.io
→启动服务并设为开机自启; - 优化配置:将用户加入docker组(免sudo)→配置国内镜像源→验证生效。
按照这个流程操作,在Ubuntu上配置Docker通常能一次成功。后续使用中,若遇到问题,可通过
docker info
、systemctl status docker
、journalctl -u docker
等命令排查,大部分问题都能快速解决。