Skip to content

核心概念

Docker 是一种用于开发、部署和运行应用程序的开源平台,它通过容器化技术实现应用程序的隔离和封装。以下是 Docker 的核心概念:

1. 容器(Container)

容器是 Docker 的核心组件,是一个轻量级、可移植的运行时环境,包含应用程序及其所有依赖(如库、配置文件等)。

  • 基于镜像运行。
  • 与宿主机和其他容器隔离。
  • 启动速度快,资源占用少。

示例:运行一个 Nginx 容器:

bash
docker run -d --name my-nginx nginx

2. 镜像(Image)

镜像是容器的静态模板,包含运行应用程序所需的所有文件和配置。

  • 分层存储,每一层代表一个修改(如安装软件、添加文件)。
  • 可以通过 Dockerfile 构建。
  • 存储在镜像仓库(如 Docker Hub)中。

示例:拉取一个 Ubuntu 镜像:

bash
docker pull ubuntu

3. Dockerfile

Dockerfile 是一个文本文件,包含一系列指令,用于自动化构建 Docker 镜像。

  • FROM:指定基础镜像。
  • RUN:执行命令。
  • COPY:复制文件到镜像。
  • CMD:设置容器启动时执行的命令。

示例:

dockerfile
FROM ubuntu:latest
RUN apt-get update && apt-get install -y nginx
COPY index.html /var/www/html/
CMD ["nginx", "-g", "daemon off;"]

4. 仓库(Repository)

仓库是用于存储和分发 Docker 镜像的地方,可以是公共的(如 Docker Hub)或私有的。

  • 一个仓库可以包含多个镜像版本(通过标签区分)。
  • 支持镜像的推送(docker push)和拉取(docker pull)。

5. 注册中心(Registry)

注册中心是存储 Docker 镜像的服务器,Docker Hub 是最常用的公共注册中心。

  • 支持私有注册中心(如 Harbor、AWS ECR)。
  • 提供镜像的版本管理和访问控制。

示例:登录 Docker Hub:

bash
docker login

6. 网络(Network)

Docker 网络用于实现容器之间的通信。

类型

  • Bridge:默认网络模式,容器通过虚拟网桥通信。
  • Host:容器直接使用宿主机的网络栈。
  • Overlay:用于跨主机的容器通信(如 Docker Swarm)。

示例:创建自定义网络:

bash
docker network create my-network

7. 数据卷(Volume)

数据卷是用于持久化容器数据的机制,独立于容器的生命周期。

  • 数据卷可以在容器之间共享。
  • 数据存储在宿主机上,即使容器删除,数据也不会丢失。

示例:创建并使用数据卷:

bash
docker volume create my-volume
docker run -d --name my-container -v my-volume:/data nginx

8. Docker Compose

Docker Compose 是用于定义和运行多容器 Docker 应用的工具。

  • 使用 docker-compose.yml 文件定义服务、网络和数据卷。
  • 支持一键启动、停止和管理多个容器。

示例:docker-compose.yml 文件

yaml
services:
  nginx:
    image: nginx:latest
    container_name: nginx
    ports:
      - "80:80"
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./html:/var/www/html
    depends_on:
      - php
    networks:
      - app-network

  php:
    build: ./php
    container_name: php83
    volumes:
      - ./html:/var/www/html
    networks:
      - app-network

  mysql:
    image: mysql:8.0
    container_name: mysql80
    environment:
      MYSQL_ROOT_PASSWORD: 123123
      MYSQL_DATABASE: dev
      MYSQL_USER: dev
      MYSQL_PASSWORD: 123123
    ports:
      - "3307:3306"  # 将容器的 3306 端口映射到宿主机的 3306 端口
    volumes:
      - ./mysql/data:/var/lib/mysql
    networks:
      - app-network

networks:
  app-network:
    driver: bridge

9. Docker Swarm

Docker Swarm 是 Docker 官方的集群管理工具,用于管理多个 Docker 主机。

  • 支持高可用和负载均衡。
  • 提供服务的自动扩展和故障恢复。

示例:初始化 Swarm 集群:

bash
docker swarm init

10. Docker Engine

Docker Engine 是 Docker 的核心组件,包括 Docker 守护进程(dockerd)和 CLI 客户端(docker)。

  • 负责构建、运行和管理容器。
  • 提供 REST API 供其他工具调用。