本教程将指导您如何在 Ubuntu 服务器上安装和使用 Docker Community Edition (CE)。内容涵盖从 Docker 本身的基础安装,到容器 (Container) 和镜像 (Image) 的操作,以及如何将镜像推送到 Docker 仓库 (Docker Registry)。
先决条件
在开始之前,请确保满足以下条件:
- 一台已配置好
sudo
非root
用户和防火墙的 Ubuntu 服务器。 - 一个 Docker Hub 账号(如果您需要创建和推送自己的 Docker 镜像)。
安装Docker
Docker 官方的 Ubuntu 仓库通常能提供最新版本的 Docker。为了确保您获取到的是最新的 Docker CE 版本,我们将从官方仓库进行安装。
-
首先,更新您当前系统的包列表:
sudo apt update
-
接着,安装允许
apt
通过 HTTPS 使用包的必要依赖:sudo apt install apt-transport-https ca-certificates curl software-properties-common -y
-
添加 Docker 官方仓库的 GPG 密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
-
将 Docker 仓库添加到 APT 源。本教程以 Ubuntu 20.04 (Focal Fossa) 为例:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
执行此命令后,您的本地包数据库也会随之更新。
-
验证
docker-ce
包将从 Docker 官方仓库安装,而非 Ubuntu 默认仓库:apt-cache policy docker-ce
输出中应显示
docker-ce
的候选版本来自于focal
版本的 Docker 仓库。 -
安装 Docker CE:
sudo apt install docker-ce -y
-
安装完成后,检查 Docker 服务是否正在运行:
sudo systemctl status docker
如果一切正常,输出应显示 Docker 服务处于
active (running)
状态。
在不使用Sudo的情况下执行Docker命令(可选)
默认情况下,docker
命令只能由 root
用户或 docker
用户组中的成员运行。为了避免每次运行 docker
命令时都需要输入 sudo
,您可以将当前用户添加到 docker
用户组:
sudo usermod -aG docker ${USER}
要使新的用户组成员资格生效,您需要注销并重新登录,或者执行以下命令:
su - ${USER}
通过以下命令确认您的用户已成功添加到 docker
组:
groups
输出中应包含 docker
。
使用Docker命令
docker
命令的通用语法是:
docker [选项] [命令] [参数]
-
要查看所有可用的
docker
子命令:docker
-
要查看特定
docker
命令的可用选项:docker <docker-subcommand> --help
-
要查看 Docker 系统的系统范围信息(例如版本、存储驱动、运行时等):
docker info
使用Docker镜像
Docker 容器是基于 Docker 镜像构建的。默认情况下,Docker 从 Docker Hub 拉取 (pull) 这些镜像。
-
通过运行一个
hello-world
容器来测试 Docker 是否正常工作:docker run hello-world
如果 Docker 安装正确,它将下载
hello-world
镜像并在控制台显示一条欢迎消息。 -
在 Docker Hub 上搜索镜像。例如,搜索官方的 Ubuntu 镜像:
docker search ubuntu
OFFICIAL
列中的OK
表示这是一个由 Docker 官方构建和支持的镜像。 -
下载官方的
ubuntu
镜像:docker pull ubuntu
-
查看已下载到您本地计算机上的所有 Docker 镜像:
docker images
运行Docker容器
容器可以以交互模式运行,它们类似于轻量级的虚拟机 (VM),但资源占用更少。
-
使用最新下载的
ubuntu
镜像运行一个容器,并获取一个交互式 shell 访问权限。-i
保持标准输入 (stdin) 开放,-t
分配一个伪 TTY:docker run -it ubuntu
您的命令提示符将变为容器内部的
root@<container_id>:/#
形式。请记下这个容器 ID。 -
在容器内部,您可以运行任何 Linux 命令。例如,更新包数据库并安装 Node.js:
apt update apt install nodejs -y node -v
-
输入
exit
即可退出容器。
管理Docker容器
-
查看当前正在运行的容器:
docker ps
-
查看所有容器(包括正在运行和已停止的):
docker ps -a
-
查看最新创建的容器:
docker ps -l
-
启动一个已停止的容器(可以使用容器 ID 或容器名称):
docker start <容器ID或名称>
-
停止一个正在运行的容器:
docker stop <容器ID或名称>
-
删除一个不再需要的容器:
docker rm <容器ID或名称>
您可以使用
--name
为新容器命名,或使用--rm
标志在容器停止时自动将其删除。
将容器的更改提交为Docker镜像
您可以将容器当前的状态保存为新的 Docker 镜像,以便将来重用或分享。
-
在之前安装了 Node.js 的 Ubuntu 容器内部进行更改后,您可以将这些更改提交到一个新的 Docker 镜像实例:
docker commit -m "您对镜像所做的更改" -a "作者姓名" <容器ID> <仓库名称>/<新镜像名称>
例如,如果您的 Docker Hub 用户名为
sammy
,且容器 ID 为d9b100f2f636
:docker commit -m "added Node.js" -a "sammy" d9b100f2f636 sammy/ubuntu-nodejs
-
再次列出您的 Docker 镜像,您将看到新创建的镜像以及它所派生出来的旧镜像:
docker images
新镜像将反映所做的更改(例如,安装 Node.js 后其文件大小会增加)。
将Docker镜像推送到Docker仓库
创建新镜像后,您可以将其推送到 Docker Hub 或其他私有 Docker 仓库,以便于分享和版本控制。
-
首先,登录到 Docker Hub:
docker login -u <docker-registry-username>
-
如果您的 Docker 仓库用户名与您用于创建镜像的本地用户名不同,您需要使用仓库用户名重新标记 (tag) 您的镜像:
docker tag sammy/ubuntu-nodejs <docker-registry-username>/ubuntu-nodejs
-
然后,推送您的镜像到 Docker Hub:
docker push <docker-registry-username>/<docker-image-name>
例如,将
ubuntu-nodejs
镜像推送到sammy
的仓库:docker push sammy/ubuntu-nodejs
推送完成后,您的新镜像将显示在您的 Docker Hub 账户仪表板上。
Docker与Docker Compose
- Docker CLI:主要用于构建和运行单个容器,处理单容器的操作和生命周期管理。
- Docker Compose:是一个用于定义和运行多容器 Docker 应用程序的工具。它使用 YAML 文件来配置应用程序的服务,并能够自动处理服务间的链接和依赖关系,非常适合多容器编排。
以下是 Docker CLI 与 Docker Compose 的主要区别:
特性 | Docker CLI | Docker Compose |
---|---|---|
用途 | 单容器操作 | 多容器应用程序编排 |
配置 | 命令行参数 | YAML 配置文件 |
依赖处理 | 手动 | 自动处理服务间链接 |
最佳用例 | 测试隔离容器 | 本地开发和暂存环境 |
常见Docker安装问题排查
在使用 Docker 的过程中,可能会遇到一些常见问题。
- 问题:
docker: command not found
- 解决方法:这通常意味着 Docker CLI 不在您的系统
$PATH
中,或者 Docker 未正确安装。您可以尝试重新安装 Docker,或确保/usr/bin
路径(Docker CLI 的默认安装位置)已添加到您的$PATH
环境变量中。sudo apt install docker-ce docker-ce-cli containerd.io
- 解决方法:这通常意味着 Docker CLI 不在您的系统
- 问题:
Cannot connect to the Docker daemon
- 解决方法:这表示 Docker 服务未运行,或者您的用户不在
docker
用户组中,导致没有权限访问 Docker Daemon。添加用户组后,请注销并重新登录您的会话。sudo systemctl start docker # 启动Docker服务 sudo usermod -aG docker $USER # 将当前用户添加到docker组
- 解决方法:这表示 Docker 服务未运行,或者您的用户不在
- 问题:GPG 密钥或仓库错误
- 解决方法:如果 Docker 的 GPG 密钥服务器或密钥本身发生变化,您可能会遇到导入密钥或添加仓库时的错误。请查阅 Docker 官方文档以获取最新的密钥和仓库配置步骤。
在Ubuntu上使用Docker Desktop(Beta)
Docker Desktop 现在已在 Linux 发行版(包括 Ubuntu)的 Beta 版中可用。它提供了一个图形用户界面 (GUI)、捆绑的 Docker Engine 和 Kubernetes 支持,简化了开发环境的配置。
-
安装 Docker Desktop:
sudo apt install ./docker-desktop-<版本>-<架构>.deb
请注意:Docker Desktop 主要适用于开发环境,不推荐在生产服务器上使用。
使用Dockerfile安装Docker
在自动化或容器化环境中,您可以使用 Dockerfile 来安装 Docker。以下是一个简单的示例:
FROM ubuntu:20.04
RUN apt-get update && \
apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release && \
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - && \
add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable" && \
apt-get update && \
apt-get install -y docker-ce docker-ce-cli containerd.io
如何在Ubuntu上卸载Docker
要从您的系统中彻底删除 Docker,请运行以下命令:
sudo apt purge docker-ce docker-ce-cli containerd.io -y
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
这些命令将卸载 Docker 软件包并删除 Docker 相关的数据目录。
常见问题
-
如何在 Ubuntu 上安装特定版本的 Docker?
- 您可以使用
apt-cache madison docker-ce
命令列出所有可用的 Docker CE 版本。然后,通过指定版本字符串来安装特定版本:例如:sudo apt install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io -y
sudo apt install docker-ce=5:20.10.24~3-0~ubuntu-focal docker-ce-cli=5:20.10.24~3-0~ubuntu-focal containerd.io -y
- 您可以使用
-
其他常见问题,如 Docker 是否需要
sudo
权限、如何验证 Docker 是否正在运行、Docker 与 Docker Compose 的区别、如何卸载 Docker 以及 Docker Desktop 在 Ubuntu 上的可用性等,已在上述章节中详细涵盖。
结论
本教程详细介绍了如何在 Ubuntu 上安装 Docker,并涵盖了 Docker 容器管理、Docker 镜像操作、镜像推送等核心概念。掌握这些技能将为您的容器化开发和部署奠定坚实基础,助力您在现代 IT 架构中更高效地工作。
关于
关注我获取更多资讯

