Kubernetes之旅 第1部分:为什么使用Docker?
Source: Dev.to
欢迎阅读关于学习 Kubernetes 的第一篇文章!在深入复杂内容之前,我们必须先聊一聊让这一切成为可能的基石:Docker。
如果你曾从事软件开发,可能已经听过这样一句话:“但它在我的机器上可以运行!”
为什么要使用 Docker?
想象一下,你刚完成一个新功能,代码已经合并到版本控制系统(VCS)中。构建流水线生成了一个制品,并将其部署到服务器。
- 开发服务器: 完全正常。✅
- 测试服务器: 如预期工作。✅
- 生产环境: 部署后,构建失败。❌
发生了什么?
最常见的原因是 环境配置错误 或缺少在开发和测试环境中存在但在生产环境中不存在的依赖。传统上,你只能交付制品,而无法交付完整的环境。这时容器就派上用场了。
Docker 如何解决这个问题
Docker 将代码运行所需的一切——库、依赖、配置,甚至基础操作系统的二进制文件——打包成一个单元。这样,环境相关的故障几乎可以忽略不计。
什么是容器?
容器 是一种隔离的、轻量级的沙箱环境,包含应用代码、库和运行时依赖,且不受宿主操作系统的限制。
- 关键区别: 与虚拟机(VM)不同,容器 不 打包完整的操作系统。它只包含最小的二进制文件,并使用宿主的 OS 内核,从而实现快速、可移植且资源高效。
定义: Docker 是让你能够随时随地构建、交付和运行这些容器的平台。
工作原理:Dockerfile → 运行时
要将应用容器化,你需要使用三个主要组件:Dockerfile、镜像和容器。
Dockerfile
Dockerfile 是一个纯文本文件,列出了一系列指令。执行 docker build 时会读取这些指令并创建镜像。
镜像
Docker 镜像是你的应用的快照,包含运行所需的一切。镜像存放在镜像仓库(类似于 VCS)中,所有环境都可以通过 docker pull 拉取相同的镜像。
容器
执行 docker run 会基于镜像创建一个运行实例——即容器。
Docker 架构
Docker 的架构由三个核心组件组成:
- 客户端 – 你编写代码的地方(例如笔记本电脑)。
- Docker Daemon (
dockerd) – 负责监听 API 请求、管理镜像并运行容器的“大脑”。 - 镜像仓库 – 用于存放镜像的远程存储。
Docker 命令的生命周期
# Build an image from a Dockerfile (client → daemon)
docker build -t myapp:latest .
# Push the local image to a remote registry
docker push myrepo/myapp:latest
# Pull the image on a target environment
docker pull myrepo/myapp:latest
# Run a container from the pulled image
docker run -d -p 80:80 myrepo/myapp:latest
总结
使用 Docker 后,开发环境与生产环境变得完全一致。如果它在你的机器上可以运行,那么它也会在服务器上运行,因为你已经把“你的机器”(即容器)连同代码一起交付了。
现在我们已经明白为什么需要容器,系列的下一步是学习如何一次管理多个容器。这就是 Kubernetes 登场的地方。
敬请期待第 2 部分!