Python学习【173】:Docker 核心概念一文搞定:镜像、容器、Dockerfile,别再混淆了!
很多初学者刚开始接触 Docker 时,会被“镜像”、“容器”、“仓库”、“Dockerfile”这些词搞得晕头转向。尤其容易混淆镜像(Image)和容器(Container)——它们到底有什么区别?为什么说容器是“运行中的镜像”?Dockerfile 又扮演什么角色?本文将从零开始,用最直白的语言和命令操作,帮你把这些概念理清楚。读完这篇文章,你将能:- 理解 Dockerfile 的作用并写出第一个自定义镜像
Docker 核心概念:镜像、容器、DockerfileDocker 是一个开源的容器化平台,它允许你将应用程序及其所有依赖(代码、运行时、库、配置)打包成一个独立的、可移植的单元,这个单元就是容器。传统开发中,经常出现“在我电脑上能跑,到你那就挂了”的问题。Docker 通过隔离环境,确保了从开发到生产的环境一致性。同时,它比虚拟机更轻量,启动更快,资源占用更少。2.2 核心概念一:镜像(Image)—— 只读的“模板”镜像是一个只读的、静态的文件集合,里面包含了运行某个软件所需的全部内容:精简的操作系统文件、应用程序、依赖库、环境变量等。你可以把镜像想象成一个“安装光盘”或一个“装修设计图”。常见的镜像有:nginx:alpine(Web 服务器)、mysql:8.0(数据库)、python:3.9-slim(Python 运行环境)。每一行代表一个已下载到本地的镜像。镜像不运行,它只是静静地躺在硬盘上(通常位于 /var/lib/docker)。核心概念二:容器(Container)—— 运行中的“实例”容器是镜像的动态运行实例。当你执行 docker run 时,Docker 会基于镜像创建一个可读写的容器层,并启动其中的进程。你可以把容器理解为“安装并启动后的操作系统”。同一个镜像可以创建多个容器(比如用 nginx:alpine 启动 3 个不同的 Web 服务)。容器可以被启动、停止、删除。删除容器后,对容器内部做的修改(如新建的文件)会丢失,但镜像本身不变。- STATUS 为 Up 表示正在运行,Exited 表示已停止。
一句话总结:镜像是类,容器是实例;镜像是照片底片,容器是洗出来的照片。2.5 核心概念三:Dockerfile —— 定义镜像的“配方”Dockerfile 是一个文本文件,里面包含了一系列构建指令,告诉 Docker 如何从一个基础镜像开始,复制代码、安装依赖、设置环境,最终组装出一个自定义的新镜像。这种方式依赖宿主机上的代码目录,而且每次启动都要重新安装依赖。Dockerfile 可以把代码和依赖一起打包进镜像,实现“一次构建,到处运行”。访问 http://虚拟机IP:5000 即可看到 hello, docker。这个镜像可以导出、上传到仓库,在任何装有 Docker 的机器上直接运行。2.6 实战小练习:从零开始打包你的 Python 应用- 准备代码:创建上面示例中的 app.py 和 requirements.txt。
- 构建镜像:docker build -t my-first-app .
- 运行容器:docker run -d -p 8080:5000 --name test-app my-first-app
- 访问测试:浏览器打开 http://localhost:8080(或虚拟机 IP)。
- 停止并删除:docker stop test-app && docker rm test-app
通过这个小练习,你应该能直观感受到:Docker 让应用交付变成了“一个镜像 + 一条 run 命令”的极致简化。- Dockerfile 是用来构建自定义镜像的脚本,它把环境配置和代码固化到镜像中,实现环境一致性。
- 常用命令:docker images、docker ps、docker run、docker build。
理解了这些核心概念,你就掌握了 Docker 的“地基”。接下来可以学习 Docker Compose(编排多个容器)和 容器网络,进一步解锁微服务部署的威力。让我们保持学习的热情,2026年一马当先、马到成功!