Docker - 基本概念

博文目录


Docker 官方文档

docker入门,这一篇就够了。

虚拟化与容器

虚拟化和容器都是用于实现应用程序的隔离和资源管理的技术,但它们在实现方式和应用场景上存在一些区别。

虚拟化是一种在物理计算机上创建多个虚拟计算机的技术,每个虚拟计算机都可以运行自己的操作系统和应用程序,它们之间相互隔离,拥有自己的内存、CPU、网络和存储资源。虚拟化技术可以使用多种虚拟化软件,例如 VMware、VirtualBox、Hyper-V 等,可以在同一台物理计算机上运行多个虚拟计算机,实现资源共享和隔离。

容器是一种在操作系统层面上实现应用程序隔离和资源管理的技术,容器共享同一个操作系统内核,但每个容器都有自己的文件系统、进程空间、网络和存储资源。容器技术可以使用多种容器软件,例如 Docker、Kubernetes、LXC(Linux Container) 等,可以在同一台物理计算机上运行多个容器,实现资源共享和隔离。

虚拟化和容器的主要区别在于隔离级别和资源利用率。虚拟化技术提供了更高的隔离级别,每个虚拟计算机都拥有自己的操作系统和硬件资源,可以实现更强的隔离和安全性,但也会造成资源浪费和性能损失。而容器技术提供了更高的资源利用率,容器共享同一个操作系统内核和硬件资源,可以实现更高的资源利用率和性能,但隔离级别相对较低,容器之间的隔离和安全性可能不如虚拟化。

Docker

Docker 是一种开源的容器化平台,可以帮助开发者将应用程序及其依赖项打包成一个可移植的容器,从而实现快速、可靠和可重复的应用程序交付。

Docker 的主要特点包括:

  • 轻量级:Docker 利用了 Linux 内核提供的容器技术,可以在单个操作系统实例中运行多个容器,从而实现更高效的资源利用和更快的启动时间。
  • 可移植性:Docker 容器可以在任何支持 Docker 的操作系统中运行,从而实现跨平台的应用程序交付。
  • 隔离性:Docker 容器提供了隔离的运行环境,可以避免应用程序之间的冲突和干扰。
  • 可扩展性:Docker 容器可以方便地进行横向扩展,从而实现更高的性能和可用性。

Docker 的应用场景包括:

  • 开发环境搭建:Docker 可以帮助开发者快速搭建开发环境,从而提高开发效率和代码质量。
  • 应用程序交付:Docker 可以帮助开发者将应用程序及其依赖项打包成一个可移植的容器,从而实现快速、可靠和可重复的应用程序交付。
  • 应用程序部署:Docker 可以帮助运维人员快速部署和管理应用程序,从而实现更高效的运维。

总的来说,Docker 是一种简单、易用、高效的容器化平台,可以帮助开发者和运维人员快速构建、部署和管理应用程序。

LXC 是 Linux Container 的简写。Linux Container 是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。

LXC 主要通过 kernel 的 namespace 实现每个用户实例之间的进程、网络、消息、文件系统和主机名的隔离,通过 cgroup 实现对资源的配额和调度,cgroup 可以指定实例使用的CPU个数,内存大小等。

Docker 架构 (Docker architecture)

Docker使用客户端-服务器架构。Docker客户端与Docker守护进程进行对话,后者负责构建、运行和分发Docker容器。Docker客户端和守护进程可以在同一系统上运行,也可以将Docker客户端连接到远程Docker守护进程。Docker客户端和守护进程使用REST API通过UNIX套接字或网络接口进行通信。

在这里插入图片描述
Docker Host 指的是安装了 Docker 环境的主机

Docker 守护程序 (Docker daemon)

Docker daemon 是运行在主机上的 Docker 引擎,负责管理 Docker 容器、镜像、网络和存储等资源,提供 Docker API 供客户端和其他工具调用。Docker daemon 是 Docker 引擎的核心组件,是使用 Docker 技术的关键。

在 Docker 中,Docker daemon 运行在宿主机上,并监听 Docker API 请求。当用户或客户端发起请求时,Docker daemon 接收请求并执行相应的操作。例如,当用户运行一个 Docker 容器时,Docker daemon 会从 Docker hub 或本地镜像仓库中下载相应的镜像,然后创建并运行一个新的容器。

Docker daemon 通过 Docker API 与客户端进行通信,客户端可以是 Docker 命令行工具、Docker Compose、Docker Swarm 等。Docker daemon 还负责管理 Docker 网络和存储等资源,包括创建和配置容器网络、管理存储卷和挂载点等。

Docker daemon 的默认监听地址是 Unix 套接字 /var/run/docker.sock,也可以通过配置文件设置监听地址和端口号。Docker daemon 运行在后台,并可以以日志文件的形式输出运行情况和错误信息。

Docker 客户端 (Docker client)

Docker client 是 Docker 引擎的客户端工具,用于与 Docker daemon 交互,发送命令和请求 Docker 引擎执行操作。Docker client 提供了一个命令行界面和 API,使得用户可以方便地管理 Docker 容器、镜像、网络和存储等资源。

通过 Docker client,用户可以执行各种 Docker 命令,例如创建和运行容器、构建和推送镜像、管理网络和存储等。Docker client 还支持 Docker Compose 和 Docker Swarm 等工具,用于管理多个容器和集群。

Docker client 与 Docker daemon 之间的通信通过 Docker API 实现,Docker client 发送请求和命令到 Docker daemon,Docker daemon 执行相应的操作并返回结果给 Docker client。Docker client 可以运行在任何支持 Docker 的操作系统上,并可以通过配置文件指定要连接的 Docker daemon 地址和端口号。

Docker 仓库 (Docker registries)

Docker 镜像仓库是存储和管理 Docker 镜像的中心化存储库,类似于代码仓库,用于存储和分享 Docker 镜像。Docker 镜像仓库提供了一种标准化的方式来共享和分发 Docker 镜像,用户可以从镜像仓库中下载和使用 Docker 镜像,也可以将自己的 Docker 镜像上传到镜像仓库中进行分享和分发。

Docker 镜像仓库可以分为公共和私有两种类型。公共 Docker 镜像仓库包括 Docker Hub、Google Container Registry、Amazon Elastic Container Registry 等,用户可以从这些公共镜像仓库中下载和使用 Docker 镜像。私有 Docker 镜像仓库则是由组织或个人搭建的本地或云端仓库,用户可以将自己的 Docker 镜像上传到私有镜像仓库中,并在内部共享和分发镜像。

Docker 对象 (Docker object)

在 Docker 中,对象(Object)是 Docker 引擎中的核心概念之一,它代表了 Docker 中的各种实体,例如容器、镜像、网络、存储等。Docker 对象是由 Docker 引擎自动创建和管理的,每个对象都有自己的属性和状态,并可以通过 Docker API 和命令进行操作和管理。

docker inspect 对象(可以是镜像/容器/网络/卷等)

镜像 (Image)

Docker 镜像是 Docker 容器的只读模板,它包含了一个完整的文件系统和应用程序所需的所有依赖项,可以用于创建和运行 Docker 容器。Docker 镜像是 Docker 中的核心概念之一,它定义了一个容器的初始状态和行为,使得容器可以独立地运行和管理。

Docker 镜像是由多个层(Layer)组成的,每个层代表了一个文件系统的快照或一个构建步骤的结果。每个 Docker 镜像都有一个唯一的标识符,称为镜像 ID(Image ID),用于标识和检索镜像。

Docker 镜像可以从 Dockerfile 文件或现有的 Docker 镜像中构建,也可以从 Docker 镜像仓库中下载和使用。用户可以使用 Docker 命令行工具或 Docker API 来管理和操作 Docker 镜像,例如构建、推送、拉取、删除和运行等。

Docker 镜像还支持版本控制,可以通过标签(Tag)来标识不同的镜像版本,用户可以根据需要选择不同的镜像版本进行部署和测试。

容器 (Container)

Docker 容器是 Docker 平台上的轻量级、可移植和自包含的运行环境,用于运行应用程序和服务。每个 Docker 容器都是一个独立的运行时环境,包含了应用程序和其依赖项所需的所有组件和配置文件,可以在不同的计算机、操作系统和云平台上运行,同时保持一致的行为和性能。

Docker 容器是从 Docker 镜像创建而来,每个容器都有自己的文件系统、网络和进程空间,可以独立地运行和管理。容器可以使用 Docker CLI 或 Docker API 进行启动、停止、删除、暂停、恢复等操作,同时也可以使用 Docker Compose、Kubernetes 等编排工具进行管理和扩展。

Docker 容器的优点包括:

  • 轻量级和快速启动:Docker 容器采用了轻量级的虚拟化技术,可以在几秒钟内启动和停止,使得应用程序可以更快地部署和更新。
  • 可移植性和可重复性:Docker 容器可以在不同的计算机、操作系统和云平台上运行,同时保持一致的行为和性能,使得应用程序可以更容易地在不同的环境中进行部署和测试。
  • 安全性和隔离性:Docker 容器可以隔离应用程序和其依赖项,同时提供了各种安全机制,例如容器间的网络隔离、文件系统隔离、用户隔离等,可以有效地保护应用程序和主机的安全。

网络(Network)

Docker 网络是 Docker 平台中用于容器间通信的网络,它可以让不同的 Docker 容器之间相互通信,以及访问外部网络。Docker 网络提供了容器间通信和网络隔离的功能,可以帮助用户在容器化的应用程序中构建复杂的网络拓扑和服务架构。

在 Docker 网络中,每个容器都有自己的网络命名空间(Network Namespace),可以独立地管理自己的网络接口、IP 地址、路由表、网络策略等。Docker 网络可以通过多种网络驱动(Network Driver)来实现,例如 bridge 网络驱动、host 网络驱动、overlay 网络驱动、macvlan 网络驱动等。

bridge 网络驱动是 Docker 默认的网络类型,它将容器连接到宿主机上的一个 Docker 网桥中,并为每个容器分配一个唯一的 IP 地址。主机网络将容器连接到宿主机的网络接口上,使用宿主机的 IP 地址,并且容器和宿主机共享同一个网络命名空间。

Docker 网络还支持各种网络功能和特性,例如容器间的负载均衡、DNS 解析、服务发现、安全性和访问控制等。用户可以使用 Docker CLI 或 Docker API 来管理和操作 Docker 网络,例如创建、删除、连接、断开、检查和配置等操作。

Docker Network 基础

存储(Volume)

Docker 卷(Volume)与挂载(Bind Mount)是用于实现容器与主机之间数据交互和容器间数据共享的两种机制。通过这两种机制,可以实现 Docker 负责计算,主机负责存储数据 的效果

Docker 卷是一种 Docker 存储机制,可以将容器内部的数据存储在 Docker 主机上的卷(Volume)中,实现容器之间的数据共享和持久化。Docker 卷可以通过 Docker CLI 或 Docker API 来创建、删除、检查和管理,可以根据实际需求选择不同的卷驱动(Volume Driver),例如 local 卷驱动、nfs 卷驱动、smb 卷驱动等,并提供了多种特性和功能,例如数据备份、恢复、复制、迁移、安全性和访问控制等。

Docker 挂载是一种将主机上的文件或目录挂载到容器内部的机制,使得容器可以访问主机上的文件系统,实现容器与主机之间的数据交互。Docker 挂载可以通过 Docker CLI 或 Docker API 来指定挂载点(Mount Point)

Docker 卷和挂载的主要区别在于数据存储的位置和管理方式。Docker 卷将数据存储在 Docker 主机上的卷中,可以方便地管理和共享;而 Docker 挂载将数据存储在主机上的文件系统中,需要注意文件系统的权限和安全性。

Docker Compose

Docker Compose 是 Docker 官方提供的一个用于定义和运行多个 Docker 容器的工具。它允许用户使用一个单独的配置文件(通常是 YAML 格式),来定义一组服务(service)和它们之间的关系,例如依赖关系、网络连接等,并使用一个命令来启动、停止、重启、构建和销毁这些容器。

Docker Compose 可以让用户轻松地管理复杂的多容器应用程序,例如 Web 应用程序、数据库应用程序、消息队列应用程序等,它提供了以下主要功能:

定义多个服务:用户可以在一个单独的配置文件中定义多个服务,每个服务对应一个容器,例如 Web 服务、数据库服务、缓存服务等。

管理容器之间的关系:用户可以指定容器之间的依赖关系、网络连接和数据卷挂载等关系,以确保它们能够正确地协同工作。

轻松启动、停止和重启容器:用户可以使用一条命令来启动、停止、重启和销毁所有容器,以及查看它们的状态和日志。

容器构建:用户可以使用 Docker Compose 来构建和打包容器镜像,以及发布和分享它们。

Docker Compose 是一个开源项目,可以在 Linux、Windows 和 macOS 等操作系统上运行。它可以与 Docker Engine 集成,并支持多种扩展和插件,例如使用环境变量、使用外部配置文件、使用第三方网络插件等。

Docker Swarm

Docker Swarm 是 Docker 官方提供的一个集群管理工具,用于将多个 Docker 主机组合成一个虚拟的 Docker 主机,并在其上运行容器化应用程序。Docker Swarm 提供了自动化容器部署、负载均衡、容错处理、自我修复等功能,可以让用户轻松地管理多台主机上的 Docker 容器。

Docker Swarm 的主要特点如下:

高可用性:Docker Swarm 提供了自动容错和自我修复机制,可以在节点故障时自动迁移容器,保证应用程序的高可用性。

水平扩展:Docker Swarm 可以根据应用程序的负载自动扩展容器数量,并提供了负载均衡和服务发现功能,使得应用程序可以无缝地水平扩展。

安全性:Docker Swarm 支持 TLS 加密通信和 RBAC 访问控制,可以保障容器集群的安全性。

兼容性:Docker Swarm 可以与 Docker Compose 配合使用,支持 Docker API,使得用户可以使用 Docker 工具链来管理容器集群。

使用 Docker Swarm 可以将多个 Docker 主机组合成一个虚拟的 Docker 主机,并在其上运行容器化应用程序。Docker Swarm 通过节点管理器(Manager)和工作节点(Worker)的角色来管理容器集群,其中节点管理器负责管理集群状态和任务分配,工作节点负责运行容器。用户可以使用 Docker CLI 或 Docker Compose 来与 Docker Swarm 交互,进行容器的部署、管理和监控。

Dockerfile

Dockerfile详解超全

Dockerfile是Docker中用于定义镜像构建过程的文件,它可以包含构建镜像所需的所有指令和依赖,让用户可以快速地构建、部署和分享自己的镜像。

Dockerfile是一个文本文件,通常包含了一系列指令,用于指定如何构建镜像。例如,Dockerfile中可以指定基础镜像、安装依赖、复制文件、设置环境变量、暴露端口、运行命令等。Dockerfile的每个指令都会生成一层镜像,并可以通过后续的指令来修改和组合这些层,最终生成一个完整的镜像。

常用的 Dockerfile 指令包括:

  • FROM:指定基础镜像,用于构建当前镜像。
  • RUN:在当前镜像中运行指定的命令,例如安装软件、配置环境变量等。
  • COPY/ADD:将宿主机上指定的文件或目录复制到当前镜像中。
  • WORKDIR:指定当前工作目录,后续的命令都将在该目录下执行。
  • ENV:设置环境变量,可以在后续的命令中使用。
  • EXPOSE:声明容器要监听的端口号,但并不会自动映射到宿主机上。
  • CMD/ENTRYPOINT:指定容器启动时要执行的命令,两者的区别是 CMD 可以被覆盖,而 ENTRYPOINT 不能。
  • VOLUME:声明容器要挂载的数据卷,可以在容器启动时指定挂载点。
  • USER:指定容器以什么用户身份运行。
  • LABEL:为镜像添加标签,可以用于描述镜像的版本、作者、用途等信息。
  • ARG:声明构建过程中使用的变量,可以在构建命令中传入。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值