在Ubuntu上安装docker(docker engine)和docker compose

Docker是一个开源的容器化平台,它允许开发者将应用程序及其依赖打包到一个可移植的容器中,从而实现一致的运行环境。安装过程涉及: 卸载旧版本、配置APT仓库、安装软件包、验证以及后置配置。

文章目录

  • [1. 先决条件检查](#1. 先决条件检查)
  • [2. 卸载旧版本的Docker](#2. 卸载旧版本的Docker)
  • [3. 设置Docker的APT仓库](#3. 设置Docker的APT仓库)
    • [3.1 更新软件包索引并安装依赖:](#3.1 更新软件包索引并安装依赖:)
    • [3.2 下载并添加Docker官方GPG密钥:](#3.2 下载并添加Docker官方GPG密钥:)
    • [3.3 添加Docker仓库源:](#3.3 添加Docker仓库源:)
  • [4. 安装Docker Engine/Docker Compose](#4. 安装Docker Engine/Docker Compose)
    • [4.1 安装最新版Docker包:](#4.1 安装最新版Docker包:)
    • [4.2 验证Docker服务状态:](#4.2 验证Docker服务状态:)
  • [5. 验证安装成功](#5. 验证安装成功)
    • [5.1 运行hello-world容器:](#5.1 运行hello-world容器:)
    • [5.2 查看Docker版本:](#5.2 查看Docker版本:)
  • [6. 后置配置:允许非root用户运行Docker(推荐)](#6. 后置配置:允许非root用户运行Docker(推荐))
    • [6.1 创建docker组(如果不存在)并添加当前用户:](#6.1 创建docker组(如果不存在)并添加当前用户:)
    • [6.2 验证:](#6.2 验证:)
    • 附加提示

注意 :这里假设你使用的是64位Ubuntu系统(如Ubuntu 25.10、25.04、24.04 LTS或22.04 LTS),并以root权限或sudo执行命令。安装前,确保系统已连接互联网,并检查防火墙兼容性(Docker可能绕过ufw或firewalld规则)。支持的架构包括x86_64 (amd64)、armhf、arm64、s390x和ppc64le。

1. 先决条件检查

在开始安装前,验证系统兼容性和潜在问题。

  • 防火墙兼容性:Docker暴露容器端口时会绕过ufw或firewalld规则。确保使用iptables-nft或iptables-legacy(nft规则不受支持)。如果使用nftables,需调整规则到DOCKER-USER链中。
  • 操作系统要求 :确认Ubuntu版本为25.10 (Questing)、25.04 (Plucky)、24.04 LTS (Noble) 或22.04 LTS (Jammy)。使用 lsb_release -a 检查。

这些检查确保安装过程顺利,避免兼容性问题导致的失败。Docker依赖特定内核和架构来运行容器。

2. 卸载旧版本的Docker

Ubuntu的默认仓库可能包含旧版或冲突包(如docker.io),这些可能与官方Docker Engine不兼容,导致版本冲突或功能缺失。因此,第一步是彻底卸载任何现有的相关包。

执行以下命令卸载旧版本:

bash 复制代码
sudo apt-get update
sudo apt-get remove docker docker-engine docker.io docker-compose docker-compose-v2 docker-doc podman-docker containerd runc
  • 如果系统报告某些包未安装,此命令会无害地继续。
  • 原理说明apt-get remove 移除指定的软件包,但不会删除数据(如镜像、容器)。列出的包包括旧命名(如docker-engine)、社区版(docker.io)和相关工具(如podman-docker,可能模拟Docker)。卸载确保干净环境,避免安装冲突。注意:/var/lib/docker/ 中的数据不会被移除;如果需要完全清理,参考卸载部分。

3. 设置Docker的APT仓库

为了从官方源获取最新稳定版Docker,需要添加Docker的APT仓库。这使用HTTPS安全传输和GPG密钥验证,确保软件来源可靠。

3.1 更新软件包索引并安装依赖:

bash 复制代码
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings

apt-get update 刷新包列表。依赖包确保安全下载(ca-certificates验证HTTPS,curl下载文件)。创建 /etc/apt/keyrings 目录用于存储密钥,权限0755允许读取但限制修改。

3.2 下载并添加Docker官方GPG密钥:

bash 复制代码
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

GPG密钥用于验证仓库中软件包的签名,防止篡改或伪造(公钥加密原理)。curl -fsSL 安全下载,chmod a+r 使密钥可读。

3.3 添加Docker仓库源:

bash 复制代码
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

这条命令动态创建仓库文件,指定架构(e.g., amd64)、签名密钥和Ubuntu代号(从 /etc/os-release 获取,如"noble" for 24.04)。"stable" 表示稳定分支。tee 重定向输出到文件,确保APT能从官方源获取包并验证真实性。最终更新索引以包含新仓库。

4. 安装Docker Engine/Docker Compose

仓库配置完成后,安装核心组件。Docker Engine包括守护进程(daemon)、CLI工具、容器运行时和插件。

4.1 安装最新版Docker包:

bash 复制代码
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y

原理说明

  • docker-ce:核心引擎,管理容器。
  • docker-ce-cli:命令行接口。
  • containerd.io:容器运行时,处理生命周期。
  • docker-buildx-plugin:增强构建工具,支持多架构镜像。
  • docker-compose-plugin:Compose工具,用于多容器应用。
  • -y 自动确认。安装后,Docker服务通过systemd自动启动并设置为开机自启。

4.2 验证Docker服务状态:

bash 复制代码
sudo systemctl status docker

如果未启动,手动启动:

bash 复制代码
sudo systemctl start docker
sudo systemctl enable docker

systemctl 检查和管理systemd服务。Docker创建 docker.service,默认启用。这比 ps aux | grep docker 更可靠,因为它显示服务状态、日志和错误。
Docker Compose安装说明:

在上面的安装过程中,我们已经安装了Docker Compose。它是通过安装 docker-compose-plugin 包实现的,这是Docker Compose V2的官方插件形式(从Docker 20.10开始推荐使用)。在安装命令中:

bash 复制代码
 sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y

这个包会启用 docker compose 命令(注意是"docker compose",带空格,而不是旧版的"docker-compose")。

要验证是否安装成功,可以运行:

bash 复制代码
docker compose version

如果输出类似 "Docker Compose version vx.x.x",则确认已安装。如果未显示,可能是权限问题(确保用户在docker组中)或安装失败,可重新运行安装命令。

5. 验证安装成功

运行测试容器以确认Docker正常工作。

5.1 运行hello-world容器:

bash 复制代码
sudo docker run hello-world

此命令从Docker Hub拉取镜像,创建并运行容器。如果成功,输出欢迎消息,验证网络、存储和运行时组件。

5.2 查看Docker版本:

bash 复制代码
docker version

显示客户端和服务器版本,确保安装完整。如果有问题,检查日志:sudo journalctl -u docker

6. 后置配置:允许非root用户运行Docker(推荐)

默认下,Docker命令需sudo,因为socket文件属于root。这不便且有安全风险。添加用户到docker组可实现非root访问。

6.1 创建docker组(如果不存在)并添加当前用户:

bash 复制代码
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker  # 或注销重新登录

groupadd 创建组,usermod -aG 添加用户。Docker socket (/var/run/docker.sock) 权限属于docker组,允许组成员无sudo运行命令。newgrp 激活变更,提升用户体验并控制访问。

6.2 验证:

bash 复制代码
docker ps

不使用sudo也能列出容器证明权限生效。

附加提示

  • 升级Docker :运行 sudo apt-get update 和安装步骤,选择新版本(用 apt-cache madison docker-ce 列出版本)。
  • 常见问题排查:如果仓库添加失败,检查网络或代号。官方文档:https://docs.docker.com/engine/install/ubuntu/。
  • 卸载Dockersudo apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin,然后移除 /var/lib/docker/ 和仓库文件。
  • 安全考虑:从官方源安装,避免root滥用。探索rootless模式以进一步提升安全。
  • 2025更新:支持最新Ubuntu版本(如25.10),仓库设置使用 /etc/apt/keyrings/docker.asc 和 .list 文件。包含新插件如buildx和compose。
相关推荐
奥尔特星云大使2 小时前
使用 Docker 运行 SQL Server 2019
运维·docker·容器·sql server
m0_485614672 小时前
Linux-Dockerfile与Docker Compose
linux·运维·docker
半壶清水2 小时前
ubuntu中mysql升级指南
mysql·ubuntu·adb
Ghost Face...2 小时前
DDR时序校准:写均衡与门控训练解析
linux
点亮一颗LED(从入门到放弃)2 小时前
Linux驱动之中断(9)
linux·运维·单片机
阎*水2 小时前
Ceph 分布式存储完整实践指南
linux·运维·分布式·ceph
我爱学习好爱好爱2 小时前
Prometheus监控栈 监控Linux操作系统
linux·grafana·prometheus
sleetdream2 小时前
联想开天统信UOS安装镜像 增加系统分区空间
linux
ArrebolJiuZhou2 小时前
arm指令集(一)
linux·运维·arm开发