Docker基本概念

Docker基本概念

概述

  • Docker 是一个开源的容器化平台,用于开发、发布和运行应用程序。它允许开发者将应用程序及其依赖项打包到一个轻量级、可移植的容器中,从而确保应用程序在不同环境中一致运行。

  • 主要特点

    • 轻量级:容器共享宿主机的操作系统内核,比虚拟机更轻量。
    • 可移植性:容器可以在任何支持 Docker 的环境中运行。
    • 一致性:开发、测试和生产环境一致,减少“在我机器上能运行”的问题。
    • 隔离性:容器之间相互隔离,确保应用程序的安全性和稳定性。
    • 高效性:快速启动和停止容器,资源利用率高。
  • 核心概念

    • 镜像(Image):一个只读模板,包含运行应用程序所需的代码、运行时、库、环境变量和配置文件。
    • 容器(Container):镜像的运行实例,可以被启动、停止、删除等。
    • 仓库(Repository):用于存储和分发镜像的地方,如 Docker Hub。
    • Dockerfile:一个文本文件,包含一系列指令,用于自动化构建镜像。
  • Docker 架构

    • Docker 客户端(Client):用户与 Docker 交互的接口,通过命令行或 API 发送命令。
    • Docker 守护进程(Daemon):负责构建、运行和管理容器。
    • Docker 镜像仓库(Registry):存储和分发 Docker 镜像的地方,如 Docker Hub。
  • Docker 和虚拟机的区别

    • Docker
      • 基于容器化技术,使用宿主机的操作系统内核。
      • 容器共享宿主机的内核,但每个容器有自己的文件系统、库和依赖项。
      • Docker 使用 Docker Engine 作为运行时环境,负责管理容器的生命周期。
    • 虚拟机
      • 基于硬件虚拟化技术(如 Hyper-V、VMware、KVM),每个虚拟机都运行一个完整的操作系统。
      • 虚拟机通过 Hypervisor(虚拟化层)与物理硬件交互,Hypervisor 负责管理虚拟机的资源分配和隔离。
      • 每个虚拟机都包含完整的操作系统内核、应用程序和依赖项。
    • 资源占用
      • Docker
        • 容器共享宿主机的内核,不需要额外的操作系统开销。
        • 资源占用更少,启动速度更快。
        • 适合运行多个轻量级应用。
      • 虚拟机
        • 每个虚拟机都需要运行一个完整的操作系统,占用更多的内存、存储和 CPU 资源。
        • 启动速度较慢,资源利用率较低。
        • 适合运行需要完全隔离的环境。

镜像(Image)

  • 定义:镜像是 Docker 容器的基础,是一个只读模板,包含运行应用程序所需的代码、运行时、库、环境变量和配置文件。
  • 特点
    • 只读:镜像一旦创建,就不能被修改。
    • 分层存储:镜像由多个只读层组成,每一层代表一个指令或操作。
    • 可共享:镜像可以通过 Docker Hub 或其他镜像仓库进行共享和分发。
  • 常用命令
    • docker pull <image>:从仓库拉取镜像。
    • docker build -t <image> .:根据 Dockerfile 构建镜像。
    • docker images:列出本地镜像。
    • docker rmi <image>:删除本地镜像。
  • Docker 镜像的存储位置
    • Docker 镜像是以分层文件系统的方式存储的
    • Windows 系统
      • 默认路径:C:\ProgramData\Docker\
      • 镜像存储在 C:\ProgramData\Docker\image\ 目录下。

容器(Container)

  • 定义:容器是镜像的运行实例,可以被启动、停止、删除等。容器包含了应用程序及其所有依赖项,运行在一个隔离的环境中。
  • 特点
    • 轻量级:容器共享宿主机的操作系统内核,比虚拟机更轻量。
    • 隔离性:容器之间相互隔离,确保应用程序的安全性和稳定性。
    • 可移植性:容器可以在任何支持 Docker 的环境中运行。
  • 常用命令
    • docker run <image>:运行容器。
    • docker ps:列出运行中的容器。
    • docker stop <container>:停止容器。
    • docker rm <container>:删除容器。
    • docker exec -it <container> /bin/bash:进入运行中的容器。
  • Docker 容器的运行位置
    • Docker 容器是基于镜像创建的运行实例,其文件系统和运行时数据也存储在特定位置。
    • Windows 系统
      • 默认路径:C:\ProgramData\Docker\containers\
      • 每个容器的文件系统和元数据存储在该目录下。
  • 仓库(Repository)
    • 定义:仓库是用于存储和分发 Docker 镜像的地方。仓库可以分为公共仓库和私有仓库,最著名的公共仓库是 Docker Hub。
    • 特点
      • 公共仓库:如 Docker Hub,用户可以自由上传和下载镜像。
      • 私有仓库:企业或个人可以搭建自己的私有仓库,用于内部使用。
    • 常用命令
      • docker login:登录到 Docker Hub。
      • docker push <image>:将镜像推送到仓库。
      • docker pull <image>:从仓库拉取镜像。

Dockerfile

  • 定义:Dockerfile 是一个文本文件,包含一系列指令,用于自动化构建 Docker 镜像。每条指令都会在镜像中创建一个新的层。

  • 常用指令

    • FROM:指定基础镜像。
    • RUN:执行命令并创建新的层。
    • COPY:复制文件或目录到容器中。
    • ADD:类似于 COPY,但支持自动解压和远程 URL。
    • CMD:指定容器启动时运行的命令。
    • ENTRYPOINT:配置容器启动时执行的命令。
    • ENV:设置环境变量。
    • EXPOSE:声明容器运行时监听的端口。
    • WORKDIR:设置工作目录。
  • # 使用官方 Python 镜像作为基础镜像
    FROM python:3.8-slim
    
    # 设置工作目录
    WORKDIR /app
    
    # 复制当前目录下的文件到工作目录
    COPY . /app
    
    # 安装依赖
    RUN pip install --no-cache-dir -r requirements.txt
    
    # 暴露端口
    EXPOSE 80
    
    # 设置环境变量
    ENV NAME World
    
    # 运行应用程序
    CMD ["python", "app.py"]
    

数据卷(Volume)

  • 定义:数据卷是用于持久化数据的机制,独立于容器的生命周期。数据卷可以在容器之间共享和重用。
  • 特点
    • 持久化:数据卷中的数据不会因为容器的删除而丢失。
    • 共享:多个容器可以共享同一个数据卷。
    • 高效:数据卷直接映射到宿主机的文件系统,性能较高。
  • 常用命令
    • docker volume create <volume>:创建数据卷。
    • docker volume ls:列出数据卷。
    • docker volume inspect <volume>:查看数据卷详细信息。

网络(Network)

  • 定义:Docker 网络用于容器之间的通信。Docker 提供了多种网络驱动,如桥接网络、主机网络、覆盖网络等。
  • 特点
    • 桥接网络(Bridge):默认网络驱动,容器通过虚拟网桥连接到宿主机网络。
    • 主机网络(Host):容器直接使用宿主机的网络栈。
    • 覆盖网络(Overlay):用于多主机环境下的容器通信。
  • 常用命令
    • docker network ls:列出网络。
    • docker network create <network>:创建网络。
    • docker network connect <network> <container>:将容器连接到网络。

Docker Compose

  • 定义:Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过一个 docker-compose.yml 文件,可以配置多个服务、网络和数据卷。

  • 常用命令

    • docker-compose up:启动服务。
    • docker-compose down:停止并删除服务。
    • docker-compose build:构建镜像。
    • docker-compose logs:查看日志。
  • 示例 docker-compose.yml 文件

    • version: '3'
      services:
        web:
          image: my-web-app
          ports:
            - "5000:5000"
          volumes:
            - .:/code
          depends_on:
            - redis
        redis:
          image: redis
      
posted @ 2025-03-26 18:32  QAQ001  阅读(52)  评论(0)    收藏  举报