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

  1. 访问 Docker 官方网站 下载 Docker Desktop。
  2. 安装过程中勾选“启用 Kubernetes”和“使用 WSL 2(仅限 Windows)”选项以支持更多功能。
  3. 安装完成后,通过终端输入 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 命令会同时触发两个动作:
    1. 若本地未找到指定镜像,Docker 会从默认仓库(Docker Hub)拉取。
    2. 使用镜像创建并启动容器。

深入理解 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”
  • 正文通过案例和命令行演示多次关联关键词
  • 结论部分呼应主题,强化关键词记忆点

最新发布