news 2026/6/9 19:45:57

Docker 入门实战教程:从零开始掌握容器化技术

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Docker 入门实战教程:从零开始掌握容器化技术

引言:为什么需要 Docker?

在软件开发的世界里,我们经常遇到这样的困扰:"在我的电脑上明明可以运行,为什么到服务器上就报错了?"

这个问题一直困扰着无数开发者。不同的操作系统、不同的依赖库版本、不同的环境配置……这些差异导致了开发和部署环境的不一致。

而 Docker 的出现,彻底改变了这一局面。它让应用程序及其依赖环境打包成一个轻量级的"容器",在任何支持 Docker 的平台上都能以相同的方式运行。这就是著名的一次构建,到处运行(Build Once, Run Anywhere)。

一、Docker 是什么?

容器技术的革命

Docker 是一个开源的容器化平台,它可以将应用程序及其依赖环境打包成一个独立的容器。与传统虚拟机相比,Docker 容器更加轻量、快速、高效。

传统虚拟机 vs Docker 容器:

对比维度虚拟机Docker 容器
启动速度分钟级秒级 ⚡
磁盘占用GB 级别MB 级别 💾
性能表现接近原生接近原生
隔离程度完全隔离进程级隔离
可移植性较差优秀 ✨

虚拟机 vs Docker容器

Docker 的核心优势

快速部署— 容器启动只需几秒钟

环境一致性— 开发、测试、生产环境完全一致

资源高效— 相比虚拟机节省大量系统资源

微服务架构— 完美支持微服务部署

持续集成/部署— 简化 CI/CD 流程

二、Docker 核心概念详解

镜像(Image)

镜像就像是应用程序的"模板"或"蓝图"。它是一个只读的文件包,包含了运行应用程序所需的所有内容:代码、运行时、系统工具、系统库和设置。

镜像的三大特点:

🔹分层存储— 每一层都是只读的

🔹可复用— 多个容器可以共享同一个镜像

🔹版本管理— 通过标签(tag)管理不同版本

常见镜像示例:

nginx:latest # 最新版本的 Nginx mysql:8.0 # MySQL 8.0 ubuntu:20.04 # Ubuntu 20.04

Docker镜像分层结构

容器(Container)

容器是镜像的运行实例。如果说镜像是"类",那么容器就是"对象"。你可以从一个镜像启动多个容器,每个容器都是相互隔离的。

容器的生命周期:

1️⃣ Created — 容器已创建但未启动 2️⃣ Running — 容器正在运行 3️⃣ Paused — 容器已暂停 4️⃣ Stopped — 容器已停止 5️⃣ Deleted — 容器已删除

Docker容器生命周期

🏪 仓库(Registry)

仓库是存放镜像的地方,就像代码仓库存放代码一样。

常见的 Docker 镜像仓库:

🌐 Docker Hub — 官方公共仓库(hub.docker.com) 阿里云镜像仓库 — 国内访问速度快 🏢 私有仓库 — 企业内部自建

Docker系统架构图

三、Docker 安装指南

💻Windows 安装

系统要求:

  • Windows 10/11 专业版或企业版
  • 启用 Hyper-V 和 WSL 2

安装步骤:

  1. 访问 Docker 官网下载 Docker Desktop for Windows
  2. 双击安装程序,按照提示完成安装
  3. 重启计算机
  4. 启动 Docker Desktop
  5. 验证安装:
docker --version docker run hello-world

🐧 Linux 安装(以 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. 安装 Docker Engine sudo 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 -p 8080: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_PASSWORD=my-secret-pw \ -e MYSQL_DATABASE=mydb \ -p 3306: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.8' services: # Web 应用 web: build: . ports: - "5000:5000" depends_on: - db environment: - DATABASE_URL=mysql://root:my-secret-pw@db:3306/mydb networks: - app-network # 数据库 db: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: my-secret-pw MYSQL_DATABASE: mydb volumes: - mysql-data:/var/lib/mysql ports: - "3306:3306" networks: - app-network # Nginx 反向代理 nginx: image: nginx:latest ports: - "80:80" volumes: - ./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.0 myapp:latest

📦 容器管理命令

# 运行容器 docker run [OPTIONS] IMAGE [COMMAND] docker run -d -p 80: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 网络模式

🌐 网络模式类型

模式说明使用场景
bridge默认模式,容器通过虚拟网桥通信单机多容器通信
host共享宿主机网络高性能需求
none无网络配置离线处理任务
container共享其他容器网络容器间协作

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 update && apt-get install -y --no-install-recommends \ curl \ && rm -rf /var/lib/apt/lists/*

🛡️ 运行时安全

# 限制容器资源 docker run -d \ --memory="512m" \ --cpus="1.0" \ --read-only \ --security-opt=no-new-privileges \ nginx

九、Docker 故障排查

🔍 常见问题及解决方案

问题 1:容器无法启动

# 查看容器日志 docker logs <container-id> # 查看容器详情 docker inspect <container-id> # 尝试交互式运行 docker run -it <image> /bin/bash

问题 2:端口冲突

# 查看端口占用 netstat -tunlp | grep <port> # 更改端口映射 docker run -p 8081:80 nginx # 使用其他端口

问题 3:磁盘空间不足

# 清理未使用的镜像 docker image prune -a # 清理未使用的容器 docker container prune # 清理未使用的卷 docker volume prune # 一键清理 docker system prune -a --volumes

问题 4:网络连接问题

# 检查网络配置 docker network inspect <network-name> # 重建网络 docker network rm <network-name> docker network create <network-name>

🛠️调试技巧

# 查看容器资源使用情况 docker stats # 查看容器进程 docker top <container-id> # 实时查看日志 docker logs -f --tail 100 <container-id> # 导出容器文件系统 docker export <container-id> > container.tar

十、总结

Docker 作为容器化技术的代表,已经彻底改变了软件开发和部署的方式。通过本文的学习,你已经掌握了:

✅ Docker 的核心概念(镜像、容器、仓库) ✅ Docker 的安装方法 ✅ 常用命令的使用 ✅ Dockerfile 的编写技巧 ✅ 数据持久化和网络配置 ✅ 实战项目部署经验
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 17:23:11

2026年程序员职业变革:初级岗大幅缩减,大模型工程师年薪飙升,揭秘三大成功转型路径!

回望十年前&#xff0c;程序员还顶着 “21 世纪黄金职业” 的光环&#xff0c;是无数年轻人眼中 “敲代码就能拿高薪” 的理想选择。但步入 2025 年&#xff0c;这个曾风光无限的领域正遭遇前所未有的行业调整期&#xff1a;科技公司裁员潮未完全退去、薪资分化持续拉大、AI 对…

作者头像 李华
网站建设 2026/6/9 17:23:46

【人工智能通识专栏】第十一讲:内容写作

【人工智能通识专栏】第十一讲&#xff1a;内容写作 上一讲我们掌握了阅读理解&#xff0c;让LLM成为高效的“阅读助手”。本讲转向另一高频应用&#xff1a;内容写作——利用DeepSeek等LLM生成文章、报告、邮件、社交媒体文案、脚本、故事等高质量文字内容。 内容写作是LLM最…

作者头像 李华
网站建设 2026/6/9 17:22:02

GLM-TTS与gRPC健康检查集成:服务状态实时监测

GLM-TTS与gRPC健康检查集成&#xff1a;服务状态实时监测 在AI语音生成系统日益走向生产落地的今天&#xff0c;一个常被忽视却至关重要的问题浮出水面&#xff1a;我们如何确信那个正在为你“说话”的模型服务&#xff0c;真的还活着&#xff1f; 设想这样一个场景——你为智…

作者头像 李华
网站建设 2026/6/9 17:28:56

宏智树AI“论文魔法盒”:3步生成课程论文,学术小白也能变高手

对许多学生来说&#xff0c;课程论文是学术写作的“初体验”&#xff0c;但也是“最容易翻车”的环节——选题太普通被老师批“没新意”&#xff0c;结构太混乱像流水账&#xff0c;引用不规范被扣分&#xff0c;甚至熬夜查资料写出来的论文&#xff0c;老师只看两页就说“逻辑…

作者头像 李华
网站建设 2026/6/8 19:30:40

GLM-TTS在森林防火宣传中的定时自动播报实现

GLM-TTS在森林防火宣传中的定时自动播报实现 在四川凉山林区的一处山脚下&#xff0c;清晨7点整&#xff0c;广播里传来熟悉的声音&#xff1a;“我是护林员老张&#xff0c;今天气温回升、风力加大&#xff0c;请大家注意野外用火安全。”语气沉稳、口音地道&#xff0c;听起来…

作者头像 李华
网站建设 2026/6/9 19:45:07

【人工智能通识专栏】第二十三讲:数据处理与分析

【人工智能通识专栏】第二十三讲&#xff1a;数据处理与分析 在上几讲中&#xff0c;我们从科创项目选题、申报到管理与答辩&#xff0c;系统梳理了AI项目的全生命周期。今天&#xff0c;我们聚焦一个基础却至关重要的环节——数据处理与分析。在AI科创项目中&#xff0c;“数…

作者头像 李华