Docker学习

一、Docker简介

  对于java开发来说,通过Docker发布程序,更加容易按照并运行它。在Docker封装的开发环境中编写软件,将节省配置或者共享环境的时间,因为从软件的角度来看,每个环境都是一样的。
   2013年推出Docker,可以和操作系统协作来打包、分发和运行软件。你可以把Docker作为软件分发商,用来节省你的时间,让你专注于高价值的事情,你可以使用Docker构建网络应用。
   Docker不是一种编程语言,并且也不是构造软件的框架。Docker是一个工具,可以帮助解决如安装、卸载、升级、分发、信任和管理软件等常见问题。
目前软件行业存在的痛点:
1.软甲更新发布以及部署低效,过程繁琐且需要人工介入
2.环境一致性难以保证
3.不同环境之间迁移成本太高

1.1Docker是什么?

   Docker包括了一个命令行程序、一个后台守护进程,以及一组远程服务。它解决了常见的软件问题,并简化了安装、运行、发布和删除软件。这一切能够实现是通过使用一项UNIX技术,称为容器。

1.2 Docker解决了什么问题?

   使用容器已经是很长一段时间内的做法。但是手动创建容器,任然具有挑战性,而且很容易出错。在没有Docker的时代,商家通常使用硬件虚拟化,以提供隔离。不同于虚拟机,Docker容器不适用硬件虚拟化。运行在Docker容器中的程序接口和主机的Linux内核直接打交道。因为容器中运行的程序和计算机的操作系统直接没有额外的中间层,没有资源被冗余软件的运行或者虚拟硬件模拟而浪费掉。
  运行Docker可以认为是在用户空间上运行着两个程序。首先是Docker的守护进程。如果正确安装,这个进程应始终处于运行状态。另外一个是Docker CLI,它是与应用交互的Docker程序。如果要启动、停止或者安装软件,你可以使用Docker CLI执行相应的命令。
  (1)Docker设计的目的就是要加强开发人员写代码的开发环境与应用程序要部署的生产环境一致性。从而降低那种“开发时一切正常,肯定是运维的问题(测试环境都是正常的,上线后出了问题就归结为肯定是运维的问题)”    (2)快速高效的开发生命周期 Docker的目标之一就是缩短代码从开发、测试到部署、上线运行的周期,让你的应用程序具备可移植性,易于构建,并易于协作。(通俗一点说,Docker就像一个盒子,里面可以装很多物件,如果需要这些物件的可以直接将该大盒子拿走,而不需要从该盒子中一件件的取。)
   (3)鼓励使用面向服务的架构 Docker还鼓励面向服务的体系结构和微服务架构。Docker推荐单个容器只运行一个应用程序或进程,这样就形成了一个分布式的应用程序模型,在这种模型下,应用程序或者服务都可以表示为一系列内部互联的容器,从而使分布式部署应用程序,扩展或调试应用程序都变得非常简单,同时也提高了程序的内省性。(当然,可以在一个容器中运行多个应用程序)

   docker容器化技术,把系统与应用打包镜像,运行镜像就成了容器(一个新的系统)

注意:在容器中运行的程序,只能访问自己该容器审定过的内存空间和资源

Docker构建的容器隔离包括8个方面。
PID命名空间 --进程标识符和能力
UTS命名空间 --主机名和域名
MNT命名空间 --文件系统访问和结构
IPC命名空间 --通过共享内存的进程中通信
NET命名空间 --网络访问和结构
USR命名空间 – 用户名和标识
chroot() --控制文件系统根目录的位置
cgroups --资源保护

二、镜像

  Docker通过一种打包和分发的软件,完成了传统容器的分装。这个用来充当容器分发角色的组件被称为镜像。
   Docker镜像,是一个容器中运行程序的所有文件的绑定快照。只要想从镜像中创造更多的容器。但是,当你这样做时,从相同的镜像启动的容器不共享文件系统的更改。当你使用Docker分发软件的时候,其实就是分发这些镜像,并在接收的机器上创建容器。镜像在Docker生态系统中是可交互的基本单位。
  运行容器时,它使用隔离的文件系统。此定义文件系统由容器由容器映像提供。由于镜像包含容器的文件系统,它必须包含运行应用所需的一切–所有依赖项、配置、脚本、二进制文件等。镜像还包含容器的其他配置,列如环境变量、要运行的默认命令、和其他元数据。
   镜像是构建Docker的基石。用户基于镜像来运行自己的容器。镜像也是Docker生命周期中的“构建”部分。镜像是基于联合文件系统的一种层式结构,由一系列指令一步一步构建出来。例如:镜像可以是mysql tomcat redis 添加一个文件; 执行一个命令; 打开一个窗口。 也可以将镜像当作容器的“源代码”。镜像体积很小,非常“便携”,易于分享、存储和更新。

三、容器

​   在计算机的世界中,容器拥有一段漫长且传奇的历史。容器与管理程序虚拟化(hypervisorvirtualization,HV)有所不同,管理程序虚拟化通过中间层将一台或者多台独立的机器虚拟运行与物理硬件之上,而容器则是直接运行在操作系统内核之上的用户空间。因此,容器虚拟化也被称为“操作系统级虚拟化”,容器技术可以让多个独立的用户空间运行在同一台宿主机上。

​   对Docker来说,它得益于现代Linux特性,如控件组(controlgroup)、命名空间(namespace)技术,容器和宿主机之间的隔离更加彻底,容器有独立的网络和存储栈,还拥有自己的资源管理能力,使得同一台宿主机中的多个容器可以友好的共存。 ​ 容器被认为是精益技术,因为容器需要的开销有限。和传统虚拟化以及半虚拟化相比,容器不需要模拟层(emulationlayer)和管理层(hypervisorlayer),而是使用操作系统的系统调用接口。这降低了运行单个容器所需的开销,也使得宿主机中可以运行更多的容器。 ​ 尽管有着光辉的历史,容器仍未得到广泛的认可。一个很重要的原因就是容器技术的复杂性:容器本身就比较复杂,不易安装,管理和自动化也很困难。而Docker就是为了改变这一切而生的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值