当前位置: 首页 > news >正文

docker技术之container与docker介绍

一、Docker 简介

Docker 是一种容器化技术,用于将应用程序及其依赖打包到一个独立的容器中,从而实现快速部署、隔离运行和跨环境一致性。

容器与虚拟机的区别

  • 容器:运行在操作系统内核之上,依赖于 Linux 内核特性(如 Namespace 和 Cgroups),轻量级,启动速度快,资源消耗少。
  • 虚拟机:通过虚拟化层运行完整的操作系统,资源占用大,启动慢,但隔离性更强。

Docker 的优点

  1. 快速:启动、停止等操作以秒或毫秒为单位,性能提升显著。
  2. 敏捷:部署简单,成本低。
  3. 灵活:应用和系统“容器化”,无需额外操作系统。
  4. 轻量:一台服务器可部署多个容器。
  5. 开源免费:由现代 Linux 内核支持,社区和生态系统丰富。
  6. 云支持:与众多云服务集成。

Docker 的争议点

  1. 隔离性:在复杂业务系统中,单 OS 的隔离性是否足够强。
  2. 语言成熟度:Docker 使用 Go 语言开发,Go 语言仍在不断改进。
  3. 商业化:由私有公司控制,未来可能商业化。

Docker 的目标

  1. 轻量建模:同一台宿主机运行多个容器。
  2. 逻辑分离:开发环境与生产环境一致。
  3. 快速开发周期:缩短从开发到生产的周期。
  4. 服务架构:鼓励单个容器运行单一服务,形成分布式模型。

Docker 的使用场景

  1. 开发、测试、部署服务。
  2. 创建隔离运行环境。
  3. 搭建测试环境。
  4. 构建 PaaS 基础设施。
  5. 提供 SaaS 应用程序。
  6. 高性能、大规模部署。

Docker 的技术实现

  1. Namespace:隔离资源(如进程、网络、文件系统等)。
  2. Cgroups:限制资源(如 CPU、内存)。
  3. UnionFS:联合文件系统,支持多层文件系统叠加。

Docker 的三大组件

  1. 仓库(Registry):存储和分发镜像,如 Docker Hub。
  2. 镜像(Image):容器的模板,包含启动容器所需的文件系统和配置。
  3. 容器(Container):运行中的实例,基于镜像启动。

Docker 的基本组成

  1. Docker Client:用户与 Docker 交互的客户端。
  2. Docker Daemon:后台服务,管理容器和镜像。
  3. Docker Image:只读文件系统,由多层组成。
  4. Docker Container:可写层,运行应用程序。

Docker 依赖的 Linux 内核特性

  1. Namespaces:隔离进程、网络、文件系统等资源。
  2. Cgroups:限制和管理资源使用。

Docker 容器的能力

  1. 文件系统隔离:每个容器有自己的 root 文件系统。
  2. 进程隔离:每个容器运行在独立的进程环境中。
  3. 网络隔离:容器间网络接口和 IP 地址独立。
  4. 资源隔离和分组:通过 Cgroups 管理资源分配。

二、什么是Docker?

PaaS(Platform as a Service)

PaaS 是一种云计算服务模型,为开发者提供了一个完整的开发平台,包括开发工具、运行时环境、数据库、中间件等。开发者可以在这个平台上开发、部署、运行和管理应用程序,而无需关心底层硬件和基础设施的管理。

PaaS 的特点

1、开发环境支持:

  • 提供多种编程语言的运行时环境,如 Java、Python、Ruby、Node.js 等。
  • 提供数据库服务,如 MySQL、PostgreSQL、MongoDB 等。
  • 提供中间件支持,如消息队列(RabbitMQ)、缓存服务(Redis)等。

2、自动化部署:

  • 支持通过配置文件或脚本实现应用程序的自动化安装、部署和升级。
  • 提供持续集成和持续部署(CI/CD)工具,简化开发流程。

3、资源管理:

  • 提供弹性扩展功能,根据应用负载自动调整资源分配。
  • 提供资源监控和管理工具,帮助开发者优化性能和成本。

4、隔离性:

  • 提供多租户支持,不同用户的应用程序在逻辑上隔离,互不影响。

常见的 PaaS 平台

  1. Heroku:支持多种编程语言,提供简单易用的部署流程。
  2. Google App Engine:提供强大的自动扩展功能,支持多种语言和框架。
  3. Microsoft Azure:提供广泛的开发工具和云服务,支持多种语言和平台。
  4. Amazon Web Services (AWS) Elastic Beanstalk:提供灵活的部署选项,支持多种语言和框架。

Docker 在 PaaS 中的应用

Docker 作为容器化技术,是实现 PaaS 平台的理想选择。它提供了以下优势:

1、轻量级和高性能:

  • Docker 容器启动速度快,资源消耗少,适合在 PaaS 平台上快速部署和运行应用程序。

2、标准化和可移植性:

  • Docker 容器将应用程序及其依赖打包成一个标准化的组件,可以在任何支持 Docker 的环境中运行,实现“一次打包,到处运行”。

3、隔离性:

  • 每个容器运行在独立的环境中,应用程序之间互不干扰,提高了系统的稳定性和安全性。

4、自动化部署:

  • 通过 Dockerfile 和 Docker Compose 等工具,可以轻松实现应用程序的自动化安装、部署和升级。

5、生态系统丰富:

  • Docker 社区提供了大量的镜像和工具,支持多种编程语言和框架,方便开发者快速搭建开发环境。

Docker 与 PaaS 的结合

Docker 可以与 PaaS 平台无缝结合,为开发者提供更强大的开发和部署体验。例如:

  • Heroku:支持 Docker 容器部署,允许开发者将应用程序打包成 Docker 镜像并部署到 Heroku 平台。
  • Google Cloud Run:基于 Docker 容器的无服务器计算平台,支持自动扩展和按需计费。
  • AWS ECS (Elastic Container Service):提供容器编排服务,支持 Docker 容器的管理和部署。

总结

PaaS 平台为开发者提供了一个完整的开发和部署环境,而 Docker 作为容器化技术,为 PaaS 平台提供了轻量级、高性能、标准化和可移植的解决方案。两者的结合,使得开发者可以更高效地开发、部署和管理应用程序,同时降低运维成本和复杂性。

三、Docker的核心技术

1. cgroups(Control Groups)

cgroups 是 Linux 内核的一个功能,用于对进程进行资源限制和隔离。它最初由 Google 工程师提出,后来被整合进 Linux 内核中。

重要概念

  • 子系统(Subsystem):每个子系统是一个资源控制器,用于管理特定资源的分配。常见的子系统包括:
    • cpu:控制 CPU 时间分配。
    • memory:控制内存分配。
    • blkio:控制块设备(如磁盘)的输入输出。
    • net_cls:控制网络接口的分类。
    • devices:控制设备访问权限。
  • 控制组(Control Group):一个控制组是一个逻辑上的进程集合,可以分配特定的资源限制。例如,可以为一个控制组设置最大可用内存或 CPU 时间。

使用方法

1、挂载子系统:首先需要将子系统挂载到一个挂载点。

mount -t cgroup -o cpu,memory cgroup /sys/fs/cgroup

2、创建控制组:在挂载点下创建一个目录,表示一个新的控制组。

mkdir /sys/fs/cgroup/mygroup

3、设置资源限制:通过写入特定的文件来设置资源限制。

echo 100 > /sys/fs/cgroup/mygroup/cpu.shares # 设置 CPU 时间份额 echo 100M > 
/sys/fs/cgroup/mygroup/memory.limit_in_bytes # 设置内存限制

4、将进程加入控制组:将进程的 PID 写入到控制组的 tasks 文件中。

echo 1234 > /sys/fs/cgroup/mygroup/tasks

优势

  • 性能优势:cgroups 是内核级功能,性能开销小。
  • 资源管理:可以精细控制各种资源的分配,适用于多租户环境。
  • 广泛支持:被广泛应用于容器技术(如 Docker)和云计算平台。

2. LXC(Linux Containers)

LXC 是一种基于 Linux 的操作系统级虚拟化技术,利用 Namespace 和 cgroups 提供隔离和资源限制。

特点

  • 轻量级:共享宿主机的内核,不需要单独加载内核,启动速度快,内存消耗少。
  • 高性能:IO 和 CPU 性能接近物理机(baremetal)。
  • 隔离性:通过 Namespace 提供进程、网络、文件系统等的隔离。
  • 资源管理:通过 cgroups 限制资源使用。

与 Docker 的关系

  • Docker 最初是基于 LXC 实现的,但后来 Docker 开发了自己的容器运行时(如 runc),不再依赖 LXC。
  • LXC 和 Docker 都利用了 Linux 内核的 Namespace 和 cgroups,但 Docker 提供了更高级的抽象和工具,更适合应用容器化。

性能对比

  • 性能:LXC > KVM(传统虚拟化技术)
  • 内存利用率:LXC > KVM
  • 隔离性:KVM > LXC(KVM 是完全的虚拟化,隔离性更强)

3. AUFS(Advanced Multi-Layered Unification Filesystem)

AUFS 是一种联合文件系统,支持将多个目录合并成一个虚拟文件系统。它通过“写入复制”(Copy on Write, COW)技术实现高效的文件系统操作。

特点

  • 多层合并:可以将多个目录(如只读层和可写层)合并成一个单一的文件系统。
  • 写入复制:当需要修改文件时,AUFS 会创建文件的副本,而不是直接修改原始文件。这减少了存储空间的占用。
  • 高效部署:Docker 使用 AUFS 来管理容器的文件系统,使得容器的启动和部署非常快速。

应用

  • Docker 镜像:Docker 镜像是由多层组成的,每层都是一个只读文件系统。AUFS 将这些层合并成一个可写的文件系统,供容器使用。
  • 版本管理:Docker 利用 AUFS 的 COW 特性,只存储镜像之间的差异,从而节省存储空间。

典型的 Linux 启动文件系统

  • bootfs:引导文件系统,用于启动过程中的初始化。
  • rootfs:根文件系统,是系统启动后的主要文件系统。

总结

  • cgroups:用于资源限制和隔离,是容器技术的核心组件之一。
  • LXC:轻量级的容器技术,为 Docker 提供了早期的技术基础。
  • AUFS:联合文件系统,通过 COW 技术实现高效的文件系统管理,是 Docker 容器文件系统的重要实现方式。

四、Docker全生命周期开发模式


Docker Image

定义Docker Image 是一个只读模板,包含了运行一个容器所需的文件系统和配置信息。它是一个极度精简的 Linux 程序运行环境,通常不包含不必要的工具(如 vi),除非是通过镜像叠加方式构建的。

特点

1、精简:

  • 官方的 Java 镜像通常只包含运行 Java 应用程序所需的最小环境。
  • 例如,CentOS + Java 7 的镜像会包含 CentOS 基础镜像和 Java 7 的运行时环境。

2、定制化:

  • Docker Image 是一个需要定制化的“安装包”,包含基础镜像和应用的二进制部署包。
  • 通过 Dockerfile 可以创建自定义的镜像,包含用户指定的软件依赖。

3、配置文件:

  • Docker Image 内不建议包含运行时需要修改的配置文件。配置文件可以通过挂载卷(Volumes)或环境变量(Environment Variables)在运行时动态注入。

4、构建:

  • 使用 Dockerfile 在当前目录下构建新的镜像:docker build -t my-image-name .
  • Dockerfile 是一个文本文件,包含了一系列指令,用于定义如何构建镜像。

5、最佳实践:

  • 重用基础镜像:尽量使用网上公开的基础镜像,避免重复造轮子。
  • 多阶段构建:使用多阶段构建(Multi-Stage Builds)来减少镜像大小,只保留最终运行所需的文件。
  • 标签化:为镜像添加清晰的标签(Tags),便于版本管理和区分。

Docker Container

定义

Docker Container 是 Docker Image 的运行实例。它共享宿主机的内核,但运行在隔离的环境中。

特点

1、实例化:

  • Docker Container 是从 Docker Image 启动的实例,每个容器可以运行不同的操作系统镜像(如 Ubuntu 或 CentOS)。
  • 容器的启动和停止速度非常快,通常在秒级。

2、隔离性:

  • 容器之间是隔离的,每个容器运行在自己的环境中,互不干扰。
  • 容器的文件系统是独立的,基于镜像的只读层和容器的可写层(Copy on Write)。

3、运行环境:

  • 容器内部可以运行任何应用程序,但建议尽量保持容器的轻量化。
  • 不建议在容器内部开启 SSHD 服务。Docker 1.3 版本后新增了 docker exec 命令,可以直接进入容器排查问题:docker exec -it container-name /bin/bash

4、网络配置:

  • 容器默认没有对外的 IP 地址,但可以通过 Docker 的网络功能(如端口映射、自定义网络等)暴露服务端口。
  • 容器可以连接到 Docker 网络,实现容器之间的通信。

5、生命周期:

  • 容器的生命周期与应用程序的生命周期绑定。当应用程序退出时,容器也会停止运行。
  • 容器可以被启动、停止、重启、删除等,操作非常灵活。

6、数据持久化:

  • 容器的文件系统是临时的,容器删除后数据会丢失。可以通过挂载卷(Volumes)将数据持久化到宿主机或其他存储设备。

总结

  • Docker Image 是一个只读模板,用于构建和分发应用程序及其依赖。它通过 Dockerfile 定制,支持多阶段构建和重用基础镜像。
  • Docker Container 是 Docker Image 的运行实例,运行在隔离的环境中,共享宿主机的内核。它支持快速启动和停止,提供灵活的生命周期管理。

五、Docker Container的生命周期

 

注:Container必须在前台执行,命令执行完成就结束

Docker Daemon

定义

Docker Daemon 是 Docker 的核心组件之一,它是一个在后台运行的 Linux 守护进程,负责管理 Docker 镜像、容器、网络和存储卷等资源。

功能

1、容器管理:

  • 创建、启动、停止、删除容器。
  • 管理容器的生命周期,确保容器的正常运行。

2、镜像管理:

  • 拉取、推送、存储和管理 Docker 镜像。
  • 从本地或远程仓库下载镜像,或上传本地镜像到仓库。

3、网络管理:

  • 配置和管理 Docker 网络,支持容器之间的通信。
  • 支持多种网络模式,如桥接网络、主机网络、覆盖网络等。

4、存储卷管理:

  • 管理数据卷,支持数据的持久化存储。
  • 支持本地存储卷和外部存储卷(如 NFS、Ceph 等)。

5、REST API 服务:

  • Docker Daemon 可以绑定本地端口(默认是 unix:///var/run/docker.sock 或 tcp://0.0.0.0:2375),提供 REST API 服务。
  • 通过 REST API,用户可以远程访问和控制 Docker 守护进程,执行各种操作,如创建容器、拉取镜像等。

6、插件支持:

  • 支持各种插件,如网络插件、存储插件等,扩展 Docker 的功能。

启动和配置

  • 启动 Docker Daemon:
  • bash复制sudo systemctl start docker
  • 配置 Docker Daemon:
    • 配置文件通常位于 /etc/docker/daemon.json,可以设置绑定的端口、镜像仓库地址等参数。
    • 示例配置文件:
    • JSON复制{ "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"], "insecure-registries": ["myregistry.local:5000"] }

六、Docker Registry/Hub

定义

Docker Registry 是一个集中化的镜像存储和分发系统,用于存储和管理 Docker 镜像。Docker Hub 是 Docker 官方提供的公共镜像仓库,是 Docker 生态系统的重要组成部分。

功能

1、镜像存储和分发:

  • 存储和管理 Docker 镜像,支持用户上传和下载镜像。
  • 提供镜像版本管理,用户可以拉取特定版本的镜像。

2、用户管理:

  • 支持用户注册、登录和权限管理。
  • 用户可以创建和管理自己的镜像仓库。

3、自动化构建:

  • 支持与代码托管系统(如 GitHub 和 Bitbucket)集成,实现自动化构建。
  • 当代码更新时,Docker Hub 会自动触发构建流程,生成新的镜像。

4、镜像搜索和发现:

  • 提供镜像搜索功能,用户可以快速找到所需的镜像。
  • 支持镜像分类和标签,方便用户管理和查找。

5、私有仓库:

  • 支持创建私有仓库,用户可以将敏感镜像存储在私有仓库中,限制访问权限。
  • 私有仓库可以部署在本地或云服务中,如 Docker Registry。

使用方法

  1. 登录 Docker Hub:docker login
  2. 拉取镜像:docker pull hello-world
  3. 推送镜像:docker push myusername/myimage
  4. 配置自动化构建:
  • 在 Docker Hub 上绑定 GitHub 或 Bitbucket 仓库。
  • 配置自动化构建规则,指定触发条件和构建步骤。

总结

  • Docker Daemon 是 Docker 的核心守护进程,负责管理容器、镜像、网络和存储卷等资源。它通过 REST API 提供远程访问和控制功能,是 Docker 运行的基础。
  • Docker Registry/Hub 是 Docker 镜像的存储和分发中心,提供了丰富的镜像资源和自动化构建功能。Docker Hub 作为官方公共仓库,极大地促进了 Docker 生态系统的繁荣。

 

http://www.dtcms.com/a/513020.html

相关文章:

  • 如何做外贸soho做网站网站开发html5技术
  • 外国人做的甲骨文网站做网站需要切图吗
  • Redis如何解决key冲突?
  • 解决 QML 中使用 Qt Charts 崩溃的三个关键步骤
  • 2025算力行业趋势下的4090云主机租赁方案
  • 一起做网站17沧州网站建设哪家好
  • 如何在百度提交网站莲湖免费做网站
  • 网站统计排名做装修网站价格
  • 基于 Redis 的布隆过滤器:高效的数据存在性检查
  • 【经典书籍】C++ Primer 第9章顺序容器精华讲解
  • 基于MATLAB的光学相干断层扫描图像处理与定量分析算法研究
  • 怎么做发卡网站购买网站app制作
  • 淘客做网站怎么备案手机上网站
  • 解决IAR编译路径空格报错
  • 【JUnit实战3_05】第三章:JUnit 的体系结构(上)
  • Oracle 打补丁指南
  • 蓝奥声智能插座:从“用电计量”到“设备健康预测”的跨越
  • 网站域名到期广东网站建站公司
  • 林地变化检测技术拆解:基于语义分割的双时相卫星影像比对实现方案
  • 网站建设明细报价表 xlsiis发布网站的教程
  • Vue3 大文件上传实战:切片上传 / 断点续传 / 秒传 / 暂停恢复 / 全局并发控制
  • Qt qmlplugindump浅谈
  • 网站后台登陆代码表白网站制作源码
  • 广告设计用到的软件福州网站seo优化公司
  • 微分运算电路(波形转换电路)
  • 阿里云网站目录建立网站得多少钱
  • (二)React开发环境搭建与目录结构分析(零基础友好)
  • wordpress取消评论审核南京seo公司教程
  • 时间敏感网络(TSN)
  • 三轴云台之多算法协同技术篇