🚀 前言

在云原生时代,Docker 已经成了开发者不可或缺的工具。今天带大家从底层环境搭建开始,一步步玩转 Docker 容器化技术。


一、 环境搭建:告别官方脚本连接重置

在 Ubuntu 22.04 上安装 Docker 时,由于网络环境问题,官方的 get.docker.com 脚本经常报 SSL_connect: 连接被对方重置

解决方案: 建议直接使用阿里云镜像源进行手动安装,不仅稳定而且速度极快。

# 添加阿里云 GPG 密钥并设置稳定版仓库
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

二、 基础任务:从 Hello World 到 Nginx

1. 验证安装

成功安装后,运行经典的 hello-world,看到 Hello from Docker! 标志着我们的容器引擎已经成功跑了起来。

在这里插入图片描述

2. 运行 Nginx Web 服务

容器的魅力在于“开箱即用”。通过简单的端口映射,我们就能启动一个 Nginx 服务。

docker run -d -p 8080:80 --name my-nginx nginx:1.25

通过 curl 访问宿主机的 8080 端口,看到 HTTP/1.1 200 OK,说明流量已成功转发至容器内部。


三、 进阶实战:构建自定义 Python Flask 镜像

这一步我们要亲手编写 Dockerfile,将一个 Python 应用打包成镜像。

1. 编写 app.py

我们编写了一个简单的 Flask 应用,它能返回容器的主机名和环境变量中的学号信息。

2. Dockerfile 解析

FROM python:3.11-slim
WORKDIR /app
COPY app.py .
RUN pip install --no-cache-dir flask
EXPOSE 5000
CMD ["python", "app.py"]

3. 构建与运行

docker build -t lab1-flask:v1 .
docker run -d -p 5000:5000 -e STUDENT=******** --name flask-app lab1-flask:v1

在这里插入图片描述


四、 深度观察:镜像分层与容器隔离

1. 镜像层 (Layers)

执行 docker history lab1-flask:v1,你会发现 Dockerfile 里的每一行指令都对应一个镜像层。这种分层结构让镜像的分发极其高效,相同的基础层可以被多个镜像共享。

2. 容器隔离的本质

通过实验,我们观察到了有趣的现象:

  • PID 隔离:在宿主机看到的进程 PID 为 12420,但在容器内,它认为自己是 PID 1。这就是 Namespace 的魔力。
  • 文件系统隔离:容器内运行的是精简的 Debian,而宿主机是 Ubuntu。

五、 结语

Docker 并不只是简单的“虚拟机替代品”,它是通过 Linux 内核的 Namespace 实现资源隔离,通过 Cgroup 实现资源限制的轻量级虚拟化技术。

下一篇预告: 我们将探索如何将容器部署到 Kubernetes (minikube) 集群中,开启编排之旅!


Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐