跳转到内容

Docker 简介与完全安装指南:从入门到实践

在当今的软件开发领域,Docker 已经成为不可或缺的技术栈。它不仅改变了软件的打包、分发和部署方式,更推动了 DevOps 文化的普及和微服务架构的落地。无论您是开发者、测试工程师还是运维人员,掌握 Docker 都将显著提升您的工作效率。

本文将为您提供 Docker 技术的全面介绍,包括核心概念解析、实际应用场景、多平台安装指南以及配置优化建议,帮助您快速入门并建立扎实的 Docker 基础。

Docker 技术简介

什么是 Docker?

Docker 是一个开源的应用容器引擎,基于 Go 语言开发并遵从 Apache 2.0 协议开源。它允许开发者将应用及其所有依赖打包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 或 Windows 机器上,也可以实现虚拟化。

Docker 如日中天,这不是单纯的炒的概念,Docker 的确解决了开发和运维的痛点,比如版本的搬迁,从测试环境搬迁到预发、生产环境,在企业开发与测试中,得到了非常广泛的应用。

Docker 的核心特性

  • 开放源码:Docker 是一个开放源码的软件项目,基于 GO 语言,拥有活跃的社区支持
  • 轻量级容器:Docker 可以让开发打包他们的应用以及依赖包到一个轻量级、可移植的容器中
  • 跨平台部署:Docker 打包好容器,可以发布到任何流行的 Linux 机器上,也可以实现虚拟化
  • 完全隔离:容器是完全使用沙箱机制,互相之间不会有任何接口,确保安全性
  • 性能优异:Docker 容器性能开销极低,这个才是关键(通常只有 1-5% 的性能损耗)
  • C/S 架构:Docker 使用客户端-服务器(C/S)架构模式,使用远程 API 来管理和创建 Docker 容器

Docker 的设计理念

Docker 借鉴了标准的集装箱的概念。标准的集装箱将货物运往世界各地,Docker 将这个模型运行到自己的设计中。唯一不同的是:集装箱是运输货物,Docker 是运输软件

这种标准化的"软件集装箱"带来了革命性的变化:

  • 标准化:统一的容器格式,一次构建,到处运行
  • 隔离性:每个容器都有独立的文件系统、网络和资源
  • 可移植性:无需关心底层基础设施差异
  • 版本控制:镜像支持分层存储和版本管理

Docker vs 传统虚拟机

理解 Docker 与传统虚拟机(VM)的区别,有助于更好地选择合适的技术方案。

核心对比

特性Docker 容器传统虚拟机 (VM)
启动速度几秒甚至毫秒级几十秒到几分钟
资源占用几 MB 到几百 MB几 GB
性能损耗1-5%10-30%
隔离级别进程级隔离系统级隔离
密度单机可运行数百个容器单机通常几十个 VM
操作系统共享宿主机内核每个 VM 独立 OS
适用场景微服务、持续集成多租户、强隔离需求

架构图解

传统虚拟机架构:

┌─────────────────────────────────┐
│         应用程序 A/B/C           │
├─────────────────────────────────┤
│      Guest OS (完整操作系统)     │
├─────────────────────────────────┤
│         Hypervisor (虚拟化层)    │
├─────────────────────────────────┤
│         Host OS (宿主操作系统)   │
├─────────────────────────────────┤
│           硬件基础设施           │
└─────────────────────────────────┘

Docker 容器架构:

┌─────────────────────────────────┐
│      容器 A  |  容器 B  | 容器 C  │
├─────────────────────────────────┤
│      Docker Engine (容器引擎)    │
├─────────────────────────────────┤
│         Host OS (宿主操作系统)   │
├─────────────────────────────────┤
│           硬件基础设施           │
└─────────────────────────────────┘

关键区别:

  • VM 需要完整的 Guest OS,而容器共享宿主机内核
  • Hypervisor 层较重,Docker Engine 更轻量
  • 容器启动无需引导操作系统,因此速度极快

Docker 的应用场景

Docker 在现代软件开发和运维中有着广泛的应用:

1. 开发环境一致性

问题: "在我机器上是好的!"——这是开发团队最常见的抱怨。

解决方案

  • 使用 Docker 定义开发环境(Dockerfile)
  • 所有开发者使用相同的容器环境
  • 消除"环境差异"导致的问题

2. Web 应用自动化打包和发布

  • 将 Web 应用及其依赖(Nginx、Node.js、Python 等)打包成镜像
  • 一键部署到测试、预发、生产环境
  • 支持蓝绿部署、滚动更新等高级发布策略

3. 自动化测试和持续集成/持续部署(CI/CD)

  • 在干净的容器环境中运行测试,避免污染
  • Jenkins、GitLab CI 等工具原生支持 Docker
  • 并行执行多个测试任务,提升效率

4. 微服务架构

  • 每个微服务运行在独立容器中
  • 服务间通过网络通信,天然解耦
  • 易于水平扩展和负载均衡

5. 数据库和后台应用部署

  • 快速部署 MySQL、PostgreSQL、Redis 等常见服务
  • 通过卷(Volume)持久化数据
  • 轻松实现主从复制、集群等高可用架构

6. 环境隔离与多租户

  • 在同一台机器上运行多个互不干扰的应用
  • 为不同客户/项目提供隔离的运行环境
  • 资源限制防止某个应用占用过多资源

7. 快速原型开发和实验

  • 快速搭建临时环境进行测试
  • 尝试新技术无需担心污染系统
  • 用完即删,不留痕迹

Docker 的核心组件

Docker 生态系统由三个核心概念组成:镜像(Image)容器(Container)仓库(Registry)

核心概念详解

组件说明类比
Docker 镜像Docker 镜像是用于创建 Docker 容器的模板。镜像是基于联合文件系统的一种层式结构,由一系列指令一步一步构建出来。类的定义 / 光盘镜像
Docker 容器容器是镜像的运行实例,是独立运行的一个或多个应用。镜像相当于类,容器相当于类的实例。类的实例 / 运行中的程序
Docker 仓库Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hub 提供了庞大的镜像集合供使用,用户也可以将自己本地的镜像推送到 Docker 仓库供其他人下载。Git 仓库 / 应用商店

其他重要组件

组件说明
Docker 客户端Docker 客户端通过命令行或者其他工具使用 Docker API 与 Docker 的守护进程通信。用户通过客户端发送指令。
Docker 主机(Host)一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。可以是 Linux 服务器、macOS 或 Windows 机器。
Docker 守护进程(Docker Daemon)是 Docker 服务器端进程(dockerd),负责支撑 Docker 容器的运行以及镜像的管理。监听 Docker API 请求。
Dockerfile一个文本文件,包含构建镜像的所有指令。定义了镜像的构建步骤。
Docker Compose用于定义和运行多容器 Docker 应用的工具。通过 YAML 文件配置应用服务。
Docker Volume数据卷,用于持久化容器数据和在容器间共享数据。
Docker Network网络驱动,管理容器间的通信以及容器与外部的网络连接。

工作流程

1. 编写 Dockerfile

2. 构建镜像 (docker build)

3. 推送镜像到仓库 (docker push) [可选]

4. 从仓库拉取镜像 (docker pull) [可选]

5. 运行容器 (docker run)

6. 管理容器生命周期 (start/stop/restart)

Docker 安装完全指南

Docker 支持多种操作系统,下面将详细介绍各平台的安装方法。

前置要求

在安装 Docker 之前,请确保您的系统满足以下要求:

Linux 系统:

  • 64 位 CPU 架构(x86_64、amd64、armhf、arm64 等)
  • Linux 内核版本 3.10 或更高版本
  • 至少 1GB 可用内存(推荐 2GB+)
  • 足够的磁盘空间(取决于您要运行的容器)

macOS 系统:

  • macOS 10.15 (Catalina) 或更高版本
  • 至少 4GB RAM

Windows 系统:

  • Windows 10 64 位:专业版、企业版或教育版(Build 15063 或更高)
  • Windows 11
  • 启用 Hyper-V 和容器功能

方法一:Linux 系统安装(推荐)

Ubuntu / Debian 系统

步骤 1:卸载旧版本(如果存在)
bash
sudo apt-get remove docker docker-engine docker.io containerd runc
步骤 2:更新软件包索引
bash
sudo apt-get update
步骤 3:安装必要的依赖
bash
sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
步骤 4:添加 Docker 官方 GPG 密钥
bash
# 创建目录
sudo mkdir -p /etc/apt/keyrings

# 下载 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# 设置权限
sudo chmod a+r /etc/apt/keyrings/docker.gpg
步骤 5:设置稳定版仓库
bash
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

注意:如果您使用的是 Debian,将 ubuntu 替换为 debian

步骤 6:安装 Docker Engine
bash
# 更新软件包索引
sudo apt-get update

# 安装最新版本的 Docker Engine、containerd 和 Docker Compose
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
步骤 7:验证安装
bash
# 检查 Docker 版本
docker --version

# 运行测试容器
sudo docker run hello-world

如果看到 "Hello from Docker!" 的消息,说明安装成功!

CentOS / RHEL / Fedora 系统

步骤 1:卸载旧版本
bash
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
步骤 2:安装必要的依赖
bash
sudo yum install -y yum-utils
步骤 3:添加 Docker 仓库
bash
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
步骤 4:安装 Docker Engine
bash
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
步骤 5:启动 Docker
bash
sudo systemctl start docker
sudo systemctl enable docker
步骤 6:验证安装
bash
sudo docker run hello-world

一键安装脚本(适用于大多数 Linux 发行版)

Docker 官方提供了一个便捷的安装脚本,适合快速部署:

bash
# 下载并执行安装脚本
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

安全提示:在生产环境中,建议审查脚本内容后再执行:

bash
cat get-docker.sh  # 查看脚本内容

方法二:macOS 系统安装

macOS 用户使用 Docker Desktop for Mac,它提供了图形界面和完整的 Docker 功能。

步骤 1:下载安装包

访问 Docker Desktop for Mac 下载页面

根据您的芯片类型选择:

  • Intel 芯片:下载 Docker Desktop for Mac (Intel)
  • Apple Silicon (M1/M2/M3):下载 Docker Desktop for Mac (Apple Silicon)

步骤 2:安装 Docker Desktop

  1. 双击下载的 .dmg 文件
  2. 将 Docker 图标拖拽到 Applications 文件夹
  3. 打开 Applications 文件夹,双击 Docker.app
  4. 按照提示完成安装

步骤 3:启动并验证

  1. 在 Launchpad 中找到 Docker 并启动
  2. 首次启动会要求授权,点击 OK
  3. 等待 Docker 启动完成(菜单栏会出现 Docker 图标)
  4. 打开终端,运行:
bash
docker --version
docker run hello-world

使用 Homebrew 安装(可选)

如果您已安装 Homebrew,可以使用以下命令:

bash
# 安装 Docker Desktop
brew install --cask docker

# 启动 Docker Desktop
open /Applications/Docker.app

方法三:Windows 系统安装

Windows 10/11 用户使用 Docker Desktop for Windows

前置要求

启用 WSL 2(Windows Subsystem for Linux):

  1. 以管理员身份打开 PowerShell
  2. 运行以下命令:
powershell
# 启用 WSL
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

# 启用虚拟机平台
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

# 重启计算机
Restart-Computer
  1. 下载并安装 WSL 2 Linux 内核更新包: WSL2 Linux kernel update package

  2. 设置 WSL 2 为默认版本:

powershell
wsl --set-default-version 2

步骤 1:下载 Docker Desktop

访问 Docker Desktop for Windows 下载页面

步骤 2:安装

  1. 双击下载的 .exe 安装文件
  2. 确保勾选 "Use WSL 2 instead of Hyper-V"(推荐)
  3. 按照安装向导完成安装
  4. 重启计算机

步骤 3:启动并验证

  1. 从开始菜单启动 Docker Desktop
  2. 接受服务条款
  3. 等待 Docker 启动(系统托盘会出现 Docker 图标)
  4. 打开 PowerShell 或 CMD,运行:
powershell
docker --version
docker run hello-world

方法四:其他安装方式

使用 Snap 安装(Ubuntu)

bash
sudo snap install docker

使用 Fish 包管理器安装

bash
# Arch Linux
sudo pacman -S docker

# 启动服务
sudo systemctl start docker
sudo systemctl enable docker

Docker 配置与优化

安装完成后,进行适当的配置可以提升使用体验。

1. 配置非 root 用户使用 Docker

默认情况下,Docker 需要 root 权限。为了方便使用,可以将当前用户添加到 docker 用户组:

bash
# 创建 docker 用户组(如果不存在)
sudo groupadd docker

# 将当前用户添加到 docker 组
sudo usermod -aG docker $USER

# 激活组更改(或重新登录)
newgrp docker

# 验证(不需要 sudo)
docker run hello-world

安全提示:加入 docker 组的用户具有与 root 等效的权限,请谨慎操作。

2. 配置国内镜像加速器

由于 Docker Hub 在国外,国内访问速度较慢。建议配置镜像加速器:

创建或编辑配置文件

bash
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://huecker.io",
    "https://dockerhub.timeweb.cloud",
    "https://noohub.ru"
  ]
}
EOF

重启 Docker 服务

bash
sudo systemctl daemon-reload
sudo systemctl restart docker

验证配置

bash
docker info | grep -A 10 "Registry Mirrors"

3. 配置开机自启

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

# 查看状态
sudo systemctl status docker

4. 调整存储驱动(高级)

Docker 支持多种存储驱动,默认使用 overlay2。如需调整:

bash
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "storage-driver": "overlay2",
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}
EOF

sudo systemctl restart docker

Docker 基本命令速查

安装完成后,以下是一些常用的 Docker 命令:

镜像管理

bash
# 搜索镜像
docker search nginx

# 拉取镜像
docker pull nginx:latest

# 查看本地镜像
docker images

# 删除镜像
docker rmi <image_id>

# 构建镜像
docker build -t myapp:1.0 .

容器管理

bash
# 运行容器
docker run -d --name my-nginx -p 8080:80 nginx

# 查看运行中的容器
docker ps

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

# 停止容器
docker stop <container_id>

# 启动容器
docker start <container_id>

# 重启容器
docker restart <container_id>

# 删除容器
docker rm <container_id>

# 查看容器日志
docker logs <container_id>

# 进入容器内部
docker exec -it <container_id> /bin/bash

系统管理

bash
# 查看 Docker 信息
docker info

# 查看版本
docker version

# 清理未使用的资源
docker system prune

# 查看磁盘使用
docker system df

常见问题与故障排查

问题一:Docker 服务无法启动

现象:

bash
sudo systemctl start docker
# 报错:Failed to start docker.service

解决方案:

  1. 查看详细错误信息:

    bash
    sudo journalctl -u docker.service -n 50 --no-pager
  2. 检查配置文件语法:

    bash
    sudo dockerd --validate
  3. 重置 Docker(会删除所有容器和镜像):

    bash
    sudo systemctl stop docker
    sudo rm -rf /var/lib/docker
    sudo systemctl start docker

问题二:权限被拒绝

现象:

bash
docker run hello-world
# Got permission denied while trying to connect to the Docker daemon socket

解决方案:

  1. 使用 sudo:

    bash
    sudo docker run hello-world
  2. 或将用户加入 docker 组(见上文配置部分)

问题三:拉取镜像速度慢

现象:docker pull 非常慢或超时

解决方案:

  1. 配置国内镜像加速器(见上文配置部分)

  2. 手动指定镜像源:

    bash
    docker pull registry.docker-cn.com/library/nginx
  3. 检查网络连接:

    bash
    ping docker.io

问题四:端口冲突

现象:

Error starting userland proxy: Bind for 0.0.0.0:80 failed: port is already allocated

解决方案:

  1. 查找占用端口的进程:

    bash
    sudo lsof -i :80
  2. 停止占用端口的服务,或使用其他端口:

    bash
    docker run -p 8080:80 nginx

问题五:磁盘空间不足

现象:

No space left on device

解决方案:

  1. 清理未使用的资源:

    bash
    # 清理停止的容器、未使用的网络和悬空镜像
    docker system prune
    
    # 清理所有未使用的镜像
    docker image prune -a
    
    # 清理所有未使用的卷
    docker volume prune
  2. 查看磁盘使用情况:

    bash
    docker system df
  3. 移动 Docker 数据目录到大容量磁盘:

    bash
    # 编辑配置文件
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "data-root": "/path/to/large/disk/docker"
    }
    EOF
    
    # 迁移现有数据
    sudo systemctl stop docker
    sudo rsync -avz /var/lib/docker/ /path/to/large/disk/docker/
    sudo systemctl start docker

问题六:容器无法访问网络

现象: 容器内无法 ping 通外部地址

解决方案:

  1. 检查防火墙规则:

    bash
    sudo iptables -L -n
  2. 重启 Docker 网络:

    bash
    sudo systemctl restart docker
  3. 检查 DNS 配置:

    bash
    # 编辑配置文件
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "dns": ["8.8.8.8", "114.114.114.114"]
    }
    EOF
    
    sudo systemctl restart docker

Docker 安全最佳实践

1. 不要以 root 身份运行容器

dockerfile
# 在 Dockerfile 中创建非 root 用户
RUN groupadd -r appuser && useradd -r -g appuser appuser
USER appuser

2. 限制容器资源

bash
# 限制内存和 CPU
docker run -d --memory=512m --cpus=1.5 nginx

# 限制进程数
docker run -d --pids-limit=100 nginx

3. 只读文件系统

bash
# 以只读模式挂载文件系统
docker run -d --read-only nginx

# 需要写入时使用 tmpfs
docker run -d --read-only --tmpfs /tmp nginx

4. 定期更新

bash
# 更新 Docker Engine
sudo apt-get update
sudo apt-get upgrade docker-ce

# 更新镜像
docker pull nginx:latest

5. 扫描镜像漏洞

bash
# 安装 Trivy
sudo apt-get install trivy

# 扫描镜像
trivy image nginx:latest

学习资源推荐

官方文档

在线课程

  • Docker 官方认证课程(DCA)
  • Udemy: Docker Mastery
  • Coursera: Containerization with Docker

书籍推荐

  • 《Docker 技术入门与实战》
  • 《Docker Deep Dive》by Nigel Poulton
  • 《Using Docker》by Adrian Mouat

社区资源

总结

通过本文的详细教程,您已经掌握了:

Docker 核心概念:镜像、容器、仓库的关系和工作原理
技术优势:与传统虚拟机的对比及应用场景
多平台安装:Linux、macOS、Windows 的详细安装步骤
配置优化:用户权限、镜像加速、存储驱动等配置
常用命令:镜像和容器管理的基本操作
故障排查:6 类常见问题及解决方案
安全实践:容器安全的最佳实践

下一步学习建议

  1. 动手实践:尝试部署一个简单的 Web 应用(如 Nginx、WordPress)
  2. 学习 Dockerfile:编写自己的镜像构建文件
  3. 探索 Docker Compose:管理多容器应用
  4. 了解编排工具:学习 Kubernetes 或 Docker Swarm
  5. 实战项目:将现有项目容器化

Docker 是现代软件开发和运维的基石技术,掌握它将为您打开 DevOps、云计算、微服务等领域的大门。祝您学习愉快!

Docker 容器技术概念图

延伸阅读:如果您对 Docker 的其他主题感兴趣,可以查看我们的 Docker 容器管理Docker 镜像详解Docker 进程管理 以及 Docker 镜像源配置