上位机知识篇---Docker

Docker 详细介绍

一、Docker 是什么

Docker 是一个开源的容器化平台 ,它允许开发者将应用程序及其依赖项 打包到一个标准化的单元(称为容器) 中,确保应用在任何环境中都能以相同的方式运行

简单来说,Docker 解决了 "在我的机器上能运行,在你的机器上却不能运行" 的问题。它通过容器化技术,将应用与底层基础设施隔离开来,实现了 "一次构建,到处运行" 的目标。

二、常见使用场景

1. 应用开发与测试

  • 开发者可以在本地创建一致的开发环境,避免因环境差异导致的问题
  • 测试人员可以快速部署相同的测试环境,确保测试结果的准确性
  • 前后端开发者可以在各自的容器中工作,互不干扰

2. 持续集成 / 持续部署 (CI/CD)

  • 在 CI 流程中,使用 Docker 构建应用并运行自动化测试
  • 在 CD 流程中,通过 Docker 容器实现应用的快速、一致部署
  • 支持蓝绿部署、金丝雀发布等高级部署策略

3. 微服务架构部署

  • 每个微服务可以打包为独立的 Docker 容器
  • 便于单独扩展、更新和管理各个服务
  • 简化微服务之间的通信和依赖管理

4. 云原生应用开发

  • 与 Kubernetes 等容器编排平台紧密集成
  • 适合开发弹性伸缩、高可用的云原生应用
  • 支持服务网格、配置管理等云原生技术

5. 大数据与 AI 应用部署

  • 快速搭建分布式计算环境
  • 简化机器学习模型的训练和部署流程
  • 便于在不同环境间迁移数据处理工作流

6. 隔离性环境需求

  • 为不同应用创建隔离的运行环境
  • 安全测试和恶意软件分析
  • 临时环境搭建和资源隔离

三、使用优势与劣势

优势

  1. 环境一致性:容器包含应用所需的所有依赖,确保在任何环境中行为一致
  2. 轻量级:容器共享主机操作系统内核,比虚拟机更节省资源
  3. 快速启动:容器启动通常只需几秒,远快于虚拟机
  4. 可移植性:可以在任何支持 Docker 的环境中运行,包括物理机、虚拟机、云服务等
  5. 资源高效利用:能够更有效地利用系统资源,提高服务器利用率
  6. 版本控制:支持容器镜像的版本管理,便于回滚和追踪
  7. 易于扩展:可以快速复制容器实现水平扩展
  8. 隔离性:提供一定程度的应用隔离,增强安全性

劣势

  1. 安全性限制:容器共享主机内核,隔离性不如虚拟机彻底
  2. 学习曲线:需要学习 Docker 特定概念和命令
  3. 存储管理复杂:容器的临时存储特性可能导致数据管理复杂
  4. 网络配置复杂:容器间网络配置相对复杂,特别是在大规模部署时
  5. Windows 支持有限:虽然支持 Windows,但体验和功能不如 Linux 完善
  6. 状态管理挑战:无状态应用更适合容器化,有状态应用需要额外的状态管理策略

四、Docker 使用详细步骤

1. 安装 Docker

在 Ubuntu 上安装
bash 复制代码
# 更新 apt 包索引
sudo apt-get update

# 安装必要的依赖包
sudo apt-get install ca-certificates curl gnupg lsb-release

# 添加 Docker 官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 设置 Docker 稳定版仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 安装 Docker 引擎
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

# 验证安装是否成功
sudo docker run hello-world
在 CentOS 上安装
bash 复制代码
# 安装必要的依赖包
sudo yum install -y yum-utils

# 设置 Docker 仓库
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 安装 Docker 引擎
sudo yum install docker-ce docker-ce-cli containerd.io

# 启动 Docker
sudo systemctl start docker

# 设置 Docker 开机自启
sudo systemctl enable docker

# 验证安装是否成功
sudo docker run hello-world
在 Windows 或 Mac 上安装
  • 下载并安装 Docker Desktop
  • 安装完成后,启动 Docker Desktop 应用

2. 基本 Docker 命令

镜像操作
bash 复制代码
# 搜索镜像
docker search <镜像名称>

# 拉取镜像
docker pull <镜像名称>:<标签>  # 标签默认为latest

# 查看本地镜像
docker images

# 删除镜像
docker rmi <镜像ID或名称>

# 构建镜像
docker build -t <镜像名称>:<标签> <Dockerfile路径>
容器操作
bash 复制代码
# 运行容器
docker run [选项] <镜像名称> [命令]

# 常用选项:
# -d: 后台运行
# -p: 端口映射,格式为 主机端口:容器端口
# -v: 挂载卷,格式为主机路径:容器路径
# -e: 设置环境变量
# --name: 指定容器名称
# -it: 交互式运行

# 示例: 运行一个nginx容器
docker run -d -p 80:80 --name mynginx nginx

# 查看运行中的容器
docker ps

# 查看所有容器(包括停止的)
docker ps -a

# 启动容器
docker start <容器ID或名称>

# 停止容器
docker stop <容器ID或名称>

# 重启容器
docker restart <容器ID或名称>

# 删除容器
docker rm <容器ID或名称>

# 进入容器
docker exec -it <容器ID或名称> /bin/bash

# 查看容器日志
docker logs <容器ID或名称>

# 查看容器详细信息
docker inspect <容器ID或名称>

3. 创建自定义 Docker 镜像

  1. 创建 Dockerfile

    在项目根目录创建一个名为 Dockerfile 的文件,例如:

    复制代码
    # 使用官方Python镜像作为基础镜像
    FROM python:3.9-slim
    
    # 设置工作目录
    WORKDIR /app
    
    # 复制当前目录下的所有文件到容器的/app目录
    COPY . .
    
    # 安装依赖
    RUN pip install --no-cache-dir -r requirements.txt
    
    # 暴露端口
    EXPOSE 5000
    
    # 容器启动时执行的命令
    CMD ["python", "app.py"]
  2. 构建镜像

    bash 复制代码
    docker build -t my-python-app:1.0 .
  3. 运行自定义镜像

    bash 复制代码
    docker run -d -p 5000:5000 --name myapp my-python-app:1.0

4. Docker Compose 管理多容器应用

当应用需要多个容器协同工作时(如前端、后端、数据库),可以使用 Docker Compose 简化管理。

  1. 安装 Docker Compose

    对于安装了 Docker Desktop 的用户,Compose 已经包含在内。Linux 用户需要单独安装:

    bash 复制代码
    sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    
    sudo chmod +x /usr/local/bin/docker-compose
  2. 创建 docker-compose.yml 文件

    XML 复制代码
    version: '3'
    
    services:
      web:
        build: .
        ports:
          - "5000:5000"
        depends_on:
          - db
      
      db:
        image: postgres:13
        environment:
          - POSTGRES_USER=postgres
          - POSTGRES_PASSWORD=postgres
          - POSTGRES_DB=mydb
        volumes:
          - postgres_data:/var/lib/postgresql/data
    
    volumes:
      postgres_data:
  3. 使用 Docker Compose 启动应用

    bash 复制代码
    # 启动所有服务
    docker-compose up -d
    
    # 查看服务状态
    docker-compose ps
    
    # 查看日志
    docker-compose logs
    
    # 停止服务
    docker-compose down
    
    # 停止服务并删除数据卷
    docker-compose down -v

5. 数据持久化

Docker 容器默认是临时的,为了持久化数据,需要使用数据卷:

bash 复制代码
# 创建数据卷
docker volume create mydata

# 查看数据卷
docker volume ls

# 查看数据卷详情
docker volume inspect mydata

# 使用数据卷运行容器
docker run -d -v mydata:/app/data --name myapp myimage

# 挂载主机目录到容器
docker run -d -v /host/path:/container/path --name myapp myimage

五、总结

Docker 作为容器化技术的代表,已经成为现代软件开发和部署的重要工具。它通过容器化解决了环境一致性问题,简化了应用的部署和扩展流程。

虽然 Docker 有一定的学习曲线和局限性,但其优势在大多数场景下远大于劣势,特别是在微服务、云原生和 DevOps 实践中表现突出。

掌握 Docker 的基本使用是现代开发者的重要技能,通过本文介绍的步骤,你可以开始使用 Docker 并逐步深入探索其更多高级特性。