Skip to content

Docker技术

基础概念

容器化技术

容器化是一种轻量级的虚拟化技术,它将应用程序及其依赖打包成一个独立的单元(容器),可以在任何支持Docker的环境中运行。与传统虚拟机相比,容器共享主机操作系统内核,启动更快,资源占用更少。

Docker架构

Docker采用客户端-服务器架构,包括Docker客户端、Docker守护进程、Docker镜像和Docker容器等组件。客户端通过命令行或API与守护进程通信,守护进程负责构建、运行和分发容器。

镜像与容器

Docker镜像是一个只读模板,包含创建Docker容器的指令;而容器是镜像的运行实例,可以被创建、启动、停止、删除和暂停。一个镜像可以创建多个容器,每个容器都是相互隔离的。

Docker命令

镜像管理

bash
# 拉取镜像
docker pull [镜像名]:[标签]

# 列出本地镜像
docker images

# 构建镜像
docker build -t [镜像名]:[标签] [Dockerfile路径]

# 删除镜像
docker rmi [镜像ID或名称]

容器操作

bash
# 创建并启动容器
docker run [选项] [镜像名] [命令]

# 列出运行中的容器
docker ps

# 列出所有容器
docker ps -a

# 启动/停止/重启容器
docker start/stop/restart [容器ID或名称]

# 删除容器
docker rm [容器ID或名称]

数据管理

bash
# 创建数据卷
docker volume create [卷名]

# 挂载数据卷
docker run -v [卷名]:[容器内路径] [镜像名]

# 挂载主机目录
docker run -v [主机路径]:[容器内路径] [镜像名]

Dockerfile

基本指令

Dockerfile是用于构建Docker镜像的文本文件,包含一系列指令和参数。常用指令包括:

  • FROM:指定基础镜像
  • WORKDIR:设置工作目录
  • COPY/ADD:复制文件到镜像中
  • RUN:执行命令
  • ENV:设置环境变量
  • EXPOSE:声明容器监听的端口
  • CMD/ENTRYPOINT:指定容器启动时执行的命令

最佳实践

  • 使用官方镜像作为基础
  • 合并RUN指令减少层数
  • 使用.dockerignore排除不需要的文件
  • 使用多阶段构建减小镜像大小
  • 不在镜像中存储敏感信息

Docker Compose

基本概念

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

常用命令

bash
# 启动服务
docker-compose up

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

# 停止服务
docker-compose down

# 查看服务状态
docker-compose ps

# 查看服务日志
docker-compose logs

配置文件

docker-compose.yml是Docker Compose的配置文件,用于定义服务、网络和卷。一个简单的示例:

yaml
version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: example
    volumes:
      - db_data:/var/lib/mysql
volumes:
  db_data:

容器编排

Kubernetes基础

Kubernetes是一个开源的容器编排平台,用于自动化容器的部署、扩展和管理。它提供了服务发现、负载均衡、存储编排、自动部署和回滚等功能。

Docker Swarm

Docker Swarm是Docker原生的集群管理和编排工具,它允许用户创建和管理Docker集群,实现容器的高可用和负载均衡。

服务网格

服务网格(Service Mesh)是一个专注于处理服务间通信的基础设施层,负责在现代云原生应用中实现可靠的服务请求传递。Istio是一个流行的服务网格实现。

实践应用

微服务架构

Docker容器非常适合微服务架构,每个服务可以打包成独立的容器,实现服务的隔离和独立部署。

CI/CD集成

Docker可以与Jenkins、GitLab CI等CI/CD工具集成,实现自动化构建、测试和部署流程。

开发环境标准化

Docker可以帮助团队标准化开发环境,解决"在我的机器上能运行"的问题,提高开发效率。