跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Shell / Bashjava

Docker 容器技术从入门到实战教程

Docker 容器技术通过环境一致性、资源高效和快速部署解决开发运维差异问题。教程涵盖 Ubuntu 系统下的 Docker 安装验证、镜像与容器核心概念解析、基础命令实战操作。内容包含使用 Dockerfile 构建自定义 Python Flask 镜像的方法,以及利用 Docker Compose 编排 Spring Boot、MySQL 和 Redis 多服务项目的完整流程。同时提供常见问题排查与优化建议,帮助开发者快速掌握容器化部署技能。

疯疯癫癫发布于 2026/3/16更新于 2026/10/25119 浏览
Docker 容器技术从入门到实战教程

一、为什么需要 Docker?

在传统开发中,我们常遇到'在我机器上能跑'的问题——因为本地环境与服务器环境存在差异(如 Python 版本、依赖库、系统配置等)。为解决这个问题,过去常用虚拟机,但其资源开销大、启动慢。

Docker 提供了一种轻量级、秒级启动、环境一致的解决方案:

  • 环境一致性:打包一次,到处运行。
  • 资源高效:共享宿主机内核,无需完整操作系统。
  • 快速部署:拉取镜像即可运行服务,如 MySQL、Redis、Nginx 等。
  • 隔离性强:每个容器独立运行,互不干扰。

二、安装 Docker(以 Ubuntu 为例)

其他系统(Windows/macOS)可参考 Docker Desktop 官网。

方法一:使用官方一键脚本(推荐新手)
# 安装 curl(若未安装)
sudo apt update && sudo apt install -y curl
# 下载安装脚本
curl -fsSL https://get.docker.com -o install-docker.sh
# 执行安装
sudo sh install-docker.sh

该脚本会自动:

  • 卸载旧版 Docker
  • 添加官方仓库
  • 安装 docker-ce、containerd 和 docker-compose-plugin
验证安装
docker --version
sudo systemctl status docker
docker run hello-world

若看到 "Hello from Docker!",说明安装成功!

⚠️ 权限问题:为避免每次加 sudo,可将当前用户加入 docker 组:

sudo usermod -aG docker $USER

三、核心概念速览

概念说明类比
镜像(Image)只读模板,包含应用及所有依赖软件安装包 / 类(Class)
容器(Container)镜像的运行实例正在运行的程序 / 实例(Instance)
Dockerfile构建镜像的指令文件菜谱 / 自动化脚本
仓库(Registry)存储镜像的地方,如 Docker Hub
应用商店

四、基础命令实战

1. 镜像操作
# 搜索镜像
docker search nginx
# 拉取镜像(默认 latest)
docker pull nginx
docker pull python:3.9-slim
# 查看本地镜像
docker images
# 删除镜像
docker rmi nginx
2. 容器操作
# 后台运行 Nginx 容器,映射 80 端口
docker run -d -p 80:80 --name my-nginx nginx
# 查看运行中的容器
docker ps
# 查看所有容器(包括已停止)
docker ps -a
# 进入容器内部
docker exec -it my-nginx /bin/bash
# 查看日志
docker logs my-nginx
# 停止 & 删除容器
docker stop my-nginx
docker rm my-nginx

五、编写 Dockerfile 构建自定义镜像

假设你有一个 Python Flask 应用 app.py:

from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
    return "Hello Docker!"
步骤:
  1. 编写 Dockerfile:

创建 .dockerignore(避免打包无关文件):

.git
__pycache__
*.pyc
.env

创建 requirements.txt:

flask==2.3.3
# 使用官方 Python slim 镜像
FROM python:3.9-slim
# 设置工作目录
WORKDIR /app
# 复制依赖文件并安装
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 复制应用代码
COPY . .
# 暴露端口
EXPOSE 5000
# 启动命令
CMD ["python", "app.py"]
  1. 构建并运行:
# 构建镜像
docker build -t my-flask-app .
# 运行容器
docker run -d -p 5000:5000 --name flask-web my-flask-app

访问 http://localhost:5000 即可看到页面!

💡 生产建议:使用非 root 用户、多阶段构建、国内源加速等。


六、使用 Docker Compose 编排多服务(实战:Spring Boot + MySQL + Redis)

创建 docker-compose.yml:

version: '3'
services:
  mysql:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: demo_db
    ports:
      - "3306:3306"
  redis:
    image: redis:latest
    ports:
      - "6379:6379"
  app:
    image: openjdk:17
    depends_on:
      - mysql
      - redis
    volumes:
      - ./app:/app
    working_dir: /app
    command: ["java", "-jar", "springboot-demo.jar"]
    ports:
      - "8080:8080"

启动项目:

docker-compose up -d

停止项目:

docker-compose down

七、常见问题与优化建议

  • 镜像下载慢? → 配置国内镜像加速器(如阿里云、腾讯云)。
  • 容器启动失败? → 查看日志 docker logs <容器名>。
  • 磁盘空间不足? → 定期清理:docker system prune -a。
  • 安全风险? → 生产环境务必使用非 root 用户运行。

结语

Docker 的学习曲线其实很平缓,关键在于动手实践。从运行一个 hello-world,到部署自己的 Web 应用,每一步都能带来成就感。掌握 Docker 不仅能解决环境问题,更是通往 Kubernetes、CI/CD、微服务架构的大门。

目录

  1. 一、为什么需要 Docker?
  2. 二、安装 Docker(以 Ubuntu 为例)
  3. 方法一:使用官方一键脚本(推荐新手)
  4. 安装 curl(若未安装)
  5. 下载安装脚本
  6. 执行安装
  7. 验证安装
  8. 三、核心概念速览
  9. 四、基础命令实战
  10. 1. 镜像操作
  11. 搜索镜像
  12. 拉取镜像(默认 latest)
  13. 查看本地镜像
  14. 删除镜像
  15. 2. 容器操作
  16. 后台运行 Nginx 容器,映射 80 端口
  17. 查看运行中的容器
  18. 查看所有容器(包括已停止)
  19. 进入容器内部
  20. 查看日志
  21. 停止 & 删除容器
  22. 五、编写 Dockerfile 构建自定义镜像
  23. 步骤:
  24. 使用官方 Python slim 镜像
  25. 设置工作目录
  26. 复制依赖文件并安装
  27. 复制应用代码
  28. 暴露端口
  29. 启动命令
  30. 构建镜像
  31. 运行容器
  32. 六、使用 Docker Compose 编排多服务(实战:Spring Boot + MySQL + Redis)
  33. 七、常见问题与优化建议
  34. 结语

更多推荐文章

查看全部
  • Stable Diffusion 模型管理指南:Checkpoint、VAE 与 Lora 使用技巧
  • Python 库 adarsha-pdf 语法、参数及实际案例
  • Moon VR Video Player 评测:支持 8K/12K 多音轨与外挂字幕
  • ClawdBot 本地部署实战:vLLM 后端与设备授权全链路解析
  • 大模型时代程序员的正确姿势与应对策略
  • 医疗咨询机器人安全加固:Qwen3Guard-Gen-WEB 实践
  • 开源大模型选型指南:如何构建合适的技术底座
  • 通义灵码 AI 程序员实操指南:从 IDE 安装到全栈开发落地
  • 数据结构:堆、哈希表与字符串哈希详解
  • 如何在手机上运行 Python 代码及执行程序
  • 通义万相 2.1 结合智算平台:AIGC 创作实践指南
  • OpenClaw + Kimi K2.5 本地私有化部署与办公自动化实战
  • uv 虚拟环境管理:创建、激活与 Python 版本指定
  • Java 入门实战:从环境配置到 Hello World
  • GitHub AI Agent 自动化挖掘热门项目与深度分析
  • 爬虫与大模型结合实践:从基础提取到框架应用
  • 国内大型语言模型研发进展与突破性应用
  • 基于 Trae Agent 与 MCP Tools 实现 Gitee 自动化辅助
  • Go Channel 深入解析:从语义到 Runtime 底层
  • 从零写 Agent 框架:Workflow 与 Runtime 模块设计

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online