第1章 Docker入门:容器化技术简介
1.1 什么是容器化技术传统部署方式的痛点在传统的软件部署中我们经常遇到这样的问题环境差异在我的机器上能运行成为开发与运维之间的经典矛盾依赖冲突不同应用需要不同版本的库或运行时资源浪费为了隔离应用不得不为每个应用准备独立的服务器或虚拟机部署复杂需要在每台机器上重复配置环境、安装依赖容器化技术的解决方案容器化技术通过将应用程序及其所有依赖打包到一个独立的、可移植的单元中彻底解决了上述问题。容器的核心特征封装性应用程序、依赖库、配置文件统一打包隔离性每个容器拥有独立的文件系统、进程空间、网络栈轻量级共享宿主机内核启动速度快资源占用少可移植性在任何支持容器的平台上运行行为一致容器 vs 进程容器本质上是一个特殊的进程但它通过Linux内核的命名空间Namespace和控制组Cgroups技术实现了隔离传统进程 - 共享操作系统资源 - 可以相互干扰 - 依赖系统环境 容器进程 - 独立的文件系统视图 - 独立的网络栈 - 受控的资源配额 - 自包含的运行环境1.2 Docker的发展历史起源与诞生2013年3月Docker由dotCloud公司后更名为Docker Inc.开源发布初衷简化应用部署提高开发效率技术基础基于Linux容器技术LXC后发展出自己的容器运行时libcontainer关键里程碑2014年Docker 1.0发布生产就绪2015年Docker公司推出Docker HubDocker ComposeDocker Machine2016年Docker原生支持Swarm集群编排2017年Kubernetes成为容器编排的事实标准Docker开始支持Kubernetes2019年Docker企业版出售给Mirantis2020年Kubernetes弃用Docker作为容器运行时但Docker镜像仍然兼容生态系统演进Docker推动了整个容器生态的发展Docker生态系统 ├── 容器运行时containerd, runc ├── 镜像格式OCI (Open Container Initiative) ├── 编排工具Kubernetes, Docker Swarm ├── 镜像仓库Docker Hub, Harbor, Quay └── 监控工具Prometheus, cAdvisor1.3 Docker vs 虚拟机架构对比虚拟机架构------------------ ------------------ | Application | | Application | ------------------ ------------------ | Libraries | | Libraries | ------------------ ------------------ | Guest OS | | Guest OS | ------------------ ------------------ | | | Hypervisor (VMware/KVM) | | | ---------------------------------------- | Host Operating System | ---------------------------------------- | Physical Hardware | ----------------------------------------Docker容器架构---------- ---------- ---------- | App A | | App B | | App C | ---------- ---------- ---------- | Libs | | Libs | | Libs | ---------- ---------- ---------- | | | Docker Engine | | | -------------------------------------- | Host Operating System | -------------------------------------- | Physical Hardware | --------------------------------------关键区别对比特性虚拟机Docker容器启动速度分钟级秒级甚至毫秒级资源占用GB级包含完整OSMB级共享内核性能开销较高硬件虚拟化接近原生隔离级别操作系统级别进程级别镜像大小GB级MB级操作系统可运行不同OS共享宿主机内核适用场景完全隔离、跨平台OS微服务、快速迭代技术实现差异虚拟机通过Hypervisor如KVM、VMware进行硬件虚拟化每个VM运行完整的操作系统CPU、内存、I/O都需要虚拟化层转换Docker容器使用Linux内核的Namespace进行隔离PID、NET、IPC、MNT、UTS、USER使用Cgroups进行资源限制直接调用宿主机内核无需额外虚拟化层何时选择虚拟机虚拟机仍然有其不可替代的场景需要运行不同操作系统如在Linux上运行Windows应用更强的安全隔离敏感应用需要完全隔离内核级别操作需要修改或测试内核参数遗留系统迁移将物理机迁移到虚拟环境容器与虚拟机的结合在生产环境中两者常常结合使用物理服务器 └── 虚拟机1 (Ubuntu) └── Docker容器A (Nginx) └── Docker容器B (MySQL) └── 虚拟机2 (CentOS) └── Docker容器C (App) └── Docker容器D (Redis)这种架构结合了虚拟机的安全隔离和容器的轻量高效。1.4 Docker的核心价值和应用场景核心价值1. 环境一致性问题开发、测试、生产环境不一致导致的能运行问题Docker方案# 开发环境 docker run -d myapp:1.0 # 测试环境 docker run -d myapp:1.0 # 生产环境 docker run -d myapp:1.0同一个镜像在任何环境中行为完全一致。2. 快速交付与部署传统方式准备服务器安装操作系统配置环境变量安装依赖Python、Node.js、MySQL等部署应用代码调试配置Docker方式dockerrun -d -p80:80 myapp:latest一条命令几秒钟完成部署。3. 资源利用率提升在同样的硬件资源下虚拟机可能只能运行10个虚拟机Docker可以运行100个甚至更多容器4. 微服务架构的理想载体单体应用 → 微服务拆分 用户服务 (Container 1) 订单服务 (Container 2) 支付服务 (Container 3) 商品服务 (Container 4) 每个服务独立开发、部署、扩展典型应用场景场景1Web应用部署# 前端应用dockerrun -d -p80:80 nginx-frontend# 后端APIdockerrun -d -p8080:8080 api-backend# 数据库dockerrun -d -p3306:3306 mysql:8.0场景2持续集成/持续部署 (CI/CD)# GitLab CI配置示例build:stage:buildscript:-docker build-t myapp:$CI_COMMIT_SHA .-docker push myapp:$CI_COMMIT_SHAdeploy:stage:deployscript:-docker pull myapp:$CI_COMMIT_SHA-docker stop myapp||true-docker run-d--name myapp myapp:$CI_COMMIT_SHA场景3开发环境标准化团队成员使用统一的开发环境# 所有开发者运行相同的开发环境docker-composeup# 包含# - Python 3.9# - PostgreSQL 13# - Redis 6# - Nginx场景4多版本测试同时测试应用在不同环境下的表现# Python 3.8环境dockerrun -v$(pwd):/app python:3.8 python /app/test.py# Python 3.9环境dockerrun -v$(pwd):/app python:3.9 python /app/test.py# Python 3.10环境dockerrun -v$(pwd):/app python:3.10 python /app/test.py场景5大数据与机器学习# 运行Jupyter Notebookdockerrun -p8888:8888 jupyter/datascience-notebook# 运行TensorFlow训练dockerrun --gpus all -v$(pwd):/workspace tensorflow/tensorflow:latest-gpu场景6数据库快速部署与迁移# 快速启动MySQL用于开发dockerrun -d\--name mysql-dev\-eMYSQL_ROOT_PASSWORD123456\-p3306:3306\mysql:8.0# 数据库迁移导出dockerexecmysql-dev mysqldump -uroot -p123456 mydbbackup.sql# 数据库迁移导入到新容器dockerexec-i mysql-prod mysql -uroot -ppassword mydbbackup.sql场景7微服务编排使用Docker Compose管理复杂的微服务应用version:3services:web:image:myapp-webports:-80:80api:image:myapp-apidepends_on:-db-cachedb:image:postgres:13cache:image:redis:6ROCm虚拟化栈场景针对ROCm开发Docker可以提供# 运行特定版本的ROCm环境dockerrun --device/dev/kfd --device/dev/dri\--group-add video\rocm/rocm-terminal:5.7\rocminfo# 构建和测试ROCm应用dockerrun -v$(pwd):/workspace\rocm/dev-ubuntu-22.04:5.7\bash-ccd /workspace make ./test1.5 Docker的局限性了解Docker的局限性同样重要1. 不适合运行图形界面应用虽然有解决方案X11转发但比较复杂且性能不佳。2. 持久化数据需要额外管理容器删除后内部数据也会丢失需要使用数据卷。3. 网络配置相对复杂特别是在需要跨主机通信时。4. 安全性需要额外考虑容器共享宿主机内核安全配置不当可能导致权限提升。5. 学习曲线虽然基本使用简单但要精通需要理解Linux、网络、存储等知识。1.6 小结通过本章学习我们了解了✅容器化技术通过封装、隔离、轻量化解决应用部署问题✅Docker历史从2013年诞生到成为容器技术标准✅架构对比Docker容器共享内核比虚拟机更轻量高效✅核心价值环境一致性、快速部署、资源高效、微服务支持✅应用场景Web部署、CI/CD、开发环境、测试、大数据等✅局限性图形界面、持久化、网络、安全等需要注意的方面下一步在第2章中我们将深入了解Docker的核心概念镜像、容器、仓库以及Docker的整体架构。这些概念是掌握Docker的基础。思考题在你的日常工作中哪些场景可以使用Docker来提升效率对于ROCm虚拟化栈项目使用Docker会带来哪些具体好处你认为在生产环境中什么情况下应该选择虚拟机而不是容器相关资源Docker官方文档https://docs.docker.com/Docker Hubhttps://hub.docker.com/容器技术原理https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html

相关新闻

SDK 是什么,全称 Software Development Kit,即软件开发工具包

SDK 是什么,全称 Software Development Kit,即软件开发工具包

SDK 是什么,全称 Software Development Kit,即软件开发工具包 一句话概括 SDK,全称 Software Development Kit,即软件开发工具包。是软件厂商提供给开发者的一套工具集合,包含文档、示例代码、库文件(如 ja…

2026/5/17 4:02:00 阅读更多 →
技术探索:LTX-2模型本地化部署与AI视频创作效率优化指南

技术探索:LTX-2模型本地化部署与AI视频创作效率优化指南

技术探索:LTX-2模型本地化部署与AI视频创作效率优化指南 【免费下载链接】ComfyUI-LTXVideo LTX-Video Support for ComfyUI 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI-LTXVideo 如何突破AI视频创作的硬件限制?在4K视频生成需求…

2026/7/3 2:06:14 阅读更多 →
如何修复网站ERR_NAME_NOT_RESOLVED错误?

如何修复网站ERR_NAME_NOT_RESOLVED错误?

在使用 WordPress 网站时,很多人可能会遇到“ERR_NAME_NOT_RESOLVED”错误。这一般是访问网站时浏览器找不到对应的 IP 地址导致的。这种情况不仅会影响用户浏览网站,还会阻碍网站所有者进行更新、维护等操作。本文将为你提供详细的步骤和解决方案。导致…

2026/5/17 4:01:58 阅读更多 →

最新新闻

基于Si4731与PIC18F87J50的数字收音机系统设计

基于Si4731与PIC18F87J50的数字收音机系统设计

1. 项目背景与核心组件解析在数字音频技术蓬勃发展的今天,AM/FM广播接收器依然保持着独特的魅力。这个项目基于Si4731数字收音机芯片和PIC18F87J50微控制器,构建了一套完整的广播接收解决方案。不同于传统模拟收音机,这套系统采用了全数字化的…

2026/7/3 20:31:18 阅读更多 →
思源宋体中文版:7种字重免费商用字体完全指南

思源宋体中文版:7种字重免费商用字体完全指南

思源宋体中文版:7种字重免费商用字体完全指南 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 还在为中文排版找不到合适的免费字体而烦恼吗?思源宋体中文版&…

2026/7/3 20:27:18 阅读更多 →
2026年多模态AI爆发的三大工程临界点

2026年多模态AI爆发的三大工程临界点

1. 项目概述:这不是预测,是正在发生的产业切片 “2026年4月下旬AI爆发”这个标题乍看像媒体噱头,但作为连续跟踪大模型产业落地六年的从业者,我必须说:它不是时间锚点,而是技术演进的临界刻度。过去三个月&…

2026/7/3 20:21:16 阅读更多 →
【信息科学与工程学】计算机科学与自动化——第五十七篇 计算性与不可计算性01

【信息科学与工程学】计算机科学与自动化——第五十七篇 计算性与不可计算性01

编号 类型 领域 问题 问题的数学分析 关联知识 1 不可计算性 计算理论 停机问题:判断任意图灵机在给定输入上是否会终止 采用对角线法构造矛盾:假设存在通用停机判定器 H,则构造新图灵机 D 利用 H 判定自身并做相反操作,导致悖论,故不存在这样的算法。 图灵机、…

2026/7/3 20:21:16 阅读更多 →
基于Playwright的UI自动化测试平台:从架构设计到CI/CD集成

基于Playwright的UI自动化测试平台:从架构设计到CI/CD集成

1. 项目概述:为什么需要一个基于PlayWright的UI自动化测试平台?如果你是一名测试工程师或者开发工程师,每天还在为Web应用的UI自动化测试脚本的编写、维护、执行和报告而头疼,那么“基于PlayWright的UI自动化测试平台”这个项目&a…

2026/7/3 20:19:15 阅读更多 →
三步实现IDM永久激活:免费解锁下载神器的终极指南

三步实现IDM永久激活:免费解锁下载神器的终极指南

三步实现IDM永久激活:免费解锁下载神器的终极指南 【免费下载链接】IDM-Activation-Script IDM Activation & Trail Reset Script 项目地址: https://gitcode.com/gh_mirrors/id/IDM-Activation-Script 你是否厌倦了Internet Download Manager&#xff0…

2026/7/3 20:19:15 阅读更多 →

日新闻

Nginx防御TLS重协商攻击实战:从原理到配置与监控

Nginx防御TLS重协商攻击实战:从原理到配置与监控

1. 项目概述:为什么TLS重协商攻击至今仍需警惕十多年前的CVE-2011-1473,一个关于TLS/SSL协议重协商机制的漏洞,现在提起来还有必要吗?很多运维和开发朋友可能会觉得,这都老掉牙了,现代服务器和客户端不都默…

2026/7/3 0:03:59 阅读更多 →
华为防火墙双通道远程管理实战:Web与SSH配置详解

华为防火墙双通道远程管理实战:Web与SSH配置详解

1. 项目概述:为什么需要双通道远程管理防火墙?在任何一个稍具规模的企业网络里,防火墙都是那个默默守护在边界的关键角色。作为网络工程师,我们不可能每次都跑到机房,插上console线去配置它。远程管理能力,…

2026/7/3 0:03:59 阅读更多 →
AD74413R与PIC18F65K40的高精度工业数据采集方案

AD74413R与PIC18F65K40的高精度工业数据采集方案

1. 项目概述:AD74413R与PIC18F65K40的协同工作在工业自动化和精密测量领域,同时实现高精度模数转换(ADC)和数模转换(DAC)功能是许多复杂系统的核心需求。AD74413R作为一款四通道可配置模拟输入/输出器件,与PIC18F65K40微控制器的组合&#xf…

2026/7/3 0:05:59 阅读更多 →

周新闻

月新闻