【云原生实践】从零开始:Docker 环境搭建、镜像构建与容器隔离深度探索
·
🚀 前言
在云原生时代,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) 集群中,开启编排之旅!
更多推荐





所有评论(0)