- 文档/教程
【免费下载链接】90DaysOfDevOps
This repository started out as a learning in public project for myself and has now become a structured learning map for many in the community. We have 3 years under our belt covering all things DevOps, including Principles, Processes, Tooling and Use Cases surrounding this vast topic.
导读
本文是 90DaysOfDevOps 容器学习路径中的实战入门课:在完成 Docker 安装(Day 43) 之后,我们将亲手把 Docker 镜像部署到本地环境,走通"注册中心选镜像 → Docker Desktop 管理 → 命令行拉取运行 → 进入容器交互"的完整链路。读完本文,你将掌握 Docker 镜像的本质概念、DockerHub 的官方镜像与验证发布者机制、Docker Desktop 各功能面板的用途,并能独立运行docker/getting-started、hello-world与交互式ubuntu容器,为后续编写 Dockerfile、构建并推送自定义镜像打下坚实基础。
一、先复习:什么是 Docker 镜像
在动手之前,先明确一个核心概念(本系列反复强调正是因为它是后续一切的起点):
Docker 镜像(Image)是一个用于在 Docker 容器中执行代码的文件。它像模板一样充当一组构建指令,Docker 依据它来创建容器;同时它也是任何人使用 Docker 时的起点。
可以这样理解:
- 镜像 = 只读模板:包含应用代码、运行时、依赖与配置;
- 容器 = 镜像的运行实例:Docker 启动容器时会在镜像之上增加一个可写层(容器层),容器生命周期内的所有变更都保存在这一层,因此多个容器可以共享同一个底层镜像,却拥有各自独立的状态;
- 分层构建:镜像由一层层文件叠加而成,每一层都依赖其下一层。变更频繁的内容应尽量放在靠上的层,因为修改某一层时,Docker 不仅要重建该层,还会重建其之上的所有层(此细节在 Day 45:Docker 镜像的解剖 中会展开讲解)。
明确了"镜像—容器—层"这三者关系后,我们今天的实战就围绕"把镜像拉下来并跑起来"展开。
二、DockerHub:镜像的集中注册中心
现在正是注册 DockerHub 账号的好时机(首次使用 Docker 的用户应完成这一步,因为后续拉取与推送镜像都以账号为基础)。DockerHub 是使用 Docker 及其组件时的集中式资源,最常见的身份是托管 Docker 镜像的注册中心(registry),但除此之外它还提供大量附加服务,例如:
- 对接自动化流程;
- 集成 GitHub 等代码平台;
- 内置安全扫描能力。
登录后向下滚动,会看到一批常用容器镜像的列表,例如 MySQL 等数据库镜像、hello-world镜像等。可以把这些视为优质的基线镜像(baseline images):如果你只需要一个数据库镜像,直接使用官方镜像通常是最好的选择,完全不必从零构建自己的镜像。
2.1 如何甄别镜像来源:Official Image 与 Verified Publisher
DockerHub 支持按类别、操作系统与 CPU 架构深入筛选可用镜像。在挑选镜像时,有两个标记需要重点关注,它们直接关系到镜像来源的可信度:
| 标记 | 含义 |
|---|---|
| Official Image(官方镜像) | Docker 官方精选的一组开源且"开箱即用"的解决方案仓库,可对镜像来源感到放心 |
| Verified Publisher(验证发布者) | 由经过验证的机构发布并维护的高质量 Docker 内容,由商业实体直接公开发布与维护 |
在页面顶部还可以搜索特定镜像,例如 WordPress 可能就是我们想要的基础镜像——输入关键词后即可找到所有与 WordPress 相关的容器镜像,列表中同样会标注上述两种可信标记。搜索、筛选、甄别来源,是从 DockerHub 获取镜像的基本功。
三、探索 Docker Desktop:界面与功能面板
前提:系统已安装 Docker Desktop,并已确认 Docker 引擎(Engine)正在运行。如果你使用的是 Linux,同样可以运行 Docker,只是没有图形界面(GUI),可通过安装 Docker Engine 的方式使用(对应文档中提到的 Ubuntu 等发行版安装路径)。
打开 Docker Desktop 应用,你会看到类似下面的界面:当前没有任何容器在运行,但Docker Engine 处于运行状态。
各面板的用途如下:
| 面板 | 用途 |
|---|---|
| Containers / Apps | 查看与操作本机所有容器(运行中、已退出等),查看日志、进入终端、在浏览器打开应用端口等 |
| Images | 查看本机已下载(或正在使用)的所有镜像,例如docker/getting-started、hello-world |
| Remote repositories | 查看你在 DockerHub 上托管的远程仓库;若从未推送过镜像,这里为空 |
| Volumes | 管理卷(Volume)。当容器需要持久化数据时,可将卷挂载到本机文件系统或共享文件系统,避免容器删除后数据丢失 |
| Dev Environments | 用于与团队协作的开发环境(替代在不同 git 分支间切换),本系列不展开讲解 |
第一次安装时,Images 面板通常为空(作者因非全新安装,已存在部分历史镜像)。在 DockerHub 网页端同样可以核对:尚未推送任何镜像时,仓库列表为空——Docker Desktop 的 Remote repositories 与 DockerHub 网页保持同步。
四、运行第一个容器:docker/getting-started
回到 Containers / Apps 面板,文档给出了一个可以立即运行的入门容器命令。在终端中执行:
docker run -d -p 80:80 docker/getting-started逐段拆解这条命令:
docker run:从镜像创建并启动容器;-d:以分离模式(detached)在后台运行,终端不会被容器进程占用;-p 80:80:端口映射,将宿主机的 80 端口映射到容器内的 80 端口(格式为"宿主机端口:容器端口");docker/getting-started:要运行的镜像名称,本地不存在时 Docker 会自动从 DockerHub 拉取。
执行后回到 Docker Desktop 窗口,可以看到一个正在运行的容器(running)。此时再切换到 Images 面板,会看到一个正在被使用的镜像docker/getting-started。
关于 WSL2:文中运行环境为 Windows + WSL2。若要在 WSL2 下使用 Docker,需要确保在 Docker Desktop 设置中已启用 WSL2 集成选项(Settings 中对应的开关)。
在 Containers / Apps 面板中点击这个运行中的容器,默认会看到容器日志(logs);面板顶部的工具栏还提供多个操作选项。由于该容器内运行的是一个网页应用,选择"在浏览器中打开(open in browser)",浏览器就会访问 localhost 并展示 Docker 官方的入门引导页面;容器详情中还包含关于容器与镜像的更多信息。
至此,你已经成功运行了第一个容器——第一步并不复杂。
五、从 DockerHub 拉取并运行 hello-world
为了演示"从注册中心拉取镜像"这一典型流程,先停止并清理掉getting-started容器(并非因为它占用大量资源,而是为了让后续步骤更清晰)。然后在终端执行:
docker run hello-world发生了什么?过程一目了然:
- 本机没有
hello-world镜像,Docker 自动从 DockerHub 将其**拉取(pull)**到本地; - 容器启动后输出一段欢迎消息,内容包括它是如何完成启动的说明以及若干参考链接;
- 消息输出完毕后容器即退出。
回到 Docker Desktop:可以看到没有运行中的容器,但有一个exited(已退出)的容器——它"出现 → 发送消息 → 终止",完整演示了一个一次性任务容器的生命周期。
最后再查看 Images 面板:本地多了一个hello-world镜像。这意味着如果再次执行docker run hello-world,只要版本没有变化,就无需重新拉取,直接从本地启动。
这个小实验展示了 Docker 镜像缓存机制:本地已有镜像时直接使用,缺失时才从注册中心拉取。
六、挑战升级:交互式运行 Ubuntu 容器
hello-world容器在欢迎消息中留下了一个"挑战":运行一个更有野心的东西。接受挑战——在终端执行:
docker run -it ubuntu bash命令要点:
-i:保持标准输入(stdin)打开,允许向容器输入命令;-t:分配一个伪终端(pseudo-TTY),获得可交互的命令行;ubuntu:基础镜像名称,未指定 tag 时默认拉取latest标签;bash:容器启动后要执行的命令,即启动 bash shell。
执行后,终端会进入一个交互式提示符(interactive prompt),你已经在容器内部的 bash shell 中了。注意一个重要事实:这是Ubuntu 的容器化版本,并非操作系统的完整副本——容器里只有一个精简的 Linux 用户空间。
尽管只有一个 bash shell,这个基础镜像小于 30MB(这正是"镜像是精简模板而非完整操作系统"的最佳佐证),但它完全可用。你可以借助apt包管理器在容器内安装软件、更新与升级:
apt-get update && apt-get upgrade -y也可以安装具体软件。文中示例安装的是pinta(一个图像编辑器,体积超过 200MB,作者自己也承认这不是最轻量的例子),目的是说明:在容器内安装软件会显著增大容器的体积——不过即使如此,容器体量仍在 MB 级而非 GB 级。
需要清醒认识的一点:这种"进入容器手动装软件"的方式适合体验与排查问题,但它不具备可重复性——容器一旦停止或被销毁,所有手工安装的软件与更新都会丢失。要获得"每次运行都具备相同软件集"的可移植镜像,正确做法是使用 Dockerfile 构建镜像(这正是 Day 45 的主题)。
七、延伸:仓库中的镜像与编排示例
作为从"拉取运行现成镜像"走向"构建与部署自建镜像"的过渡,当前仓库的 2022/Days/Containers 目录下已经准备好了若干可供后续练习的真实示例,建议结合下一篇阅读:
- 基础 Dockerfile 示例:2022/Days/Containers/Dockerfile 以
ubuntu:18.04为基础镜像,先执行apt-get update && apt-get upgrade -y更新系统,再创建非 root 用户basicuser并切换到该用户运行——体现了"精简、无冗余、最小权限"的镜像构建思路; - WordPress + MySQL 编排示例:2022/Days/Containers/my_wordpress/docker-compose.yaml 用
mysql:5.7与wordpress:latest两个镜像定义db与wordpress两个服务,并通过命名卷(db_data、wordpress_data)持久化数据、通过端口映射"8000:80"对外暴露服务——这正是本文提到的 MySQL、WordPress 官方镜像的落地用法; - ELK 三容器编排示例:2022/Days/Containers/elasticsearch-logstash-kibana/docker-compose.yml 以
elasticsearch:7.16.1、logstash:7.16.1、kibana:7.16.1三个官方镜像组合成单节点日志分析栈,包含健康检查(healthcheck)、端口映射与自定义 bridge 网络。
这些文件在后续"构建镜像、推送到 DockerHub 并部署"的章节中会被反复引用。
八、小结与下一步
通过本节,你已经完成了:
- 理解 Docker 镜像作为"只读模板 + 构建指令"的本质;
- 认识 DockerHub 注册中心,学会借助 Official Image 与 Verified Publisher 甄别镜像来源;
- 熟悉 Docker Desktop 的 Containers/Apps、Images、Volumes、Remote repositories 等面板;
- 实战运行
docker/getting-started(后台 + 端口映射 + 浏览器访问)与hello-world(自动拉取 + 一次性容器生命周期); - 通过
docker run -it ubuntu bash进入容器交互环境,并用apt安装软件。
需要认识到,仅"下载镜像并使用"远不是容器世界的全部,网络、安全以及更多部署选项都将在后续内容中展开。本节的最终目标是:构建出属于自己的东西,上传到 DockerHub 仓库并成功部署——这也是容器实战的主线任务。下一篇 Day 45:Docker 镜像的解剖 将深入镜像的内部结构、Dockerfile 指令与镜像构建方法,敬请继续。
- 文档/教程
【免费下载链接】90DaysOfDevOps
This repository started out as a learning in public project for myself and has now become a structured learning map for many in the community. We have 3 years under our belt covering all things DevOps, including Principles, Processes, Tooling and Use Cases surrounding this vast topic.
相关推荐
90DaysOfDevOps 第 44 天:Docker 镜像实战与 Docker Desktop 上手
90DaysOfDevOps 第 44 天:Docker 镜像实战与 Docker Desktop 上手 本篇是 90DaysOfDevOps 容器学习路线中
文档/教程90DaysOfDevOps 第 44 天:Docker 镜像详解与 Docker Desktop 上手实战
90DaysOfDevOps 第 44 天:Docker 镜像详解与 Docker Desktop 上手实战 本篇指南对应 90DaysOfDevOps 项目
文档/教程90DaysOfDevOps 实战 Day 44:Docker 镜像入门与 Docker Desktop 首次动手运行容器
90DaysOfDevOps 实战 Day 44:Docker 镜像入门与 Docker Desktop 首次动手运行容器 Docker 镜像是容器技术的基石,
文档/教程
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考