Docker:实战教程 - 从零开始掌握容器化技术
引言为什么需要 Docker在软件开发的世界里我们经常遇到这样的困扰“在我的电脑上明明可以运行为什么到服务器上就报错了”这个问题一直困扰着无数开发者。不同的操作系统、不同的依赖库版本、不同的环境配置……这些差异导致了开发和部署环境的不一致。而 Docker 的出现彻底改变了这一局面。它让应用程序及其依赖环境打包成一个轻量级的容器在任何支持 Docker 的平台上都能以相同的方式运行。这就是著名的一次构建到处运行Build Once, Run Anywhere。一、Docker 是什么容器技术的革命Docker 是一个开源的容器化平台它可以将应用程序及其依赖环境打包成一个独立的容器。与传统虚拟机相比Docker 容器更加轻量、快速、高效。传统虚拟机 vs Docker 容器Docker 的核心优势快速部署 — 容器启动只需几秒钟环境一致性 — 开发、测试、生产环境完全一致资源高效 — 相比虚拟机节省大量系统资源微服务架构 — 完美支持微服务部署持续集成/部署 — 简化 CI/CD 流程二、Docker 核心概念详解镜像Image镜像就像是应用程序的模板或蓝图。它是一个只读的文件包包含了运行应用程序所需的所有内容代码、运行时、系统工具、系统库和设置。镜像的三大特点分层存储 — 每一层都是只读的可复用 — 多个容器可以共享同一个镜像版本管理 — 通过标签tag管理不同版本常见镜像示例nginx:latest # 最新版本的 Nginxmysql:8.0 # MySQL 8.0ubuntu:20.04 # Ubuntu 20.04容器Container容器是镜像的运行实例。如果说镜像是类那么容器就是对象。你可以从一个镜像启动多个容器每个容器都是相互隔离的。容器的生命周期Created — 容器已创建但未启动Running — 容器正在运行Paused — 容器已暂停Stopped — 容器已停止Deleted — 容器已删除仓库Registry仓库是存放镜像的地方就像代码仓库存放代码一样。常见的 Docker 镜像仓库Docker Hub — 官方公共仓库hub.docker.com阿里云镜像仓库 — 国内访问速度快私有仓库 — 企业内部自建三、Docker 安装指南Windows 安装系统要求Windows 10/11 专业版或企业版启用 Hyper-V 和 WSL 2安装步骤访问 Docker 官网下载 Docker Desktop for Windows双击安装程序按照提示完成安装重启计算机启动 Docker Desktop验证安装docker--version docker run hello-worldLinux 安装以 Ubuntu 为例#1.更新包索引 sudo apt-get update #2.安装依赖包 sudo apt-get install \ ca-certificates \ curl \ gnupg \ lsb-release #3.添加Docker官方 GPG 密钥 sudo mkdir-p/etc/apt/keyrings curl-fsSL https://download.docker.com/linux/ubuntu/gpg|\ sudo gpg--dearmor-o/etc/apt/keyrings/docker.gpg #4.设置仓库 echo \ deb[arch$(dpkg--print-architecture)\ signed-by/etc/apt/keyrings/docker.gpg]\ https://download.docker.com/linux/ubuntu \ $(lsb_release-cs)stable|\ sudo tee/etc/apt/sources.list.d/docker.list/dev/null#5.安装DockerEnginesudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io #6.验证安装 sudo docker run hello-world 配置用户组免 sudo sudo usermod-aG docker $USER newgrp docker四、Docker 实战演练第一个 Docker 容器让我们从最简单的例子开始运行一个 Nginx Web 服务器bash # 拉取Nginx镜像 docker pull nginx:latest # 运行Nginx容器 docker run-d-p8080:80--name my-nginx nginx:latest # 查看运行状态 docker ps # 访问测试 # 打开浏览器访问 http://localhost:8080参数说明-d— 后台运行-p 8080:80— 端口映射宿主机8080→容器80–name my-nginx— 指定容器名称部署 MySQL 数据库# 运行MySQL容器 docker run-d \--name mysql-server \-e MYSQL_ROOT_PASSWORDmy-secret-pw \-e MYSQL_DATABASEmydb \-p3306:3306\-v mysql-data:/var/lib/mysql \ mysql:8.0# 进入MySQL容器 docker exec-it mysql-server mysql-uroot-p # 查看MySQL日志 docker logs mysql-server参数说明-e— 设置环境变量-v— 数据持久化数据存储在命名卷中Docker Compose 多容器应用docker-compose.yml 示例version:3.8services:#Web应用 web:build:.ports:-5000:5000depends_on:-db environment:-DATABASE_URLmysql://root:my-secret-pwdb:3306/mydb networks:-app-network # 数据库 db:image:mysql:8.0environment:MYSQL_ROOT_PASSWORD:my-secret-pw MYSQL_DATABASE:mydb volumes:-mysql-data:/var/lib/mysql ports:-3306:3306networks:-app-network #Nginx反向代理 nginx:image:nginx:latest ports:-80:80volumes:-./nginx.conf:/etc/nginx/nginx.conf depends_on:-web networks:-app-network volumes:mysql-data:networks:app-network:driver:bridge启动服务# 启动所有服务 docker-compose up-d # 查看服务状态 docker-compose ps # 查看日志 docker-compose logs-f # 停止服务 docker-compose down五、Docker 常用命令大全镜像管理命令# 搜索镜像 docker search nginx # 拉取镜像 docker pull nginx:latest # 查看本地镜像 docker images # 删除镜像 docker rmi nginx:latest # 构建镜像 docker build-t myapp:1.0.# 导出镜像 docker save-o myapp.tar myapp:1.0# 导入镜像 docker load-i myapp.tar # 标记镜像 docker tag myapp:1.0myapp:latest容器管理命令# 运行容器 docker run[OPTIONS]IMAGE[COMMAND]docker run-d-p80:80--name web nginx # 查看运行中的容器 docker ps # 查看所有容器包括已停止 docker ps-a # 停止容器 docker stop web # 启动已停止的容器 docker start web # 重启容器 docker restart web # 删除容器 docker rm web # 强制删除运行中的容器 docker rm-f web # 查看容器详细信息 docker inspect web # 查看容器日志 docker logs web docker logs-f web # 实时查看 # 进入容器 docker exec-it web/bin/bash数据管理命令# 创建数据卷 docker volume create my-volume # 查看数据卷 docker volume ls # 查看数据卷详情 docker volume inspect my-volume # 删除数据卷 docker volume rm my-volume # 创建备份 docker run--rm--volumes-from db-container \-v $(pwd):/backup ubuntu \ tar cvf/backup/backup.tar/var/lib/mysql网络管理命令# 创建网络 docker network create my-network # 查看网络 docker network ls # 连接容器到网络 docker network connect my-network my-container # 断开网络连接 docker network disconnect my-network my-container # 删除网络 docker network rm my-network六、Docker 数据持久化数据卷Volume特点由 Docker 管理存储在 Docker 特定目录跨平台兼容性好适合生产环境# 创建命名卷 docker volume create my-data # 使用卷 docker run-d-v my-data:/data nginx # 查看卷信息 docker volume inspect my-data # 清理未使用的卷 docker volume prune挂载目录Bind Mount特点直接映射宿主机目录适合开发环境可以直接访问文件# 挂载当前目录 docker run-d-v $(pwd)/html:/usr/share/nginx/html nginx # 只读挂载 docker run-d-v $(pwd)/html:/usr/share/nginx/html:ro nginx七、Docker 网络模式网络模式类型网络配置示例# 创建自定义网络 docker network create--driver bridge my-network # 运行容器并连接到网络 docker run-d--name web1--network my-network nginx docker run-d--name web2--network my-network nginx # 容器可以通过容器名互相访问 docker exec web1 ping web2八、Docker 安全最佳实践镜像安全# 使用特定版本标签不使用 latest FROM python:3.9-slim # 使用非 root 用户 RUN useradd-m myuser USER myuser # 最小化安装 RUN apt-get updateapt-get install-y--no-install-recommends \ curl \rm-rf/var/lib/apt/lists/*运行时安全# 限制容器资源 docker run-d \--memory512m\--cpus1.0\--read-only \--security-optno-new-privileges \ nginx九、Docker 故障排查常见问题及解决方案问题 1容器无法启动# 查看容器日志 docker logscontainer-id# 查看容器详情 docker inspectcontainer-id# 尝试交互式运行 docker run-itimage/bin/bash问题 2端口冲突# 查看端口占用 netstat-tunlp|grepport# 更改端口映射 docker run-p8081:80nginx # 使用其他端口问题 3磁盘空间不足# 清理未使用的镜像 docker image prune-a # 清理未使用的容器 docker container prune # 清理未使用的卷 docker volume prune # 一键清理 docker system prune-a--volumes问题 4网络连接问题# 检查网络配置 docker network inspectnetwork-name# 重建网络 docker network rmnetwork-namedocker network createnetwork-name调试技巧# 查看容器资源使用情况 docker stats # 查看容器进程 docker topcontainer-id# 实时查看日志 docker logs-f--tail100container-id# 导出容器文件系统 docker exportcontainer-idcontainer.tar十、总结Docker 作为容器化技术的代表已经彻底改变了软件开发和部署的方式。通过本文的学习你已经掌握了Docker 的核心概念镜像、容器、仓库Docker 的安装方法常用命令的使用Dockerfile 的编写技巧数据持久化和网络配置实战项目部署经验

相关新闻

springboot-vue社区独居老人健康管理系统

springboot-vue社区独居老人健康管理系统

目录 系统背景技术架构核心功能创新点应用价值 开发技术路线结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式! 系统背景 随着人口老龄化加剧,独居老人的健康管理成为社会关注焦点。传统管理模式依赖人工巡查或简单电子设备…

2026/5/17 3:37:20 阅读更多 →
springboot-vue社区志愿者服务系统

springboot-vue社区志愿者服务系统

目录系统概述核心功能技术亮点应用价值开发技术路线结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!系统概述 SpringBoot-Vue社区志愿者服务系统是一个基于前后端分离架构的现代化管理平台,旨在优化志愿者服务流程、提升社…

2026/5/17 3:37:20 阅读更多 →
2026年OpenClaw(Clawdbot)一键部署教程及对接QQ、企业微信、飞书、钉钉等IM平台步骤

2026年OpenClaw(Clawdbot)一键部署教程及对接QQ、企业微信、飞书、钉钉等IM平台步骤

2026年OpenClaw(Clawdbot)一键部署教程及对接QQ、企业微信、飞书、钉钉等IM平台步骤!OpenClaw(原Clawdbot/Moltbot)是一个开源的AI智能体平台,凭借其强大的任务自动化能力和多工具集成特性,成为个人与企业构建智能助理…

2026/7/3 1:25:42 阅读更多 →

最新新闻

utdnsmasq源码解析:Rust实现的DNS缓存机制

utdnsmasq源码解析:Rust实现的DNS缓存机制

utdnsmasq源码解析:Rust实现的DNS缓存机制 【免费下载链接】utdnsmasq utdnsmasq is a refactoring of dnsmasq. 项目地址: https://gitcode.com/openeuler/utdnsmasq 前往项目官网免费下载:https://ar.openeuler.org/ar/ utdnsmasq是openEuler项…

2026/7/3 15:29:34 阅读更多 →
智驾不是自动驾驶:L2级辅助驾驶的本质与安全边界

智驾不是自动驾驶:L2级辅助驾驶的本质与安全边界

1. 项目概述:一场被误读的技术概念纠偏“智驾”不是“自动驾驶”——这句话从公安部官网发布后,迅速登上各大平台热搜。但很多人点进去只扫了一眼标题就划走,以为又是官媒在喊口号、打预防针。其实这短短十个字背后,是一次对行业术…

2026/7/3 15:27:29 阅读更多 →
AD74413R与PIC32MX675F512L的高精度混合信号系统设计

AD74413R与PIC32MX675F512L的高精度混合信号系统设计

1. 项目概述:AD74413R与PIC32MX675F512L的协同工作 在嵌入式系统设计中,同时实现高精度模拟信号采集(ADC)和输出(DAC)是工业控制、测试测量等领域的常见需求。AD74413R作为ADI公司推出的软件可配置输入/输出…

2026/7/3 15:27:29 阅读更多 →
SIP工艺在电流频率转换模块中的应用:陶瓷封装、金丝键合与气密性设计的技术优势

SIP工艺在电流频率转换模块中的应用:陶瓷封装、金丝键合与气密性设计的技术优势

电流频率(I/F)转换模块作为测控系统中的关键信号链路器件,其封装形式直接影响整体系统的集成度、可靠性和环境适应性。本文从SIP(System in Package)封装工艺的角度,分析将I/F转换电路集成到SIP模块中的技术…

2026/7/3 15:25:28 阅读更多 →
4-20mA电流环原理与INA196工业检测方案

4-20mA电流环原理与INA196工业检测方案

1. 4-20mA电流环基础与行业应用工业现场最让人头疼的莫过于信号传输过程中的干扰问题。记得我第一次在化工厂调试传感器时,电压信号在长距离传输后衰减严重,导致控制室显示的数值和现场实际值相差甚远。这正是4-20mA电流环标准在工业领域经久不衰的根本原…

2026/7/3 15:23:28 阅读更多 →
Windows端微信QQ防撤回原理与实战:RevokeMsgPatcher工具深度解析

Windows端微信QQ防撤回原理与实战:RevokeMsgPatcher工具深度解析

1. 项目概述:为什么我们需要一个“防撤回”工具? 在即时通讯软件成为工作与生活核心的今天,微信和QQ的“消息撤回”功能,就像一把双刃剑。一方面,它给了我们修正口误、弥补失误的机会;另一方面,…

2026/7/3 15:23:28 阅读更多 →

日新闻

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 阅读更多 →

周新闻

月新闻