Docker 教程

容器化技术指南

1. Docker 基础概念

Docker 是一个开源的容器化平台,它使开发人员能够将应用程序与其依赖项一起打包到一个可移植的容器中,然后部署到任何环境中,确保应用程序在不同环境中一致运行。

1.1 什么是容器?

容器是一个标准的软件单元,它将代码及其所有依赖项打包在一起,保证应用程序能够在任何环境中快速、可靠地运行。Docker 容器基于 Docker 镜像运行,包含了运行应用程序所需的一切:代码、运行时环境、系统工具、系统库和设置。

1.2 Docker 核心组件

1.3 Docker 与虚拟机的区别

虽然 Docker 和虚拟机都提供了隔离环境,但它们的架构有很大不同:

2. 安装 Docker

2.1 Windows 安装

  1. 下载并安装 Docker Desktop for Windows
  2. 确保在 BIOS 中启用了硬件虚拟化
  3. Windows 10 Professional/Enterprise 版本需要启用 Hyper-V
  4. Windows 10 Home 版本使用 WSL 2 后端
  5. 安装完成后,启动 Docker Desktop

2.2 macOS 安装

  1. 下载并安装 Docker Desktop for Mac
  2. 将下载的 .dmg 文件拖到 Applications 文件夹
  3. 双击 Docker.app 启动 Docker

2.3 Linux 安装 (Ubuntu)

在 Ubuntu 上安装 Docker 的步骤:

# 更新包索引
sudo apt-get update

# 安装必要的依赖
sudo apt-get install 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
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

3. Docker 镜像与容器

3.1 Docker 镜像基础

Docker 镜像是一个只读模板,用于创建容器。镜像由多个层组成,每层都是镜像的一部分。当创建容器时,Docker 会在镜像的顶部添加一个可写层,容器中的所有更改都写入这个可写层。

3.2 常用镜像命令

# 列出本地镜像
docker images

# 搜索镜像
docker search ubuntu

# 拉取镜像
docker pull ubuntu:20.04

# 删除镜像
docker rmi ubuntu:20.04

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

3.3 容器操作

# 创建并启动容器
docker run -d -p 8080:80 --name mywebserver nginx

# 列出运行中的容器
docker ps

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

# 停止容器
docker stop mywebserver

# 启动已停止的容器
docker start mywebserver

# 在运行的容器中执行命令
docker exec -it mywebserver bash

常用参数说明

4. Dockerfile 编写

4.1 什么是 Dockerfile

Dockerfile 是一个文本文件,包含了构建 Docker 镜像所需的指令。通过 Dockerfile,您可以定义镜像的基础环境、安装软件、配置文件、启动命令等。

4.2 Dockerfile 常用指令

# 基于官方 Node.js 镜像
FROM node:14

# 设置工作目录
WORKDIR /app

# 复制 package.json 和 package-lock.json
COPY package*.json ./

# 安装依赖
RUN npm install

# 复制应用程序代码
COPY . .

# 设置环境变量
ENV NODE_ENV=production

# 暴露端口
EXPOSE 3000

# 定义容器启动命令
CMD ["npm", "start"]

4.3 常用指令详解

5. Docker Compose

5.1 什么是 Docker Compose

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YAML 文件来配置应用程序的服务,然后使用一个命令创建并启动所有服务。

5.2 docker-compose.yml 文件示例

version: '3'
services:
  web:
    build: ./web
    ports:
      - "8080:80"
    depends_on:
      - db
    environment:
      - DATABASE_URL=mysql://user:password@db:3306/webdb
  
  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=rootpassword
      - MYSQL_DATABASE=webdb
      - MYSQL_USER=user
      - MYSQL_PASSWORD=password

volumes:
  db_data:

5.3 常用命令

# 启动所有服务
docker-compose up

# 后台启动所有服务
docker-compose up -d

# 停止服务
docker-compose down

# 查看服务状态
docker-compose ps

6. Docker 网络

6.1 Docker 网络类型

6.2 网络命令

# 列出网络
docker network ls

# 创建网络
docker network create mynetwork

# 将容器连接到网络
docker network connect mynetwork mycontainer

7. Docker 卷与数据持久化

7.1 Docker 数据管理方式

7.2 卷操作

# 创建卷
docker volume create mydata

# 列出卷
docker volume ls

# 使用卷启动容器
docker run -d -v mydata:/var/lib/mysql --name mysql mysql:5.7

8. Docker 在开发环境中的应用

8.1 开发环境优势

8.2 开发环境 docker-compose.yml 示例

version: '3'
services:
  app:
    build: .
    ports:
      - "3000:3000"
    volumes:
      - .:/app
      - /app/node_modules
    environment:
      - NODE_ENV=development
    command: npm run dev
  
  db:
    image: postgres:13
    volumes:
      - pg_data:/var/lib/postgresql/data
    environment:
      - POSTGRES_PASSWORD=password
      - POSTGRES_USER=user
      - POSTGRES_DB=myapp_dev

volumes:
  pg_data:

9. Docker 常见问题与解决方案

9.1 容器启动失败

检查方法:

# 查看容器详细信息
docker inspect container_id

# 查看容器日志
docker logs container_id

9.2 清理 Docker 资源

# 删除所有停止的容器
docker container prune

# 删除所有未使用的镜像
docker image prune

# 一次性清理所有未使用的资源
docker system prune

10. Docker 安全最佳实践

10.1 镜像安全

10.2 容器安全

11. 生产环境中的 Docker

11.1 编排工具

11.2 CI/CD 与 Docker

Docker 在 CI/CD 流程中的应用:

  1. 构建阶段:构建并测试 Docker 镜像
  2. 测试阶段:在容器中运行测试
  3. 部署阶段:将验证过的镜像推送到镜像仓库
  4. 部署阶段:在目标环境中更新容器

12. 总结

Docker 为开发和部署应用程序提供了一种强大而灵活的方式,它通过容器化技术解决了"在我的机器上能运行"的问题,并提供了一致的环境。

主要优势包括:

进一步学习:建议进一步学习 Kubernetes、容器安全、CI/CD 等相关技术,以充分利用容器化带来的优势。

返回首页