01. Docker基础-简介

简介

什么是Docker?

Docker是一个开源的应用容器引擎,可以让开发者将应用及应用运行环境打包到一个轻量级、可移植的镜像中,然后发布到任何流行的Linux、Window主机上。

为什么要用Docker?

  1. 更高效的利用系统资源
  2. 更快速的启动时间
  3. 一致的运行环境
  4. 持续交付和部署
  5. 持续交付和部署
  6. 更轻松的迁移
  7. 更轻松的维护和扩展

Docker架构

Docker逻辑结构

docker-architecture.webp

Docker架构-组件

Docker 架构主要包括以下几个关键组件:

  1. Docker Client
    • Docker 客户端是与 Docker 服务器交互的接口。
    • 它接收命令并将其发送到 Docker 服务器进行执行。
    • 客户端可以使用命令行界面(CLI)或通过 API 与服务器通信。
  2. Docker Server
    • Docker 服务器是一个守护进程,通常称为 dockerd。
    • 它负责处理客户端的请求,执行容器操作,如创建、启动、停止、删除等。
    • 服务器还负责与容器和镜像仓库通信,以获取和存储镜像。
  3. Docker Registry
    • Docker Registry 是存储 Docker 镜像的仓库。
    • 它可以是公共的,如 Docker Hub,也可以是私有的。
    • 注册表允许用户上传和下载镜像,并为镜像提供版本控制和访问控制。
  4. Docker Container
    • Docker 容器是从镜像创建的应用运行实例。
    • 容器是完全使用沙箱机制,相互之间不会有任何接口。
    • 容器可以在隔离的环境中运行应用程序,确保它们的安全性和可移植性。
  5. Docker Image
    • Docker 镜像是只读的模板,用于创建 Docker 容器。
    • 镜像可以从注册表中拉取,也可以通过 Dockerfile 手动构建。
    • 镜像由多个层组成,每一层都包含了一个文件系统的快照。
  6. Docker Networking
    • Docker 提供了多种网络模式,如桥接网络、主机网络、覆盖网络等。
    • 这些网络模式允许容器之间以及容器与外部网络进行通信。
  7. Docker Storage
    • Docker 提供了多种存储驱动,用于存储容器和镜像的数据。
    • 常见的存储驱动包括 AUFS、Overlay2、Btrfs、Device Mapper 等。
  8. Docker Compose
    • Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。
    • 它使用 docker-compose.yml 文件来定义服务、网络和数据卷。
    • Compose 允许你轻松地启动、停止和重新部署整个应用程序。
  9. Docker Swarm
    • Docker Swarm 是 Docker 的集群管理工具。
    • 它允许你将多个 Docker 主机组合成一个单一的虚拟主机,从而实现负载均衡、故障转移和可伸缩性。

Docker与传统虚拟化对比

  • 示意图

  • 描述
  1. 传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程。
  2. 容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。
  3. 容器要比传统虚拟机更为轻便。

Docker官网

Docker官网:https://www.docker.com/
Docker文档:https://docker-practice.github.io/zh-cn/
Docker官网文档:https://docs.docker.com/reference/cli/docker/
Docker下载:https://docs.docker.com/get-docker/
Docker官方仓库:https://hub-stage.docker.com/

扩展

云计算中的服务包含三个层次:

  1. IAAS:基础设置级服务
  2. PAAS:平台级服务
  3. SAAS:软件级服务

概念

镜像概念

概念

Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如:匿名卷、环境变量、用户等)。
Docker镜像不包含任何动态数据,其内容在构建之后也不会被改变。

分层

Docker镜像构建时会一层一层的构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。

容器概念

概念

容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。
容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。
容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。

分层

镜像使用的是分层存储,容器也是如此。
每一个容器运行时,是以镜像为基础层,在其上创建一个当前容器的存储层,我们可以称这个为容器运行时读写而准备的存储层为容器存储层。

镜像和容器

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

仓库概念

概念

镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。
一个Docker Registry中可以包含多个仓库(Repository);每个仓库可以包含多个 标签(Tag);每个标签对应一个镜像。
一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。

公共仓库

Docker Registry 公开服务是开放给用户使用、允许用户管理镜像的 Registry 服务。
一般这类公开服务允许用户免费上传、下载公开的镜像,并可能提供收费服务供用户管理私有镜像。
国内的一些云服务商提供了针对 Docker Hub 的镜像服务(Registry Mirror),这些镜像服务被称为加速器。比如 网易云镜像服务、DaoCloud 镜像市场、阿里云镜像库等。

私有仓库

除了使用公开服务外,用户还可以在本地搭建私有 Docker Registry。
Docker 官方提供了Docker Registry镜像,可以直接使用做为私有Registry服务。
常用镜像仓库有:Harbor。

3W

What (是什么)

Docker 是一个开源的应用容器引擎,它允许开发者将应用程序及其依赖打包到一个可移植的容器中,然后发布到任何支持 Docker 的平台上。Docker 容器是完全使用沙箱机制,相互之间不会有任何接口。容器可以在隔离的环境中运行应用程序,确保它们的安全性和可移植性。
Docker 的主要特点包括:

  1. 轻量级:Docker 容器不需要像虚拟机那样运行完整的操作系统,因此启动速度更快,资源消耗更少。
  2. 可移植性:Docker 容器可以在任何支持 Docker 的机器上运行,确保应用程序在不同环境之间的一致性。
  3. 隔离性:Docker 容器完全隔离,包括网络、进程空间和文件系统,这有助于提高应用程序的安全性。
  4. 版本控制:Docker 镜像支持版本控制,可以轻松地回滚到之前的版本。
  5. 自动化:Docker 支持自动化构建和部署,通过 Dockerfile 可以自动化构建镜像的过程。

Docker 广泛应用于开发、测试和生产环境中,帮助团队提高协作效率,简化应用程序的部署和扩展。

Where (用在哪里)

Docker 可以用在多个领域和场景中,以下是一些常见的应用场景:

  1. 开发和测试
    • 开发人员可以使用 Docker 容器来创建开发环境,确保代码在本地和远程服务器上的一致性。
    • 测试人员可以使用 Docker 容器来快速搭建测试环境,模拟生产环境,并自动化测试流程。
  2. 持续集成和持续部署(CI/CD)
    • 集成 Docker 容器可以自动化构建、测试和部署流程,提高开发效率和代码质量。
    • 持续集成工具如 Jenkins、GitLab CI/CD、GitHub Actions 等都可以与 Docker 集成,实现自动化的构建和部署。
  3. 微服务架构
    • Docker 容器可以作为微服务架构的基础,每个服务运行在自己的容器中,便于管理和扩展。
    • 微服务架构可以提高系统的可伸缩性、可维护性和可测试性。
  4. 云服务和容器编排
    • Docker 可以与云服务平台如 AWS、Azure、Google Cloud Platform 等集成,实现容器化的云服务。
    • 容器编排工具如 Kubernetes、Swarm 等可以用来管理容器集群,提供负载均衡、故障转移和可伸缩性等功能。
  5. 大数据和机器学习
    • Docker 可以用于大数据处理和机器学习工作流程,每个组件可以运行在自己的容器中。
    • 这有助于提高数据处理和分析的效率,并简化复杂工作流程的部署和管理。
  6. 网站和应用程序托管
    • 开发人员可以使用 Docker 容器来托管网站和应用程序,实现快速的部署和扩展。
    • 容器化的应用可以更容易地与外部服务(如数据库、消息队列等)集成。
  7. 移动应用开发
    • Docker 可以用于移动应用的开发,提供跨平台的开发和测试环境。
    • 开发人员可以使用 Docker 容器来模拟不同的移动操作系统和设备。

Docker 的应用场景非常广泛,几乎可以应用于任何需要可移植、可扩展和可管理的应用程序部署的场景。随着容器技术的不断发展,Docker 的应用领域也在不断扩展。

Why (为什么使用)

使用 Docker 的原因有很多,它为开发者、运维人员和企业带来了许多好处。以下是一些主要原因:

  1. 环境一致性
    • Docker 容器提供了一个可复制的、一致的运行环境,确保应用程序在开发、测试和生产环境中都能正常运行。
    • 这意味着开发者可以在本地环境中构建和测试应用程序,然后将其无缝部署到生产环境,减少了环境差异带来的问题。
  2. 可移植性
    • Docker 容器可以在任何支持 Docker 的机器上运行,不受操作系统或硬件的限制。
    • 这使得应用程序可以轻松地在不同的环境中迁移,如从开发到测试,再到生产。
  3. 隔离性
    • 容器之间是完全隔离的,每个容器都有自己独立的文件系统、网络和进程空间。
    • 这样,即使一个容器崩溃或被恶意软件感染,也不会影响到其他容器或宿主机。
  4. 资源优化
    • Docker 容器共享宿主机的内核,但只使用自己需要的资源。
    • 这意味着可以在单个物理服务器上运行多个容器,提高资源利用率,减少资源浪费。
  5. 自动化
    • Docker 支持自动化构建和部署,通过 Dockerfile 可以自动化构建镜像的过程。
    • 持续集成和持续部署(CI/CD)工具可以与 Docker 集成,实现自动化的构建和部署流程。
  6. 版本控制
    • Docker 镜像支持版本控制,可以轻松地回滚到之前的版本。
    • 这有助于跟踪应用程序的更改,并在出现问题时快速恢复到已知良好的状态。
  7. 可扩展性
    • Docker 容器可以轻松地扩展和缩减,以适应不同的负载需求。
    • 容器编排工具如 Kubernetes、Swarm 等可以用来管理容器集群,提供负载均衡、故障转移和可伸缩性等功能。
  8. 社区和生态系统
    • Docker 有一个庞大的社区和丰富的生态系统。
    • 社区提供了大量的官方和第三方镜像,可以快速启动和运行各种应用程序。
    • 许多工具和服务都与 Docker 集成,如版本控制、日志记录、监控和安全性等。
  9. 成本效益
    • 使用 Docker 可以降低硬件成本,因为可以在单个物理服务器上运行多个容器。
    • 此外,Docker 还支持在云平台上运行容器,提供按需付费的模型,进一步降低成本。

总之,Docker 提供了一个强大的平台,使得应用程序的开发、测试和部署变得更加简单、高效和可靠。它已经成为现代软件开发和运维不可或缺的一部分。

  • 26
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值