Docker 镜像与仓库

DockerDockerBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个挑战中,你将使用 Docker 镜像。Docker 容器镜像是一个轻量级、自包含的可执行软件包,其中包含运行应用程序所需的一切:代码、运行时环境、系统工具、系统库和设置。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/SystemManagementGroup(["System Management"]) docker(("Docker")) -.-> docker/DockerfileGroup(["Dockerfile"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/tag("Tag an Image") docker/ImageOperationsGroup -.-> docker/push("Push Image to Repository") docker/SystemManagementGroup -.-> docker/login("Log into Docker Registry") docker/DockerfileGroup -.-> docker/build("Build Image from Dockerfile") subgraph Lab Skills docker/run -.-> lab-7768{{"Docker 镜像与仓库"}} docker/pull -.-> lab-7768{{"Docker 镜像与仓库"}} docker/tag -.-> lab-7768{{"Docker 镜像与仓库"}} docker/push -.-> lab-7768{{"Docker 镜像与仓库"}} docker/login -.-> lab-7768{{"Docker 镜像与仓库"}} docker/build -.-> lab-7768{{"Docker 镜像与仓库"}} end

更改 Docker 镜像

Docker 镜像包含镜像名称和镜像标签,其中镜像名称由仓库地址和镜像标识符组成。在本小节中,你将把他人创建的 Docker 镜像推送到自己的仓库中。

目标

你要将 dockerhub 上的公共 ubuntu 镜像推送到你的私有仓库。

结果示例

以下是你在完成此挑战后应能达成的示例:

  1. dockerhub 上注册并登录。
Dockerhub 注册登录界面
  1. 从 Docker Hub 下载 ubuntu:22.10 镜像到本地服务器。
下载 Ubuntu Docker 镜像
  1. ubuntu:22.10 镜像的地址更改为你的仓库地址。
更改 Docker 镜像仓库
  1. 登录到 Docker Hub。
Docker Hub 登录界面
  1. 将镜像推送到远程仓库。
将镜像推送到仓库

要求

要完成此挑战,你需要:

  • 安装 Docker 引擎。
  • 具备一些 Docker 命令行的知识。
  • 已有一个需要更新的 Docker 镜像。
✨ 查看解决方案并练习

构建一个 Web 镜像

我们通常使用 nginx 来运行网站等静态应用程序。在本节中,你将构建自己的 Web 镜像。

目标

你的目标是创建一个 Docker 容器镜像,并将一个简单的 Web 应用程序打包到其中,然后使用该镜像启动容器并确保它能正常访问。

结果示例

以下是你在完成此挑战后应能达成的示例:

  1. /home/labex/Code 目录下创建一个名为 index.html 的新文件,内容为 hello labex
创建 index html 文件
  1. 创建一个名为 Dockerfile 的新文件,内容如下
Dockerfile 内容示例
  1. your_dockerhub_id/web:1.1.0 的格式构建你的 Web 镜像。
构建 Docker Web 镜像
  1. 将创建的 Web 镜像推送到 dockerhub
将 Web 镜像推送到 DockerHub
  1. 使用 your_dockerhub_id/web:1.1.0 启动一个名为 web 的容器,并将端口 80 映射到主机。
启动 Docker 容器 web
  1. 使用 curl 命令访问 http://127.0.0.1,并检查输出是否为 hello labex
curl 命令输出 hello labex

要求

要完成此挑战,你需要:

  • 使用 Dockerfile 进行构建
  • 指定基础镜像为 Nginx:latest
  • Dockerfile 中使用 EXPOSE 命令暴露端口 80
  • 构建完成后,确保容器能够正常运行并响应 HTTP 请求
✨ 查看解决方案并练习

多阶段镜像构建

创建容器镜像通常涉及两个步骤:

  1. 编译应用程序。
  2. 创建应用程序镜像。

本节将把这两个步骤合并到一个 Docker 文件中,以实现多阶段构建。

为了完成此挑战部分,我们在 https://github.com/joker-bai/go-hello-world.git 准备了一个 Hello World 项目。

目标

你的目标是使用多阶段构建来制作一个容器镜像,并使用该镜像启动一个容器,确保它能正常访问。

结果示例

以下是你在完成此挑战后应能达成的示例:

  1. /home/labex/Code 目录下创建一个 hello-world 目录。
    创建 hello world 目录

  2. 在该目录下创建一个 Dockerfile,内容如下
    Dockerfile 创建示例

  3. your_dockerhub_id/go-hello-world:1.1.0 的格式构建 Docker 镜像。
    构建 Docker 镜像过程

  4. 将镜像推送到 Docker Hub。
    将 Docker 镜像推送到 Hub

  5. 启动一个名为 go-hello-world 的容器,并暴露端口 8080
    启动 go hello world 容器

  6. 访问 http://127.0.0.1:8080 检查是否正常。
    容器 HTTP 响应检查

要求

要完成此挑战,你需要:

  • 使用 Dockerfile 进行构建
  • 构建完成后,确保容器能够正常运行并响应 HTTP 请求
✨ 查看解决方案并练习

总结

恭喜你完成了此挑战的所有内容,现在你已经能够灵活地创建和管理应用程序镜像了。