Docker 核心技术与实战

一、什么是 Docker?

1. 容器化技术基本概念

Docker 是一种容器化技术,能把代码 + 依赖 + 配置 + 环境打包成一个独立、可移植、可直接运行的包。简单理解:Docker = 把软件打包成 "绿色版",在哪都能跑,不挑系统、不报错。

2. Docker vs 传统虚拟机

特性 Docker 容器 虚拟机(VM)

体积 小(MB 级) 大(GB 级)

启动速度 秒级 分钟级

性能 接近原生 损耗大

隔离 进程级隔离 完全系统隔离

占用资源 极少 很高

一句话总结:虚拟机是 "整套电脑",Docker 是 "单个软件运行环境"。

3. Docker 三大核心组件

镜像(Image):只读的软件包(如系统、Python、MySQL)

容器(Container):镜像运行起来的实例(正在运行的软件)

仓库(Registry):存放镜像的地方(如 Docker Hub、阿里云)

二、Docker 的优势

1. 轻量 & 高性能

共享宿主机内核

不启动完整系统

资源占用极低

2. 跨平台一致运行

一次打包,到处运行开发、测试、生产环境完全一样,彻底解决:"在我电脑上能跑,你那不行" 的问题。

3. 快速启动 & 高效扩容

秒级启动

一键复制容器

非常适合微服务、高并发场景

4. 环境隔离

不同应用之间互不干扰:

Python2 和 Python3 共存

MySQL5.7 和 MySQL8.0 共存

不污染系统环境

三、Docker 核心概念(必须掌握)

1. 镜像(Image)

只读模板

分层存储(修改只增不减,节省空间)

可以继承、叠加、共享

例:python:3.11、mysql:8.0、nginx:alpine

2. 容器(Container)

镜像的运行实例

可启动、停止、删除

每个容器相互隔离

镜像 = 安装包,容器 = 运行中的软件

3. 仓库(Registry)

Docker Hub:公共仓库(默认)

阿里云 / 腾讯云:国内加速器

私有仓库:公司内部使用

4. Dockerfile

用来自动构建镜像的脚本

一行行命令告诉 Docker 如何打包

可重复、可版本管理、可团队共享

四、Docker 安装与配置

  1. 安装命令(Linux)

一键安装(官方推荐)

bash 复制代码
curl -fsSL https://get.docker.com | bash


启动服务

systemctl start docker
systemctl enable docker
  1. Windows / macOS
    直接下载 Docker Desktop 图形版,双击安装。
  2. 配置国内镜像加速器(必须配!)
    编辑 /etc/docker/daemon.json:
java 复制代码
{
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "https://hub-mirror.c.163.com"
  ]
}
  1. 验证安装成功
bash 复制代码
docker version
docker info
docker run hello-world

五、Docker 常用命令(最常用合集)

  1. 镜像命令
bash 复制代码
docker pull nginx        # 下载镜像
docker images           # 查看本地镜像
docker rmi nginx        # 删除镜像
docker build -t myapp . # 用Dockerfile构建镜像
  1. 容器命令
bash 复制代码
docker run -d -p 80:80 nginx  # 后台运行,端口映射
docker ps                     # 查看运行中容器
docker ps -a                  # 查看所有容器
docker stop 容器ID            # 停止
docker rm 容器ID              # 删除
  1. 进入容器 & 日志
bash 复制代码
docker exec -it 容器ID /bin/bash  # 进入容器内部
docker logs 容器ID                 # 查看日志

六、Dockerfile 详解(打包脚本)

  1. 基础指令(必会)
bash 复制代码
dockerfile
FROM python:3.11          # 基础镜像
WORKDIR /app              # 工作目录
COPY . .                  # 复制文件
RUN pip install -r req.txt# 安装依赖
CMD ["uvicorn", "main:app"]# 启动命令
  1. 多阶段构建(减小体积)
bash 复制代码
构建阶段

FROM python:3.11 AS builder
COPY . .
RUN pip install -r req.txt

运行阶段(更小)

FROM python:3.11-slim
COPY --from=builder /app .
CMD ["python", "main.py"]
  1. 最佳实践减少
    RUN 层数
    使用 .dockerignore 排除无用文件
    使用轻量镜像(alpine 版本)
    不存储密码、密钥在镜像里

七、Docker 网络与存储

  1. 网络模式
    bridge:默认,独立网络,端口映射(最常用)
    host:共享宿主机网络
    none:无网络
  2. 数据持久化(重要!)
    容器删除数据会丢失,必须挂载:
    数据卷 Volume:Docker 管理(推荐)
    绑定挂载 Bind Mount:挂载本地文件夹
    bash
    运行
    docker run -v 本地目录:/容器目录 ...
  3. 跨容器通信
    同一网络下可直接用容器名访问
    自动 DNS 解析
    八、Docker Compose 多容器编排(必会)
  4. 作用
    一键启动多个容器如:Python + MySQL + Redis + Nginx
  5. docker-compose.yml 示例
yaml 复制代码
version: '3'
services:
  web:
    build: .
    ports:
      - "8000:8000"
  redis:
    image: redis
  mysql:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: 123456
  1. 常用命令
bash 复制代码
docker-compose up -d      # 启动
docker-compose down       # 停止并删除
docker-compose logs       # 查看日志

八、Docker 在生产环境的应用

  1. 容器编排
    K8s (Kubernetes):企业级容器编排
    Docker Swarm:轻量级编排
  2. 监控 & 日志
    Prometheus + Grafana 监控
    ELK 日志收集
  3. 生产安全
    镜像扫描漏洞
    使用非 root 用户运行
    最小权限原则

九、常见问题与调试技巧

  1. 容器启动失败
bash 复制代码
docker logs 容器ID        # 看日志
docker exec 进入调试
  1. 镜像体积太大
    使用 alpine 基础镜像
    多阶段构建
    清理缓存
  2. 性能调优
    限制 CPU / 内存
    使用数据卷代替本地挂载

十、未来趋势与生态

  1. 云原生 & Serverless
    Docker 是云原生的基石,所有云平台都原生支持。
  2. CI/CD 持续集成
    自动化构建、测试、部署必备工具。
  3. 新兴工具
    Containerd:Docker 底层运行时
    Podman:无 daemon 容器工具
    Buildah:镜像构建工具

十一、整篇文章核心总结

Docker = 容器化打包工具

镜像 = 软件包,容器 = 运行实例

一次打包,到处运行

Docker Compose 管理多容器

企业部署、微服务、机器学习部署 必备

相关推荐
苏渡苇1 小时前
Seata 番外篇:使用 docker-compose 部署 Seata Server(TC)及 K8S 部署 Seata 高可用
spring boot·docker·微服务·容器·kubernetes·seata·springcloud
JP-Destiny1 小时前
docker报错-无法解析 registry-1.docker.io
运维·docker·容器
文青小兵1 小时前
Linux云计算——docker镜像(三)
linux·docker·云计算
wgc2k2 小时前
Nest.js基础-5:关于Docker的简单概述
docker·typescript·node.js
JP-Destiny2 小时前
docker-安装redis
java·redis·docker
文青小兵2 小时前
Linux云计算——docker 网络和部分挂载(二)
linux·docker·云计算
牟同學2 小时前
Hermes Agent Docker 离线部署完整指南
docker·容器·eureka·hermes
蜀道山老天师2 小时前
Docker安装配置全教程(含银河麒麟服务器部署+镜像加速)
运维·docker·容器
EMTime11 小时前
Docker运行OpenWRT
运维·docker·容器