在Ubuntu上安装和使用Docker的终极指南

本教程旨在为中文开发者详细介绍如何在Ubuntu系统上安装和配置Docker Community Edition (CE)。内容涵盖从基础安装、非root用户权限配置,到核心的容器与镜像管理(如运行、停止、提交、删除),以及如何将自定义镜像推送到Docker Hub。此外,文章还对比了Docker CLI与Docker Compose的使用场景,并提供了常见的安装问题排查指南及卸载方法,助您全面掌握Docker在Ubuntu环境下的应用。

阅读时长: 6 分钟
共 2898字
作者: eimoon.com

本教程将指导您如何在 Ubuntu 服务器上安装和使用 Docker Community Edition (CE)。内容涵盖从 Docker 本身的基础安装,到容器 (Container) 和镜像 (Image) 的操作,以及如何将镜像推送到 Docker 仓库 (Docker Registry)。

先决条件

在开始之前,请确保满足以下条件:

  • 一台已配置好 sudoroot 用户和防火墙的 Ubuntu 服务器。
  • 一个 Docker Hub 账号(如果您需要创建和推送自己的 Docker 镜像)。

安装Docker

Docker 官方的 Ubuntu 仓库通常能提供最新版本的 Docker。为了确保您获取到的是最新的 Docker CE 版本,我们将从官方仓库进行安装。

  1. 首先,更新您当前系统的包列表:

    sudo apt update
    
  2. 接着,安装允许 apt 通过 HTTPS 使用包的必要依赖:

    sudo apt install apt-transport-https ca-certificates curl software-properties-common -y
    
  3. 添加 Docker 官方仓库的 GPG 密钥:

    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    
  4. 将 Docker 仓库添加到 APT 源。本教程以 Ubuntu 20.04 (Focal Fossa) 为例:

    sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
    

    执行此命令后,您的本地包数据库也会随之更新。

  5. 验证 docker-ce 包将从 Docker 官方仓库安装,而非 Ubuntu 默认仓库:

    apt-cache policy docker-ce
    

    输出中应显示 docker-ce 的候选版本来自于 focal 版本的 Docker 仓库。

  6. 安装 Docker CE:

    sudo apt install docker-ce -y
    
  7. 安装完成后,检查 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) 这些镜像。

  1. 通过运行一个 hello-world 容器来测试 Docker 是否正常工作:

    docker run hello-world
    

    如果 Docker 安装正确,它将下载 hello-world 镜像并在控制台显示一条欢迎消息。

  2. 在 Docker Hub 上搜索镜像。例如,搜索官方的 Ubuntu 镜像:

    docker search ubuntu
    

    OFFICIAL 列中的 OK 表示这是一个由 Docker 官方构建和支持的镜像。

  3. 下载官方的 ubuntu 镜像:

    docker pull ubuntu
    
  4. 查看已下载到您本地计算机上的所有 Docker 镜像:

    docker images
    

运行Docker容器

容器可以以交互模式运行,它们类似于轻量级的虚拟机 (VM),但资源占用更少。

  1. 使用最新下载的 ubuntu 镜像运行一个容器,并获取一个交互式 shell 访问权限。-i 保持标准输入 (stdin) 开放,-t 分配一个伪 TTY:

    docker run -it ubuntu
    

    您的命令提示符将变为容器内部的 root@<container_id>:/# 形式。请记下这个容器 ID。

  2. 在容器内部,您可以运行任何 Linux 命令。例如,更新包数据库并安装 Node.js:

    apt update
    apt install nodejs -y
    node -v
    
  3. 输入 exit 即可退出容器。

管理Docker容器

  • 查看当前正在运行的容器:

    docker ps
    
  • 查看所有容器(包括正在运行和已停止的):

    docker ps -a
    
  • 查看最新创建的容器:

    docker ps -l
    
  • 启动一个已停止的容器(可以使用容器 ID 或容器名称):

    docker start <容器ID或名称>
    
  • 停止一个正在运行的容器:

    docker stop <容器ID或名称>
    
  • 删除一个不再需要的容器:

    docker rm <容器ID或名称>
    

    您可以使用 --name 为新容器命名,或使用 --rm 标志在容器停止时自动将其删除。

将容器的更改提交为Docker镜像

您可以将容器当前的状态保存为新的 Docker 镜像,以便将来重用或分享。

  1. 在之前安装了 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
    
  2. 再次列出您的 Docker 镜像,您将看到新创建的镜像以及它所派生出来的旧镜像:

    docker images
    

    新镜像将反映所做的更改(例如,安装 Node.js 后其文件大小会增加)。

将Docker镜像推送到Docker仓库

创建新镜像后,您可以将其推送到 Docker Hub 或其他私有 Docker 仓库,以便于分享和版本控制。

  1. 首先,登录到 Docker Hub:

    docker login -u <docker-registry-username>
    
  2. 如果您的 Docker 仓库用户名与您用于创建镜像的本地用户名不同,您需要使用仓库用户名重新标记 (tag) 您的镜像:

    docker tag sammy/ubuntu-nodejs <docker-registry-username>/ubuntu-nodejs
    
  3. 然后,推送您的镜像到 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
      
  • 问题:Cannot connect to the Docker daemon
    • 解决方法:这表示 Docker 服务未运行,或者您的用户不在 docker 用户组中,导致没有权限访问 Docker Daemon。
      sudo systemctl start docker # 启动Docker服务
      sudo usermod -aG docker $USER # 将当前用户添加到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 相关的数据目录。

常见问题

  1. 如何在 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
  2. 其他常见问题,如 Docker 是否需要 sudo 权限、如何验证 Docker 是否正在运行、Docker 与 Docker Compose 的区别、如何卸载 Docker 以及 Docker Desktop 在 Ubuntu 上的可用性等,已在上述章节中详细涵盖。

结论

本教程详细介绍了如何在 Ubuntu 上安装 Docker,并涵盖了 Docker 容器管理、Docker 镜像操作、镜像推送等核心概念。掌握这些技能将为您的容器化开发和部署奠定坚实基础,助力您在现代 IT 架构中更高效地工作。

关于

关注我获取更多资讯

公众号
📢 公众号
个人号
💬 个人号
使用 Hugo 构建
主题 StackJimmy 设计