当前位置: 首页 > news >正文

Docker 容器化

Docker 容器化:从零到实战的全栈指南

什么是 Docker 容器化?Docker 是一种开源的容器化平台,它允许开发者将应用及其依赖打包到一个轻量级、可移植的容器中。与传统的虚拟机不同,Docker 容器共享宿主机的操作系统内核,因此启动速度更快、资源占用更少。容器化技术解决了“在我机器上能运行”的经典问题,让开发、测试和生产环境保持一致。## 为什么选择 Docker?-环境一致性:开发、测试、生产环境完全一致,避免“水土不服”。-快速部署:容器秒级启动,比虚拟机快数倍。-资源隔离:每个容器拥有独立的文件系统、网络和进程空间。-可移植性:一次构建,随处运行(Linux、Windows、macOS)。## 核心概念速览-镜像(Image):只读模板,包含应用及其依赖。例如nginx:latest。-容器(Container):镜像的运行实例,可读写、可启动、可停止。-Dockerfile:构建镜像的脚本文件。-Docker Compose:定义和运行多容器应用的工具。## 实战一:构建一个 Python Web 应用容器### 1. 创建项目结构bashmkdir docker-python-appcd docker-python-app### 2. 编写 Python 应用创建app.pypythonfrom flask import Flask# 初始化 Flask 应用app = Flask(__name__)@app.route('/')def hello(): return "Hello from Docker Container! 🐳"# 如果直接运行此脚本,启动开发服务器if __name__ == '__main__': # 监听 0.0.0.0:5000,允许外部访问 app.run(host='0.0.0.0', port=5000, debug=True)### 3. 编写 Dockerfile创建Dockerfiledockerfile# 使用官方 Python 3.11 镜像作为基础FROM python:3.11-slim# 设置工作目录WORKDIR /app# 将当前目录下的 requirements.txt 复制到容器中# 注意:这个文件后面会创建COPY requirements.txt .# 安装 Python 依赖RUN pip install --no-cache-dir -r requirements.txt# 将应用代码复制到容器COPY app.py .# 暴露容器端口 5000EXPOSE 5000# 容器启动时运行的命令CMD ["python", "app.py"]### 4. 创建依赖文件创建requirements.txtflask==3.0.0### 5. 构建并运行容器bash# 构建镜像,标签为 my-python-app:v1docker build -t my-python-app:v1 .# 运行容器,将宿主机 8080 端口映射到容器 5000 端口docker run -d -p 8080:5000 --name my-app my-python-app:v1# 查看运行中的容器docker ps# 测试应用curl http://localhost:8080# 输出:Hello from Docker Container! 🐳代码注释说明:--d表示后台运行容器。--p 8080:5000将宿主机 8080 端口映射到容器的 5000 端口。---name给容器命名,方便管理。## 实战二:使用 Docker Compose 管理多服务假设我们需要一个 Python Web 应用 + Redis 缓存的组合。Docker Compose 可以一键启动多个容器。### 1. 更新 Python 应用修改app.py,加入 Redis 计数功能:pythonfrom flask import Flaskimport redisimport os# 初始化 Flask 应用app = Flask(__name__)# 从环境变量获取 Redis 主机地址,默认 localhostredis_host = os.getenv('REDIS_HOST', 'localhost')# 连接 Redis 服务器r = redis.Redis(host=redis_host, port=6379, decode_responses=True)@app.route('/')def hello(): return "Hello from Docker Container! 🐳"@app.route('/count')def count(): # 增加计数并返回当前值 visits = r.incr('counter') return f"Visit count: {visits}"if __name__ == '__main__': app.run(host='0.0.0.0', port=5000, debug=True)更新requirements.txtflask==3.0.0redis==5.0.0### 2. 编写 docker-compose.yml创建docker-compose.ymlyamlversion: '3.8'services: # Web 应用服务 web: build: . # 使用当前目录的 Dockerfile 构建 ports: - "8080:5000" # 端口映射 environment: - REDIS_HOST=redis # 将环境变量设置为 Redis 服务名 depends_on: - redis # 确保 Redis 先启动 # Redis 缓存服务 redis: image: redis:7-alpine # 使用官方 Redis 镜像 ports: - "6379:6379" # 暴露 Redis 端口(可选) volumes: - redis-data:/data # 持久化 Redis 数据# 定义命名卷volumes: redis-data:### 3. 启动多容器应用bash# 启动所有服务(后台运行)docker-compose up -d# 查看运行状态docker-compose ps# 测试应用curl http://localhost:8080/count# 输出:Visit count: 1curl http://localhost:8080/count# 输出:Visit count: 2# 查看日志docker-compose logs -f# 停止并移除所有容器docker-compose down代码注释说明:-build: .表示使用当前目录的 Dockerfile 构建镜像。-environment设置环境变量,让 Web 应用知道 Redis 的主机名。-depends_on确保 Redis 容器在 Web 容器之前启动。-volumes实现数据持久化,防止容器删除后数据丢失。## 高级技巧与最佳实践### 1. 优化 Dockerfile 减少镜像大小dockerfile# 多阶段构建示例FROM python:3.11-slim AS builderWORKDIR /appCOPY requirements.txt .RUN pip install --no-cache-dir -r requirements.txtFROM python:3.11-slimWORKDIR /appCOPY --from=builder /usr/local/lib/python3.11/site-packages /usr/local/lib/python3.11/site-packagesCOPY app.py .EXPOSE 5000CMD ["python", "app.py"]### 2. 使用 .dockerignore 文件创建.dockerignore,排除不必要的文件:__pycache__.git*.pyc.env*.md### 3. 常用 Docker 命令速查bash# 镜像管理docker images # 列出镜像docker rmi <image_id> # 删除镜像docker pull <image> # 拉取远程镜像# 容器管理docker stop <container> # 停止容器docker start <container> # 启动已停止的容器docker rm <container> # 删除容器docker exec -it <container> /bin/bash # 进入容器终端# 日志与监控docker logs <container> # 查看日志docker stats # 查看资源占用## 总结Docker 容器化是现代 DevOps 的基石,它通过标准化的打包和运行方式,彻底改变了应用的交付和部署流程。本文通过两个实战示例,展示了从单个 Python Web 应用到多服务组合(Web + Redis)的完整容器化过程。关键要点:-Dockerfile是构建镜像的蓝图,需要优化以减少层数和体积。-Docker Compose是管理多容器应用的利器,适合微服务架构。-环境变量卷挂载是实现配置灵活性和数据持久化的关键。- 容器化不仅仅是“打包”,更是对开发、测试、运维全流程的重新思考。掌握 Docker 容器化,意味着你能在任何环境中快速、可靠地部署应用。无论你是前端、后端还是全栈工程师,容器化都将成为你工具箱中不可或缺的一部分。

http://www.jsqmd.com/news/1270544/

相关文章:

  • 跨模态检索的工程挑战:文本搜图、图搜文本和图搜图的统一架构
  • HarmonyOS端侧AI在工业质检中的高效应用
  • C54x DSP流水线机制深度解析:RET、XC、CC指令周期与中断响应
  • 优启通3.7修改版:深度优化的PE系统维护工具
  • 2026不停车称重系统品牌排行:广州聚杰全国落地项目获一致好评 - 品牌速递
  • TI微控制器硬件AES引擎深度解析:从寄存器配置到DMA驱动实战
  • 2026年7月四川省内江市联通1000M融合宽带安装流程 - 找卡家园
  • 湖南梵映教育科技有限公司聚焦学员变现,双轨升级课程打造高收益成才路径 - 资讯报道
  • 【非标自动化】2、认识元器件(浪涌保护器)
  • 跨语言LLM应用优化:架构设计与性能调优实战
  • CC2431定位引擎实战:从RSSI原理到嵌入式硬件加速实现
  • 2026年7月江苏省无锡市电信300M单宽带怎么选_避坑指南 - 找卡家园
  • Android 串口底层基础:USB 串口、RS485/232 驱动识别、串口通信框架入门
  • 别再手动整理纪要了!2024Q3起,监管新规要求AI生成内容必须嵌入可审计元数据
  • 谷歌财报技术解析:云原生与AI驱动业绩增长及开发者机遇
  • 从经典QSAR到AI药物设计:分子描述符的演进与应用
  • 写一个简单的sh脚本
  • 2026年 西安缝隙天线厂家:5G通信与车载天线专业定制供应商深度分析 - 卓企推荐
  • 2026年7月江苏省无锡市电信500M单宽带怎么安装? - 找卡家园
  • 2026高返点广告开户渠道合作模式大全及甄选攻略:正规渠道、费用核算与签约避坑全解析 - 商业大观
  • 提示词×产品描述实战指南:7步打造AI时代爆款文案,今天学会明天投产
  • 2026年7月四川省攀枝花市联通1000M融合宽带怎么安装 - 找卡家园
  • 移动端(非uniapp项目) PDA 扫码踩坑:input 聚焦屏蔽软键盘完整解决方案
  • BP神经网络优化永磁同步电机PI控制实践
  • 基于YOLOv13的建筑病害智能检测系统开发与实践
  • SolidWorks许可证预测优化:数据驱动降本增效
  • OpenClaw开源智能体网关:AI助手与即时通讯的完美融合
  • JMeter性能压测实战:如何配置业务请求比例模拟真实流量模型
  • 2026论文AI检测新规与降重工具实战指南
  • AI核心技术解析:RAG、MCP、Agent与Function Call实战指南