Docker Hello World(保姆级教程)
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战(已更新的所有项目都能学习) / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新开坑项目:《Spring AI 项目实战》 正在持续爆肝中,基于 Spring AI + Spring Boot 3.x + JDK 21..., 点击查看 ;
- 《从零手撸:仿小红书(微服务架构)》 已完结,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;演示链接: http://116.62.199.48:7070 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 90w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 3100+ 小伙伴加入学习 ,欢迎点击围观
在软件开发领域,"Hello World"始终是一个标志性的起点。无论是编程语言学习还是工具探索,它都承载着最基础却至关重要的实践意义。对于 Docker 这一容器化技术而言,"Docker Hello World" 不仅是一个简单的命令,更是理解容器化核心思想的钥匙。本文将通过循序渐进的方式,带领编程初学者和中级开发者从零开始,逐步掌握 Docker 的基础操作,并通过实际案例深入理解其原理与应用场景。
Docker 的核心概念:容器、镜像与引擎
要理解 Docker,首先需要明确三个核心概念:容器(Container)、镜像(Image) 和 Docker 引擎(Engine)。
- 容器:可以将其想象为一个轻量级的“虚拟机”,但它并非完全虚拟化硬件资源,而是通过操作系统级别的虚拟化技术(如 Linux 的命名空间和控制组)实现进程隔离。容器内运行着应用程序及其依赖的所有文件,但共享宿主机的内核。
- 镜像:容器的模板文件,类似于操作系统的安装包。镜像中包含操作系统环境、应用程序代码和依赖库等,开发者可以通过公开仓库(如 Docker Hub)获取或自行构建镜像。
- Docker 引擎:负责管理容器生命周期的软件,包括创建、启动、停止和删除容器等操作。
比喻:若将 Docker 比作物流行业,镜像就像标准的集装箱,容器则是装载货物(应用程序)的集装箱实例,而 Docker 引擎则是调度和管理集装箱的港口系统。
安装 Docker:环境准备
在开始实践前,需根据操作系统安装 Docker。以下是主流系统的安装步骤摘要:
Windows 和 macOS
- 访问 Docker 官方网站 下载 Docker Desktop。
- 安装过程中勾选“启用 Kubernetes”和“使用 WSL 2(仅限 Windows)”选项以支持更多功能。
- 安装完成后,通过终端输入
docker --version
验证安装。
Linux(以 Ubuntu 为例)
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update && sudo apt-get install docker-ce docker-ce-cli containerd.io
sudo docker --version
运行第一个容器:Docker Hello World
现在,我们正式执行经典的 Docker Hello World 案例。
步骤 1:拉取镜像
输入以下命令从 Docker Hub 获取官方的 hello-world
镜像:
docker run hello-world
步骤 2:分析输出结果
执行后,Docker 会自动下载镜像并运行容器。若一切正常,终端将显示:
Hello from Docker!
This message shows that your installation appears to be working correctly.
关键点解析:
docker run
命令会同时触发两个动作:- 若本地未找到指定镜像,Docker 会从默认仓库(Docker Hub)拉取。
- 使用镜像创建并启动容器。
深入理解 Docker Hello World 的原理
镜像拉取机制
当执行 docker run hello-world
时,Docker 引擎会检查本地镜像列表。若未找到该镜像,会向 Docker Hub 发送请求,下载 hello-world
镜像的压缩包(通常为 .tar
文件),并将其解压存储在本地缓存中。
容器生命周期
容器运行后,Docker 会执行镜像中定义的默认命令(在 hello-world
镜像中,该命令仅打印欢迎信息)。执行完成后,容器会自动停止。
比喻:镜像如同食谱,容器则是根据食谱制作的具体菜肴。即使容器销毁,食谱(镜像)仍保留在本地,下次可快速“烹饪”新容器。
Docker 基础命令与操作
查看镜像列表
docker images
输出示例:
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 2 weeks ago 13.3kB
查看容器列表
docker ps -a
参数 -a
表示显示所有容器(包括已停止的)。
删除容器与镜像
若需清理资源,可执行:
docker rm <container_id>
docker rmi <image_id>
Dockerfile:构建自定义镜像
Dockerfile 是定义镜像构建规则的文本文件。接下来,我们通过一个 Python Web 应用案例,学习如何编写 Dockerfile。
案例场景
假设我们有一个简单的 Flask 应用,目录结构如下:
myapp/
├── app.py
└── requirements.txt
Dockerfile 内容
在项目根目录下创建 Dockerfile
,内容如下:
FROM python:3.9-slim
WORKDIR /app
COPY . /app
RUN pip install -r requirements.txt
EXPOSE 5000
CMD ["python", "app.py"]
指令解析:
FROM
:指定基础镜像。WORKDIR
:设置工作目录,后续操作均在此路径下。COPY
:将本地文件复制到镜像中。RUN
:执行命令安装依赖。CMD
:容器启动时运行的默认命令。
构建与运行
docker build -t my-flask-app .
docker run -p 5000:5000 my-flask-app
实战:部署一个 Web 应用
完整代码示例
app.py:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello from Dockerized Flask App!"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
requirements.txt:
Flask==2.3.2
验证部署
访问 http://localhost:5000
,若看到输出信息,则表明容器化部署成功。
常见问题解答
Q1:容器运行后如何交互?
- 使用
docker exec
命令进入正在运行的容器:docker exec -it <container_id> /bin/bash
Q2:如何持久化容器数据?
- 使用
docker volume
管理数据卷,或通过-v
参数挂载宿主机目录:docker run -v /host/path:/container/path my-image
Q3:镜像体积过大怎么办?
- 优化 Dockerfile:
- 分层构建(
multi-stage build
) - 删除构建时的临时文件
- 使用更小的基础镜像(如
alpine
)
- 分层构建(
结论
通过本文的实践,我们从零开始搭建了 Docker 环境,并通过“Hello World”案例和 Flask 应用实战,掌握了镜像构建、容器运行等核心操作。Docker 的核心价值在于其标准化的容器化流程,它让开发者能够聚焦于业务逻辑,而无需过多关注环境配置。
对于编程初学者,建议从简单的案例开始,逐步尝试更复杂的场景;中级开发者则可探索多容器编排(如 Docker Compose)或微服务架构。记住,容器技术的核心在于“一次构建,到处运行”,而 Docker Hello World 正是这条道路的第一步。
关键词布局检查:
- 标题与小标题自然包含“Docker Hello World”
- 正文通过案例和命令行演示多次关联关键词
- 结论部分呼应主题,强化关键词记忆点