前言
Docker 是一个
开源的应用容器引擎
,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows
操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
📕作者简介:热爱跑步的恒川,致力于C/C++、Java、Python等多编程语言,热爱跑步,喜爱音乐的一位博主。
📗本文收录于恒川的日常汇报系列,大家有兴趣的可以看一看
📘相关专栏C语言初阶、C语言进阶系列等,大家有兴趣的可以看一看
📙Python零基础入门系列,Java入门篇系列正在发展中,喜欢Python、Java的朋友们可以关注一下哦!
Docker的工具实践及root概念和Docker容器安全性设置
- 1. 使用案例
- 2. Docker解决的问题
- 3. Docker未来发展
- 4. Docker Hub 服务
- 5. 技术局限
- 6. Docker环境安全
- 7. 容器部署安全
1. 使用案例
Docker是一个命令行工具,它提供了中央“docker”执行过程中所需的所有工具
。这使得Docker的操作非常简单。一些例子可以检查运行中的容器的状态:
或检查可用的镜像及其版本的列表:
另一个例子是显示一个镜像的历史:
上面的命令显示了命令行界面操作的方便快捷。只需要指定镜像ID的前几个字符就可以。可以看到只需要“d95”就能显示d95238078ab0镜像的所有历史。
人们可能会注意到该镜像非常小。这是因为Docker从父镜像建立增量镜像,只存储每个容器的更改。因此,如果有一个300MB的父镜像,如果在容器中安装了50MB的额外应用或服务,该容器和生成镜像可能只有50MB。
可以用Dockerfiles自动化Docker容器的创建过程
。Dockerfiles是含有单个容器性能规范的文件。例如,可以创建一个Dockerfiles来建立一个Ubuntu容器,在新容器内运行一些命令、安装软件或执行其他任务,然后启动容器。
容器网络
Docker早期版本中的网络基于主机桥接,但是Docker 1.0包含了一种新形式的网络,允许容器直接连接到主机以太网接口。默认情况下,一个容器有一个回路以及一个连接到默认内部桥接的接口,但是如果需要的话也可以配制成直接访问。通常,直接访问比桥接的速度更快
。
然而,桥接方法在许多情况下是非常有用的。桥接是通过主机自动创建一个内部网络适配器并为其分配一个主机本身尚未使用的子网。然后,当新的容器连接到这座桥,它们的地址进行自动分配。容器启动时可以将其连接到主机接口或端口,因此运行Apache的容器可能启动并连接到主机上的TCP端口8080(或随机端口)。通过使用脚本和管理控制,可以在任何地方启动Docker,连接端口并将其传达到需要使用该服务的应用或服务堆栈的其他部分
。
在Hyper-V服务器上Docker主机备份方法
要在Hyper-V服务器上创建Docker主机,需要下载并且安装OpenSSH以及Windows版本的Docker Machine
。还应该将OpenSSH二进制文件添加到Hyper-V服务器路径以便Docker Machine可以找到它们。
一旦所需的组件就绪,创建Docker主机如同运行一条命令行一样轻而易举。打开命令提示符窗口,定位到包含Docker Machine的文件夹,然后输入可执行文件名称(Docker-machine_windows-amd64.exe),其后输入-d开关、驱动程序的名称(在本例中是Hyper-V)以及正在创建的虚拟机(VM)的名称。
例如,该命令可能如下所示:
Docker-machine_windows-amd64.exe -d hyper-v Docker
当运行这个命令的时候,Docker Machine完成几个不同的任务。其中一些更重要的任务(从备份的角度来看)包括:
使用命令行中指定的名称创建虚拟硬盘(virtual hard disk,VHD);
下载名为Boot2Docker.ISO的DVD映像;
创建虚拟机;
把Boot2Docker.ISO 文件与新创建的VM关联,作为虚拟DVD光驱
;
把VHD与VM关联;
启动VM;
向VM分配IP地址和端口号。
2. Docker解决的问题
云计算、大数据,移动技术的快速发展,加之企业业务需求的不断变化,导致企业架构要随时更改以适合业务需求,跟上技术更新的步伐。毫无疑问,这些重担都将压在企业开发人员身上;团队之间如何高效协调,快速交付产品,快速部署应用,以及满足企业业务需求,是开发人员亟需解决的问题。Docker技术恰好可以帮助开发人员解决这些问题
。
为了解决开发人员和运维人员之间的协作关系,加快应用交付速度,越来越多的企业引入了DevOps这一概念。但是,传统的开发过程中,开发、测试、运维是三个独立运作的团队,团队之间沟通不畅,开发运维之间冲突时有发生,导致协作效率低下,产品交付延迟, 影响了企业的业务运行
。Docker技术将应用以集装箱的方式打包交付,使应用在不同的团队中共享,通过镜像的方式应用可以部署于任何环境中。这样避免了各团队之间的协作问题的出现,成为企业实现DevOps目标的重要工具。以容器方式交付的Docker技术支持不断地开发迭代,大大提升了产品开发和交付速度。
此外,与通过Hypervisor把底层设备虚拟化的虚拟机不同,Docker直接移植于Linux内核之上,通过运行Linux进程将底层设备虚拟隔离,这样系统性能的损耗也要比虚拟机低的多,几乎可以忽略
。同时,Docker应用容器的启停非常高效,可以支持大规模的分布系统的水平扩展,真正给企业开发带来福音。
正如中国惠普云计算集成云技术首席专家刘艳凯所说的那样:“任何一项技术的发展和它受到的追捧,都是因为它能够解决困扰人们的问题,”Docker正是这样的一种技术。
3. Docker未来发展
任何一项新技术的出现,都需要一个发展过程,比如云计算为企业所接受用了将近五年左右时间,OpenStack技术也经历了两、三年才受到人们的认可
。因此,虽然Docker技术发展很快,但技术还不够成熟,对存储的灵活的支持、网络的开销和兼容性方面还存在限制,这是Docker没有被企业大范围使用的一个主要原因。另外一个原因是企业文化是否与DevOps运动一致,只有企业支持DevOps,才能更大地发挥Docker的价值。最后一个原因就是安全性问题,Docker对于Linux这一层的安全的隔离还有待改进,才能进一步得到企业的认可。惠普刘艳凯认为,这也是Docker需要在下一步中改进的一方面。
Docker价值的最大体于对企业DevOps的支持,对原生云应用大规模水平扩展的支持
。在惠普Helion云战略中包括了对DevOps服务和原生云应用的支持,而这一战略的具体落地,与Docker技术有着紧密的联系。因此,惠普团队一直积极地参与OpenStack社区中和Docker项目相关的开发活动中,努力改进Docker技术中存在的不足。同时,惠普产品中也集成了Docker,例如,惠普开发平台产品集成了Docker,使用Docker作为应用的容器;以及惠普最新发布的CloudSystem 9.0也增加对Docker的支持,用户可以像使用其它的虚拟化资源一样,选择Docker作为应用的承载容器。刘艳凯认为,惠普非常认可Docker给用户带来的一些价值,那也希望通过自己努力,使更多的用户使用到Docker这样的先进的技术
。
4. Docker Hub 服务
双方在开源容器技术以及发展方向上共同努力,并提供本地化的 Docker 服务
。Docker 公司选择阿里云平台作为其DockerHub 在中国运营的基础服务。阿里云也获得 DockerEngine 商用版以及DockerDataCenter 运营权,并为 Docker 客户提供企业级支持和咨询服务。同时,阿里云将成为 Docker 官方支持的云服务提供商。
阿里云总裁胡晓明表示,通过和 Docker 的战略合作,阿里云将更好地为企业级客户提供完善的云服务,使能客户,并实现时代转型。
5. 技术局限
网络限制:容器网络(Docker Network )可以方便地在同一主机下对容器进行网络连接
。加上一些其他的工作,就可以跨主机使用叠加网络功能。然而,也就到此为止了。网络配置操作是受限的,而且到docker 0.7为止可以说这些手段都是人工的。尽管容器脚本化可以规模化,但是必须给网络定义增加预分配实例,每次提供容器时还需要额外步骤,这容易引起错误。
库控制受限:库已经成为任何容器会话的中心议题。公共库是最有价值的,因为他贡献了大量的预置容器,节省了许多的配置时间
。然而,在沙盒里使用它是有风险的。在不知道谁以及如何创建镜像的情况下,可能会存在任意数量的有意或无意的稳定性和安全性风险。对于企业来说,有必要建立和维护一个私有库,这个库的建立挑战不大,但管理是个问题。Docker为大型库的镜像管理提供了一个有限的元数据模型,确保未来实例如预期的能力受限,也没有叠加功能。
没有清晰的审计跟踪:提供容器是很简单的,但知道提供容器的时间、原因、方式以及提供方却不容易
。因此,在提供之后,用户并不掌握多少出于审计目的的历史。
运行实例的低可见性:如果没有经过深思熟虑的行动,实例提供后很难接触到运行容器的对象,也很难知道哪些应该出那里,哪些不应该出那里。
6. Docker环境安全
Docker的势头在过去的12个月里十分火热,很多人表示很少见如此能够吸引行业兴趣的新兴技术
。然而,当兴奋转化为实际部署时,企业需要注意Docker的安全性。
了解Docker的人都知道,Docker利用容器将资源进行有效隔离。因此容器相当于与Linux OS和hypervisor有着几乎相同的安全运行管理和配置管理级别。但当Docker涉及到安全运营与管理,以及具有保密性、完整性和可用性的通用控件的支持时,Docker可能会让人失望。
当Docker运行在云提供商平台上时,Docker安全性变得更加复杂
。需要知道云提供商正在做什么,或许用户正在于别人共享一台机器。
Docker虽然容器没有内置的安全因素,而且像Docker这样的新兴技术很难有比较全面的安全措施,但这并不意味着以后也不会出现。
7. 容器部署安全
也有专家将Docker安全问题的实质定位于配置安全,认为Docker的问题是很难配置一个安全的容器。虽然Docker的开发人员通过创建非常小的容器来降低攻击面,但问题在于大型企业内部在生产环境中运行Docker容器的员工需要有更多的可见性和可控性。
企业在部署数千或数万台Docker容器时,能够确保这些Docker容器都遵守企业安全策略进行配置是至关重要的事情
。
Docker为解决这个问题,就需要增加Docker容器部署的实时可见性,同时实施企业制定的安全策略。也有一些厂商为此推出解决方案,给运营商提供了实时可见性并帮助他们执行容器级别的虚拟基础设施的安全策略。
如果这份博客对大家有帮助,希望各位给恒川一个免费的点赞👍作为鼓励,并评论收藏一下⭐,谢谢大家!!!
制作不易,如果大家有什么疑问或给恒川的意见,欢迎评论区留言。