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 资源。
- 启动速度较慢,资源利用率较低。
- 适合运行需要完全隔离的环境。
- Docker:
- Docker:
镜像(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
-

浙公网安备 33010602011771号