Docker入门到实践:从零开始掌握容器化技术

Docker入门到实践(一):Docker简介和安装

一、Docker是什么?

1.1 定义与核心概念

Docker是一个开源的容器化平台,通过将应用程序及其依赖(如代码、运行时、系统工具、库等)打包成独立的容器(Container),实现跨环境的快速部署和运行。其核心设计理念是”一次构建,到处运行”(Build Once, Run Anywhere),解决了传统开发中因环境差异导致的”在我机器上能运行”问题。

关键术语

  • 镜像(Image):容器的模板,包含运行应用所需的所有文件和配置(类似类定义)。
  • 容器(Container):镜像的实例,是独立运行的进程(类似对象实例)。
  • Dockerfile:定义镜像构建步骤的文本文件,包含基础镜像、依赖安装、环境变量等指令。
  • Docker Hub:官方镜像仓库,提供海量预构建镜像(如Nginx、MySQL)。

1.2 为什么需要Docker?

传统部署的痛点

  • 环境不一致:开发、测试、生产环境的系统版本、库依赖差异导致应用崩溃。
  • 资源浪费:虚拟机(VM)需完整操作系统,占用大量资源(CPU、内存)。
  • 部署效率低:手动配置环境耗时且易出错,难以快速扩展。

Docker的优势

  • 轻量级:容器共享主机内核,无需独立OS,资源占用仅为VM的1/10。
  • 隔离性:每个容器拥有独立文件系统、网络和进程空间,避免冲突。
  • 可移植性:同一镜像可在开发、测试、生产环境无缝运行。
  • 快速启动:容器启动时间以秒计,远快于虚拟机分钟级的启动。

1.3 典型应用场景

  • 微服务架构:将大型应用拆分为多个独立容器,便于扩展和维护。
  • 持续集成/持续部署(CI/CD):通过镜像自动化构建和测试环境。
  • 多版本共存:同一主机运行不同版本的软件(如MySQL 5.7和8.0)。
  • 云原生开发:与Kubernetes等编排工具结合,实现弹性伸缩。

二、Docker的工作原理

2.1 架构组成

Docker采用客户端-服务器(C/S)架构:

  • Docker Daemon:后台服务,负责容器创建、运行和管理。
  • Docker Client:命令行工具(docker命令),用户通过其与Daemon交互。
  • Docker Registry:镜像仓库(如Docker Hub),存储和分发镜像。

2.2 核心技术

  • 命名空间(Namespaces):隔离进程、网络、文件系统等资源。
  • 控制组(Cgroups):限制容器资源使用(CPU、内存)。
  • 联合文件系统(UnionFS):分层存储镜像,实现高效构建和更新。

示例:构建一个简单的Node.js应用镜像

  1. # 使用官方Node.js镜像作为基础
  2. FROM node:14
  3. # 创建工作目录
  4. WORKDIR /usr/src/app
  5. # 复制依赖文件并安装
  6. COPY package*.json ./
  7. RUN npm install
  8. # 复制应用代码
  9. COPY . .
  10. # 暴露端口
  11. EXPOSE 3000
  12. # 启动命令
  13. CMD ["node", "server.js"]

通过docker build -t my-node-app .命令构建镜像,docker run -p 3000:3000 my-node-app运行容器。

三、Docker安装指南

3.1 安装前准备

  • 系统要求
    • Linux:内核版本≥3.10(推荐Ubuntu 20.04/CentOS 7+)。
    • Windows:Windows 10/11 Pro及以上版本(需启用WSL2或Hyper-V)。
    • macOS:macOS 12(Monterey)及以上版本。
  • 推荐配置:至少4GB内存、双核CPU。

3.2 分系统安装步骤

3.2.1 Linux(Ubuntu示例)

  1. 卸载旧版本
    1. sudo apt-get remove docker docker-engine docker.io containerd runc
  2. 安装依赖
    1. sudo apt-get update
    2. sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
  3. 添加Docker官方GPG密钥
    1. curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  4. 添加稳定版仓库
    1. sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
  5. 安装Docker Engine
    1. sudo apt-get update
    2. sudo apt-get install docker-ce docker-ce-cli containerd.io
  6. 验证安装
    1. sudo docker run hello-world

    输出Hello from Docker!表示成功。

3.2.2 Windows

  1. 启用WSL2
    • 打开PowerShell(管理员)运行:
      1. wsl --set-default-version 2
  2. 安装Docker Desktop
    • 从官网下载Windows版。
    • 双击安装包,按向导完成安装。
  3. 配置资源限制
    • 启动Docker Desktop,进入Settings > Resources,分配至少4GB内存和2核CPU。

3.2.3 macOS

  1. 安装Docker Desktop
    • 从官网下载macOS版。
    • 拖拽安装包到Applications文件夹。
  2. 配置Kubernetes(可选)
    • 进入Preferences > Kubernetes,勾选Enable Kubernetes

3.3 安装后验证

  • 查看版本
    1. docker version

    应显示Client和Server版本信息。

  • 运行测试容器
    1. docker run --rm alpine echo "Hello Docker"

    输出Hello Docker表示容器运行正常。

3.4 常见问题解决

  • 权限问题(Linux):
    • 将用户加入docker组:
      1. sudo usermod -aG docker $USER
    • 重启终端或执行newgrp docker
  • 端口冲突
    • 运行容器时指定不同端口:
      1. docker run -p 8080:80 nginx
  • 镜像拉取慢
    • 配置国内镜像源(如阿里云):
      1. {
      2. "registry-mirrors": ["https://<your-id>.mirror.aliyuncs.com"]
      3. }
    • 修改后重启Docker服务。

四、总结与下一步建议

4.1 核心收获

  • 理解Docker的容器化理念及其与传统虚拟化的区别。
  • 掌握Docker的核心组件(镜像、容器、Dockerfile)。
  • 完成跨平台(Linux/Windows/macOS)的Docker安装与验证。

4.2 实践建议

  1. 从简单应用开始:尝试将现有项目容器化,编写Dockerfile。
  2. 学习常用命令
    • docker ps:查看运行中的容器。
    • docker images:列出本地镜像。
    • docker-compose:管理多容器应用(后续章节详解)。
  3. 探索生态工具
    • Portainer:可视化Docker管理界面。
    • Watchtower:自动更新容器镜像。

4.3 后续学习路径

  • 第二篇:Docker基础命令与镜像管理。
  • 第三篇:Docker Compose多容器编排。
  • 第四篇:Docker与Kubernetes的集成实践。

通过本文,您已具备Docker的基础知识与实践能力。接下来,建议通过实际项目巩固所学,逐步掌握容器化开发的全流程。