使用 Docker 运行容器

DockerBeginner
立即练习

简介

在本实验中,你将沉浸在一个维多利亚时代的场景中,扮演一名古董商。你的目标是利用现代技术——具体来说是利用 Docker 容器来简化你的运营流程——高效地运输和展示历史文物。

想象一下,你是 1880 年代伦敦一位受人尊敬的古董商,以收藏世界各地的珍贵文物而闻名。然而,你没有使用传统的板条箱和展示柜,而是发现了一种名为「Docker 容器」的革命性技术,它能让你以空前的效率和安全性来打包、运输和展示你的珍贵藏品。

通过本次实验,你将了解 Docker 容器的基础知识,并学会如何使用它们来运行应用程序。在我们的维多利亚时代场景中,这代表了你管理和展示珍贵古董收藏的能力。

配置 Docker 环境

在这一步中,你将首先确保 Docker 环境已正确配置,以便运行容器。你可以将其想象为用必要的工具和设备来准备你的古董工作室。

  1. 在终端中执行以下命令来安装 Docker:

    sudo apt update
    sudo apt install docker.io
    

    第一条命令用于更新软件包列表,确保你获取的是最新版本的 Docker;第二条命令则用于安装 Docker 本身。sudo 前缀提供了安装所需的管理员权限。

  2. Docker 安装完成后,重启 Docker 服务,以确保运行中的守护进程与你刚安装的版本匹配:

    sudo systemctl restart docker
    

    此命令会使用新安装的软件包版本重新加载 Docker 守护进程。如果 Docker 尚未运行,restart 也会启动该服务。这可以避免在运行第一个容器时出现客户端与守护进程 API 版本不匹配的问题。

  3. 验证 Docker 是否运行成功:

    sudo systemctl status docker
    

    此命令用于检查 Docker 是否处于活动状态并正常运行。你应该能看到输出中包含 active (running),这确认了你的 Docker 环境已准备就绪。如果看到 inactive 或任何错误信息,请在继续之前再次运行 sudo systemctl restart docker

  4. 为了确保你无需每次都使用 sudo 即可运行 Docker 命令,请将你的用户添加到 Docker 组中:

    sudo usermod -aG docker $USER
    

    注意:运行此命令后,你可能需要注销并重新登录才能使更改生效。在本实验中,为了确保兼容性,我们将继续在 Docker 命令前使用 sudo

运行 Hello-World 容器

现在环境已经配置好了,你将运行第一个 Docker 容器——一个简单的「hello-world」示例。这就像展示你的第一件文物,以确保你的新容器技术能按预期工作。

  1. 从 Docker Hub 拉取「hello-world」镜像:

    sudo docker pull hello-world
    

    此命令会从 Docker Hub(一个公共的 Docker 镜像仓库)下载 hello-world 镜像。这就像从遥远的国度获取你的第一件文物。Docker Hub 就像一个市场,你可以在其中找到各种用途的预打包容器。

  2. 运行「hello-world」容器:

    sudo docker run hello-world
    

    此命令会根据 hello-world 镜像创建并启动一个容器。该容器运行一个简单的程序,输出一条消息后退出。在我们的维多利亚时代场景中,这相当于简要展示你的第一件文物,以验证你的新容器系统是否工作正常。如果此时 Docker 报告客户端或守护进程 API 版本不匹配,请使用 sudo systemctl restart docker 重启服务,然后重新运行该命令。

  3. 检查输出以确保容器运行成功。你应该会看到一条以「Hello from Docker!」开头的消息,后面跟着一些说明性文字。这确认了:

    • Docker 已正确安装
    • 你的系统可以成功创建容器
    • 你可以从 Docker Hub 下载镜像
  4. 查看所有容器的列表(包括已退出的容器):

    sudo docker ps -a
    

    此命令显示所有容器,包括刚才已经退出的 hello-world 容器。你将看到容器 ID、创建该容器所使用的镜像、创建时间以及当前状态等详细信息。

部署 Nginx Web 服务器

在这一步中,你将使用 Docker 容器部署一个 Nginx Web 服务器。在我们的维多利亚时代场景中,这代表着搭建一个优雅的展示柜(Nginx),用于向访客展示你最珍贵的古董(Web 内容)。

  1. 从 Docker Hub 拉取 Nginx 镜像:

    sudo docker pull nginx
    

    此命令会从 Docker Hub 下载官方 Nginx 镜像。Nginx 是一个流行的 Web 服务器,可以提供 HTML 内容服务。这相当于为你的古董收藏购置了一个精美的展示柜。

  2. 以分离模式(detached mode)运行 Nginx 容器,并将宿主机的 80 端口映射到容器的 80 端口:

    sudo docker run -d -p 80:80 nginx
    

    让我们拆解一下这条命令:

    • run: 创建并启动一个新容器
    • -d: 以分离模式运行容器(在后台运行)
    • -p 80:80: 将宿主机的 80 端口映射到容器内的 80 端口,允许 Web 流量访问 Nginx 服务器
    • nginx: 指定要使用的镜像

    这就像把你的展示柜放在陈列室里,并确保访客能够看到你的古董。

  3. 验证你的 Nginx 容器是否正在运行:

    sudo docker ps
    

    此命令显示所有正在运行的容器。你应该能在列表中看到你的 Nginx 容器,表明它正在积极运行。

  4. 从顶部菜单栏添加 Web 服务映射,并将端口映射设置为 80。如果 Nginx Web 服务器运行成功,实验环境将自动导航到一个随机 URL,你应该能看到 Nginx 的默认欢迎页面。

  5. 可选:如果你想手动从浏览器访问 Nginx 服务器,可以导航到 http://localhost 或你机器的 IP 地址。

  6. 如果遇到任何问题,你可以检查容器日志:

    sudo docker logs <container_id>
    

    <container_id> 替换为你的 Nginx 容器 ID,你可以通过 docker ps 命令的输出找到它。

总结

在本实验中,你了解了运行 Docker 容器的基本概念。通过模拟维多利亚时代古董商的历史背景,你获得了利用 Docker 运行能力的实践经验。

你已经学会了如何:

  • 配置 Docker 环境
  • 从 Docker Hub 拉取镜像
  • 在前台和后台(分离模式)运行容器
  • 将容器端口暴露给宿主机
  • 验证容器状态

这些技能构成了容器技术的基础,并且可以应用于我们古董商场景之外的广泛应用中。在现代环境中,同样的技术被用于部署从简单的 Web 服务器到复杂的微服务架构等各种应用程序。

将应用程序及其依赖项打包到可移植容器中的能力,彻底改变了我们部署和管理软件的方式,就像标准化的集装箱彻底改变了全球贸易一样。正如我们那位维多利亚时代的古董商可能会说的:「这些奇妙的 Docker 容器将彻底改变我们向世界展示珍宝的方式!」