Linux系统配置安装docker(以ubuntu为例)
Docker 是一款基于容器技术的开源平台,它通过将应用程序及其依赖环境打包成标准化的容器(Container),实现了 “一次构建,处处运行” 的跨环境部署能力。与传统虚拟机相比,Docker 容器不依赖完整操作系统内核,而是通过 Linux 内核的 Namespace 和 Cgroup 技术实现资源隔离,具有轻量化、启动快(毫秒级)、资源占用低的显著优势。
本文提供一种尽可能安全、不重启主机、不更新系统的方法来安装docker,适用于linux操作系统,无论是公用服务器、个人主机都适用。
一、删除旧版/残留Docker
为了方便后续的docker正常安装于配置,需要要彻底删除 Linux 系统上的 Docker 及相关残留。
=================注意:=================
- 数据丢失:上述操作会删除所有 Docker 镜像、容器和卷,请提前备份重要数据。
- 依赖检查:如果其他程序依赖 Docker(如 Kubernetes),请谨慎删除。
- Snap 安装的 Docker:如果通过
snap安装,需额外执行:
sudo snap remove docker
如果你已经清楚了以上注意事项,并做好了重要数据(镜像、容器等)的备份工作,可以按照以下步骤操作:
1. 卸载 Docker 相关包
# 停止Docker服务
sudo systemctl stop docker
# 卸载Docker软件包(适用于apt安装的版本)
sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker.io podman-docker
# 卸载依赖包(可选,会删除未被其他程序使用的依赖)
sudo apt-get autoremove --purge
# 检查是否还有Docker相关包残留
dpkg -l | grep docker
2. 删除 Docker 数据目录
# 删除Docker根目录
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
# 删除Docker配置文件
sudo rm -rf /etc/docker
sudo rm -rf /etc/containerd
# 删除Docker镜像、容器和网络(谨慎操作,会删除所有数据)
sudo rm -rf /var/lib/docker
sudo rm -rf /var/run/docker
3. 删除残留文件和符号链接
# 查找并删除所有Docker相关文件(谨慎操作)
sudo find / -name "*docker*" -exec rm -rf {} \; 2>/dev/null
# 删除Docker命令行补全文件
sudo rm -f /etc/bash_completion.d/docker
4. 清理用户组和环境变量
# 检查并删除docker用户组(如果没有其他程序依赖)
sudo groupdel docker
# 移除用户的docker组成员身份
sudo gpasswd -d $USER docker
5. 清理系统服务和配置
# 删除Docker服务文件
sudo rm -f /etc/systemd/system/docker.service
sudo rm -f /etc/systemd/system/docker.socket
# 重新加载systemd管理器配置
sudo systemctl daemon-reload
6. 验证删除结果
# 检查Docker命令是否还存在
docker --version # 应提示"command not found"
# 检查Docker进程是否运行
ps aux | grep docker # 不应看到Docker相关进程
# 检查Docker目录是否存在
ls /var/lib/docker # 应提示"no such file or directory"
二、检查主机情况
首先需要确认服务器的 Linux 发行版和版本(例如 Ubuntu、CentOS 等)以及当前 Docker 相关软件的安装情况。命令如下:
1. 查看系统发行版和版本
cat /etc/os-release
根据以上输出的结果,我的服务器运行的是 Ubuntu 22.04.5 LTS系统。
之后所有的命令都是可以直接在ubuntu系统中运行的,对于centos系统需要使用不同命令的时候我会注释。
2. 检查是否已安装Docker
docker --version
输出以上类似内容就代表目前系统中还没安装Docker。
3. 检查是否存在旧版本Docker
dpkg -l | grep docker
rpm -qa | grep docker # 适用于CentOS/RHEL
如果你的系统中已有Docker安装,或者有残留未清除干净,请参考“一、删除旧版/残Docker”部分的内容。
4. 验证内核版本(可选)
如果你想确认当前内核版本,可以运行:
uname -r
我的系统Ubuntu 22.04 默认的内核版本(5.15)已经满足 Docker 的要求(>=3.10),因此安装过程中不会涉及内核更新。
Docker官方文档中要求操作系统的版本至少为Linux内核3.10及以上,以确保Docker能够正常运行。如果你的系统内核版本号小于3.10,则需要升级内核。
三、安装Docker
1. 更新包索引并安装必要的依赖包
命令如下:
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg
2. 添加 Docker 官方 GPG 密钥
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
3. 添加 Docker 官方仓库
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
4. 再次更新包索引并安装 Docker 引擎
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
5. 配置非 root 用户访问(可选但推荐)
为了避免每次使用 Docker 都需要输入 sudo,可以将你的用户添加到 docker 用户组:
sudo usermod -aG docker $USER
newgrp docker
6. 配置国内 Docker 镜像源
执行以下步骤配置国内镜像源:
# 创建或编辑Docker配置文件
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://registry.docker-cn.com",
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com",
"https://ccr.ccs.tencentyun.com"
]
}
EOF
# 重新加载Docker配置并重启服务
sudo systemctl daemon-reload
sudo systemctl restart docker
7. 验证镜像配置生效(和6. 一同执行)
# 检查Docker配置
sudo docker info | grep -A 1 'Registry Mirrors'
8. 检查 Docker 服务状态
sudo systemctl status docker
如果输出图中类似内容,主要是“Active:active(running)”就代表Docker服务运行正常。
9. 验证一下
sudo docker run hello-world
如果出现 "Hello from Docker!" 的输出,说明 Docker 已成功安装并运行。
四、网络问题及解决方法
1. 检查 DNS 设置
修改 Docker 的 DNS 配置,使用更可靠的公共 DNS 服务器
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo tee /etc/systemd/system/docker.service.d/dns.conf <<EOF
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd --dns 8.8.8.8 --dns 1.1.1.1
EOF
# 重新加载配置并重启Docker
sudo systemctl daemon-reload
sudo systemctl restart docker
2. 使用 HTTP 镜像源(如果 HTTPS 被封锁)
某些环境可能限制了 HTTPS 访问,可以尝试配置 HTTP 镜像源
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"http://hub-mirror.c.163.com",
"http://mirror.baidubce.com"
],
"insecure-registries": [
"hub-mirror.c.163.com",
"mirror.baidubce.com"
]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
3. 检查防火墙设置
确认防火墙是否允许 Docker 通信
# 对于Ubuntu默认的ufw防火墙
sudo ufw allow 2375/tcp # Docker默认端口
sudo ufw reload
# 对于CentOS/RHEL的firewalld
sudo firewall-cmd --zone=public --add-port=2375/tcp --permanent
sudo firewall-cmd --reload
4. 使用代理服务器(如果有可用代理)
如果服务器可以通过代理访问外网,可以配置 Docker 使用代理
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo tee /etc/systemd/system/docker.service.d/proxy.conf <<EOF
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:8080"
Environment="HTTPS_PROXY=http://proxy.example.com:8080"
Environment="NO_PROXY=localhost,127.0.0.1,docker-registry.example.com"
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
5. 手动测试网络连接
使用 curl 命令测试与镜像源的连接
curl -v https://registry.docker-cn.com
curl -v https://docker.mirrors.ustc.edu.cn
6. 备选方案:手动下载镜像
如果上述方法都失败,可以尝试手动下载镜像文件并导入,以下以 hello-world 镜像为例
- 在可以访问 Docker Hub 的机器上
docker pull hello-world
docker save hello-world -o hello-world.tar
2. 将 tar 文件复制到服务器上
scp hello-world.tar user@your-server:/path/to/
3. 在服务器上导入镜像
sudo docker load -i hello-world.tar
sudo docker run hello-world
至此,docker安装方法介绍结束。
如果你觉得本教程对你有所帮助,欢迎赞同、喜欢、分享!!!

浙公网安备 33010602011771号