Skip to content

Docker

什么是 Docker

Docker 是一个开源的容器化平台,它允许开发者将应用程序及其依赖项打包到一个轻量级、可移植的容器中,然后在任何环境中运行。Docker 容器提供了隔离的运行环境,确保应用程序在不同环境中一致运行。

Docker 的特点

1. 轻量级

  • 容器共享宿主机的内核
  • 比虚拟机更轻量
  • 启动速度快

2. 可移植性

  • 容器可以在任何支持 Docker 的环境中运行
  • 消除了环境差异
  • 简化了部署流程

3. 隔离性

  • 容器之间相互隔离
  • 资源限制和隔离
  • 提高安全性

4. 可扩展性

  • 快速创建和销毁容器
  • 支持集群管理
  • 适合微服务架构

5. 版本控制

  • 镜像版本管理
  • 回滚能力
  • 一致性部署

Docker 的基本概念

1. 镜像(Image)

  • 容器的模板
  • 包含应用程序及其依赖项
  • 分层存储

2. 容器(Container)

  • 镜像的运行实例
  • 隔离的运行环境
  • 可读写的文件系统

3. 仓库(Repository)

  • 存储镜像的地方
  • 公共或私有
  • Docker Hub 是最大的公共仓库

4. Dockerfile

  • 定义如何构建镜像的文件
  • 包含一系列命令
  • 自动化构建过程

5. Docker Compose

  • 定义和运行多容器应用的工具
  • 使用 YAML 文件配置应用服务
  • 简化多容器管理

安装 Docker

Windows

  1. 访问 Docker 官网
  2. 下载 Docker Desktop
  3. 运行安装程序
  4. 按照向导完成安装

macOS

  1. 访问 Docker 官网
  2. 下载 Docker Desktop
  3. 运行安装程序
  4. 按照向导完成安装

Linux

bash
# Ubuntu/Debian
sudo apt update
sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io

# CentOS/RHEL
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker

Docker 基本操作

镜像操作

bash
# 拉取镜像
docker pull ubuntu:latest

# 查看本地镜像
docker images

# 删除镜像
docker rmi ubuntu:latest

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

容器操作

bash
# 运行容器
docker run -d --name mycontainer -p 8080:80 ubuntu:latest

# 查看运行中的容器
docker ps

# 查看所有容器
docker ps -a

# 停止容器
docker stop mycontainer

# 启动容器
docker start mycontainer

# 删除容器
docker rm mycontainer

# 进入容器
docker exec -it mycontainer bash

Dockerfile 示例

dockerfile
FROM node:16-alpine

WORKDIR /app

COPY package*.json ./
RUN npm install

COPY . .

EXPOSE 3000

CMD ["npm", "start"]

Docker Compose 示例

yaml
version: '3'
services:
  web:
    build: .
    ports:
      - "3000:3000"
    volumes:
      - .:/app
    depends_on:
      - db
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: myapp
    volumes:
      - db-data:/var/lib/mysql

volumes:
  db-data:

Docker 在 CI/CD 中的应用

1. 构建环境

  • 提供一致的构建环境
  • 隔离构建过程
  • 快速创建和销毁

2. 测试环境

  • 模拟生产环境
  • 隔离测试过程
  • 并行运行测试

3. 部署

  • 容器化应用
  • 简化部署流程
  • 确保环境一致性

4. 持续集成

  • 与 Jenkins、GitHub Actions 等集成
  • 自动化构建和测试
  • 快速反馈

Docker 最佳实践

1. 镜像优化

  • 使用 Alpine 基础镜像
  • 减少镜像层数
  • 清理不必要的文件

2. 安全

  • 使用官方镜像
  • 定期更新镜像
  • 扫描镜像漏洞

3. 性能

  • 合理使用缓存
  • 限制容器资源
  • 优化存储驱动

4. 管理

  • 使用 Docker Compose 管理多容器应用
  • 使用 Docker Swarm 或 Kubernetes 管理集群
  • 监控容器状态

Docker 常见问题

1. 权限问题

  • 使用 sudo 命令
  • 添加用户到 docker 组

2. 网络问题

  • 检查网络配置
  • 确保端口映射正确
  • 检查防火墙设置

3. 存储问题

  • 合理使用卷
  • 定期清理未使用的容器和镜像
  • 监控磁盘使用情况

4. 性能问题

  • 限制容器资源
  • 优化应用程序
  • 使用适当的存储驱动

学习资源

实践练习

  1. 安装和配置 Docker
  2. 创建一个 Dockerfile
  3. 构建和运行容器
  4. 使用 Docker Compose 管理多容器应用
  5. 集成 Docker 到 CI/CD 流水线

基于 VitePress 的本地知识库