Docker 基础

核心知识点

1. Docker 概述

Docker 是一个开源的容器化平台,可以将应用程序及其依赖项打包到一个轻量级、可移植的容器中,确保应用在任何环境中都能以相同的方式运行。

1.1 容器 vs 虚拟机

传统虚拟机和Docker容器的主要区别:

┌─────────────────────────────────────────────────────────┐
│                    虚拟机架构                          │
├─────────────────────────────────────────────────────────┤
│  应用程序 A    应用程序 B    应用程序 C                 │
├─────────────────────────────────────────────────────────┤
│  Guest OS    Guest OS    Guest OS                    │
├─────────────────────────────────────────────────────────┤
│              Hypervisor (虚拟化管理程序)                │
├─────────────────────────────────────────────────────────┤
│                    宿主操作系统                        │
├─────────────────────────────────────────────────────────┤
│                    硬件层                            │
└─────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────┐
│                   Docker 容器架构                        │
├─────────────────────────────────────────────────────────┤
│  应用程序 A    应用程序 B    应用程序 C                 │
├─────────────────────────────────────────────────────────┤
│                   Docker Engine                       │
├─────────────────────────────────────────────────────────┤
│                    宿主操作系统                        │
├─────────────────────────────────────────────────────────┤
│                    硬件层                            │
└─────────────────────────────────────────────────────────┘

1.2 Docker 核心概念

镜像

  • 只读模板,包含运行应用所需的所有内容
  • 可以理解为容器的"类"
  • 分层存储,便于复用和更新

容器

  • 镜像的运行实例
  • 可以理解为镜像的"对象"
  • 轻量级,启动快速

仓库

  • 存储和分发镜像的地方
  • Docker Hub 是最大的公共仓库
  • 支持私有仓库

2. Docker 安装

2.1 在 Ubuntu 上安装 Docker

# 更新包索引
sudo apt update

# 安装必要的依赖包
sudo apt install -y \
    apt-transport-https \
    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

# 设置稳定版仓库
echo \
  "deb [arch=amd64 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 Engine
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io

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

# 重新登录使组权限生效

2.2 在 CentOS 上安装 Docker

# 安装必要的依赖包
sudo yum install -y yum-utils

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

# 安装 Docker Engine
sudo yum install -y docker-ce docker-ce-cli containerd.io

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

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

3. Docker 基本命令

3.1 版本信息查看

# 查看 Docker 版本
docker --version

# 查看 Docker 详细信息
docker info

# 查看 Docker 系统信息
docker system info

3.2 镜像相关命令

# 搜索镜像
docker search nginx

# 拉取镜像
docker pull nginx:latest

# 查看本地镜像
docker images

# 删除镜像
docker rmi nginx:latest

3.3 容器相关命令

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

# 查看运行中的容器
docker ps

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

# 停止容器
docker stop my-nginx

# 启动已停止的容器
docker start my-nginx

# 删除容器
docker rm my-nginx

# 查看容器日志
docker logs my-nginx

# 进入容器
docker exec -it my-nginx /bin/bash

实用案例分析

案例 1:部署第一个 Web 应用

场景描述

快速部署一个 Nginx Web 服务器,用于测试 Docker 的基本功能。

操作步骤

# 1. 拉取 Nginx 镜像
docker pull nginx:alpine

# 2. 运行 Nginx 容器
# -d: 后台运行
# -p: 端口映射(宿主机端口:容器端口)
# --name: 容器名称
docker run -d -p 8080:80 --name my-web-server nginx:alpine

# 3. 查看容器状态
docker ps

# 4. 测试访问
curl http://localhost:8080

# 5. 查看容器日志
docker logs my-web-server

# 6. 进入容器查看文件
docker exec -it my-web-server /bin/sh
ls -la /usr/share/nginx/html/
exit

# 7. 停止并删除容器
docker stop my-web-server
docker rm my-web-server

案例 2:使用自定义 HTML 页面

场景描述

创建一个自定义的 HTML 页面,并通过 Docker 容器提供服务。

操作步骤

# 1. 创建项目目录
mkdir ~/my-docker-web
cd ~/my-docker-web

# 2. 创建自定义 HTML 文件
cat > index.html << 'EOF'
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>我的 Docker 网站</title>
</head>
<body>
    <h1>欢迎使用 Docker!</h1>
    <p>这是通过 Docker 容器运行的网站。</p>
</body>
</html>
EOF

# 3. 运行容器并挂载本地目录
# -v: 目录挂载(宿主机目录:容器目录)
docker run -d \
    -p 8080:80 \
    -v $(pwd):/usr/share/nginx/html \
    --name my-custom-web \
    nginx:alpine

# 4. 测试访问
curl http://localhost:8080

# 5. 修改 HTML 文件
echo "<p>页面已更新!</p>" >> index.html

# 6. 再次测试,无需重启容器
curl http://localhost:8080

# 7. 清理
docker stop my-custom-web
docker rm my-custom-web

案例 3:容器资源限制

场景描述

为容器设置 CPU 和内存使用限制,防止资源耗尽。

操作步骤

# 1. 运行容器并设置资源限制
# --cpus: 限制 CPU 使用量
# --memory: 限制内存使用量
docker run -d \
    --name limited-container \
    --cpus="0.5" \
    --memory="512m" \
    nginx:alpine

# 2. 查看容器资源使用情况
docker stats limited-container

# 3. 查看容器详细信息
docker inspect limited-container | grep -A 10 "Memory"

# 4. 清理
docker stop limited-container
docker rm limited-container

最佳实践

  1. 使用官方镜像:优先使用 Docker Hub 上的官方镜像,确保安全性和稳定性。

  2. 指定镜像版本:在生产环境中使用具体版本号而非 latest 标签,避免意外更新。

  3. 合理设置资源限制:为容器设置 CPU 和内存限制,防止单个容器耗尽系统资源。

  4. 使用数据卷:通过数据卷持久化重要数据,避免容器删除后数据丢失。

  5. 清理无用资源:定期清理未使用的镜像和容器,释放磁盘空间。

# 清理所有停止的容器
docker container prune

# 清理未使用的镜像
docker image prune -a

# 清理所有未使用的资源
docker system prune -a

总结

本教程介绍了 Docker 的基础概念、安装方法和基本命令。通过实际案例,我们学习了如何部署 Web 应用、使用自定义内容以及设置资源限制。掌握这些基础知识后,可以继续学习 Docker 的镜像管理、容器管理等高级功能。

« 上一篇 容器技术概述 下一篇 » Docker 镜像管理