前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker系列(1):Welcome to Docker

Docker系列(1):Welcome to Docker

作者头像
Homqyy
发布2023-03-06 13:24:27
4610
发布2023-03-06 13:24:27
举报
文章被收录于专栏:知行合一知行合一

前言

2022年3月底我开始正式的接触Docker这项技术,以往一直以为Docker是一项全新的虚拟技术,认为与我的生活和工作无关,因此也从未计划去了解和使用它。直到看到同事通过它快速地完成了一次服务部署,在以往我是需要花大量时间才能完成的工作,哪怕在运维上已经有丰富的经验也难以避免。而他只需要数分钟就能完成,这巨大的反差令我瞬间对Docker产生了非常浓厚的兴趣,便开始阅读书籍《Docker实战》、翻阅官网手册并加入Docker社区,在短暂的实战中切实的感受到了Docker带来的改变和便利,便想着在这里出个“Docker系列”地博客,跟大家一起分享Docker。如果你也感兴趣,那么请跟我一起进入到下面的Docker世界吧~


问题

如果你是一位开发者,你是否跟我一样有如下问题:

  • 在部署各种服务器时浪费了大量的时间。
  • 因为各种原因(比如服务器崩溃了、跟同事分享环境等)需要反复的部署相同的环境,可即便之前部署过了,但还是需要花大量的时间才能完成。
  • 基于个人或工作目的想搭建一个完整的前后端环境,但碍于知识面不足等原因迟迟无法动手,即便最后完成了也需要耗费大量的精力,常常为此感到不值和困恼。
  • 开发环境随着项目的增长而变得混乱臃肿,最坏的情况是项目间彼此间互不兼容。

如果你是一位在IT领域内的从业者,但并非研发,你是否有如下困恼:

  • 期望使用开源的项目来服务自己的生活或工作,但碍于没有开发功底,无法自行部署,哪怕网上有教程,也被各种复杂的命令,以及过程中遇到的各种意外而放弃。
  • 由于工作原因,比如运维、测试和技术支持等,需要部署一些服务去完成工作任务或则提高工作效率,但部署服务往往较为困难,且过程复杂,需要投入较大的精力。最后好不容易部署完了,却仍旧需要投入大量精力去维护。最后好不容易部署好的环境,也很难进行移植和分享。

如果你是一位领导或则软件及服务的直接受益者,你是否有如下担忧:

  • 想尝试或则使用一款新的Linux软件,但是担心运行起来的程序带有恶意代码,进而导致资产受到威胁。
  • 希望开发的服务可以在各部门或产线间复用,并以一种可编排的形式复用。

那么恭喜你,Docker将为你解决如上问题、困恼和担忧。同时,Docker有如下优点:

  • 服务编排:以服务为单元按需按序编排,提高服务的复用率,进而快速孵化产品。
  • 程序与系统解耦:由于Docker将操作系统与程序解耦,从根本上解决了移植问题。
  • 网络和资源隔离:网络和资源的隔离,可以有效的保护运行程序的设备,降低资产的受威胁面积。
  • 丰富的docker仓库:Docker Hub
  • 详细的手册:Docker Docs
  • 大型社区:Docker Community

什么是Docker?

Docker是一个“docker(命令行程序)”、“dockerd(提供docker服务的守护进程)”、“Registry(存放镜像的仓库)”的一个集合,它简化了安装、运行、发布、删除、移植和管理软件的过程,解决了在传统过程中会出现的很多问题。

同时也提供了一种高效编排服务的方法。而其直接使用的技术是现存的UNIX技术“容器”,因此Docker本身并不引入新的技术,它是一个竖立于技术之上的一种抽象的服务,是基于开发需求而诞生的一种“平台服务”。

docker运行在Linux中的示例图

Docker不是虚拟化

在没有Docker的时代中,商家和开发们普遍使用的是虚拟机(硬件虚拟化),以提供隔离的需求,比如常用的“VMWare”、“VirtualBox”等。虚拟机提供虚拟的硬件,可直接安装操作系统,但它们花费的时间也较长,通常以分钟来计算。除了时间开销外,还伴随着大量的资源开销,因为它们除了运行你需要的软件外,还需要支撑系统的运行。

而Docker则不同,它不提供硬件虚拟化技术。如上图所示,Docker中的容器与Kernel(操作系统)之间是没有额外的中间层的,它们可以直接与操作系统打交道。而之所以能如此,是因为它使用的是2007年就已经成为Linux一部分的“namespace”和“cgroups”技术。因此,Docker本身并不提供容器技术,但它使容器的使用更加简单了。

Docker隔离

Docker构建的容器有如下8方面的隔离:

  • PID命名空间 —— 进程ID
  • UTS命令空间 —— 主机名和域名
  • MNT命令空间 —— 文件系统访问和结构
  • IPC命令空间 —— 基于共享内存的进程间通信
  • NET命名空间 —— 网络访问和结构
  • USR命名空间 —— 用户名和标识
  • chroot() —— 控制文件系统根目录的位置
  • cgroups —— 资源保护

Docker镜像

镜像是容器要运行的资源集合。容器如同集装箱一样,而镜像则是集装箱里面装着的物资,因为集装箱之间是相互隔离的,因此相同内容的物资可以放在多个集装箱中,即通过一个镜像可以产生N个容器,且不必担心他们之间产生冲突。

我们通常在Registry仓库中下载的内容就是镜像。因此,再Docker中镜像是分发的单元,我们通过将自己的程序或文件打包成镜像,并发布到仓库中,最终由仓库分发此镜像给需要的(授权的)用户。

以打包一个Nginx镜像为例,如下所示:

打包Nginx镜像和分发示例


什么时候使用Docker?

鉴于上面所述,Docker可以随时随地的使用,尤其现在Docker已经支持主流的操作系统,如:Windows、OS X、Linux。在Windows和OS X更是提供了桌面版,让大家操作镜像跟在应用商店操作软件一样简单和方便,可以快速的添加和删除一个镜像以及启停一个容器。

毫不避讳的说,我最近的博客网站就是用Docker快速搭建的,除去对博客软件的学习时间整个搭建过程也就不到3分钟。


结语

容器虽然能够提供一定的保护,预防许多类型的攻击,但并不是安全问题的总解决方案,你不应使用不受信任来源的镜像。也不应当随便的将非完全可控的的容器运行在相互协作的环境中。

如果你觉得有帮助,或则喜欢的话可以注册账户并留言,在更新内容后我会第一时间通知您。


继续阅读

Docker系列(2):容器给部署带来的快乐

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022年4月16日2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 问题
  • 什么是Docker?
    • Docker不是虚拟化
      • Docker隔离
      • Docker镜像
      • 什么时候使用Docker?
      • 结语
      • 继续阅读
      相关产品与服务
      容器服务
      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档