初识docker

docker的应用:

  • 对于大企业而言,为了保证产品的高可用性,会将自身的产品部署在多个云平台,但每个云平台都有各自独立的资源管理策略,由此产生的产品迁移成本会比较高昂。docker的出现,打破了这种局面。docker弥合了各个云平台之间的差异,同当年的Java一样,docker屏蔽硬件层的差异,提供了统一的用户应用层。通过Docker,企业用户所提供的产品可以自由地在“混合云”之间移动,而这种迁移所付出的成本却是极低的。
  • 对于整个行业而言,docker的出现,推动了Devops的发展。在没有Docker之前,企业内部为了提高产品开发效率,降低各部门之间的沟通成本,制定了很多的流程和规范,但结果往往都不尽如人意。究其原因就在于无论流程和规范多么严谨,总归是需要有人来执行,但牵涉到的部门和人员越多,出错的概率就越高,因此带来的沟通成本就无法降低。Docker能作为一个封闭的运行环境在各部门之间流转,这无形当中就降低了各部门之间的沟通成本。只要各部门使用相同的数据镜像,就不会出现环境差异,同样也就不会出现代码运行差异。这使得在企业内部,产品开发团队可以将精力最大化地集中于产品本身,而不是流程。

1、docker之LXC

LXC是docker的运行基础,仿照linux内核的CGroups和NameSpaces来管理系统资源(CPU、内存、I/O、网络等)。CGroups可以限制、记录、调整进程组所使用的物理资源。Namespaces则是另外一个重要的资源隔离机制。Namespaces将进
程、进程组、IPC、网络、内存等资源都变得不再是全局性资源,而是
将这些资源从内核层面属于某个特定的Namespace。

LXC就是基于Linux内核通过调用CGroups和Namespaces,来实现
容器轻量级虚拟化的一项技术,与此同时,LXC也是一组面向Linux内
核容器的用户态API接口。用户通过LXC提供的资源限制和隔离功能,
可以创建一套完整并且相互隔离的虚拟应用运行环境。

2、docker之AUFS

首先我们将思路切换到Linux启动阶段。典型的Linux启动时,首先加载bootfs(Boot File System)目录。这个目录里面包括Bootloader和kerenlBootloader用来加载启动kerenl。

当kerenl成功加载到内存中后,bootfs就会释放掉,kerenl随之开始加载rootfs。rootfs(Root File System)包含的是Linux系统中标准的/dev、/proc、/bin、/etc等文件。因为rootfs是后续kerenl启动的基础,对于kerenl来说异常重要,因此此时kerenl将Rootfs加锁—设为readonly。在只读权限下,kerenl进行一系列的检查操作。当kerenl确认rootfs包含的文件正确无误后,将readonly改为readwrite(可读可写),以后用户就可以按照正确的权限对这些目录进行操作了。

说到这里,就轮到到AUFS登场了。当Docker利用LXC虚拟化出来一个容器之后,就相当于购买了一台裸机,有内存、CPU、硬盘,但没有操作系统。Docker参考Linux的启动过程,将一个readonly权限的bootfs挂载到容器文件系统中,然后通过AUFS,再将readonly权限的rootfs添加到bootfs之上,当rootfs检查完毕之后,再将用户所要使用的文件内容挂载到rootfs之上,同样是readonly权限。

每次挂载一个FS文件层,并且每层之间只会挂载增量(在这里大家可以借助于SVN进行理解,相当每个FS层都是SVN提交上去的数据增量)。这些文件层就是堆栈式文件系统中所保存的数据。将不同的文件层挂载到同一个文件系统中的文件系统,就是联合文件系统;而AUFS就是用来管理、使用这些文件层的文件系统,因此也称之为高级多层次统一文件系统(Advanced Multi Layered Unification Filesystem)。

但是每个FS层都是readonly权限,那么容器内部如何向这些文件写入数据呢?其实当Docker利用AUFS加载完最高一层之后,会在最上面再添加一个FS层,而这个层是readwrite权限。容器内部的应用,对当前文件系统所有的写操作(包括删除)都会保存在这个FS层当中,而当容器向Docker发出commit命令后,Docker会将这个FS层中的数据作为单独一个文件层保存到AUFS之中。而一个镜像(image)就可以理解为:特定FS层的集合。所以可以看出镜像的层次关系,处于下层的image是上层image的父类,而没有父类image的就是baseimage。因此需要从image启动container时,Docker会依次加载baseimage和父类image,而用户所有的操作就都保存在最高层的readwrite的layer中。

通过将镜像“分隔”为AUFS的文件层,使得所有容器都可以共享文件层,且不会发生写冲突。但在Docker中,所有的镜像都是只读的,所有的镜像也都不保存用户信息,只会用于新建和复制。而对于容器而言,其所看到的所有文件都是可读写的,只不过所有的写操作都被保存在最上层的文件层当中。

Docker正是通过AUFS的这些特性,解决了容器初始化和写时复制问题,所以Docker选择AUFS作为其第二个核心组件。

3、安装docker

Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看你的CentOS 版本是否支持 Docker 。通过 uname -r 命令查看你当前的内核版本:

uname -r

初步安装和启动docker

yum update -y
yum -y install docker
systemctl start docker

设置镜像

vi /etc/docker/daemon.json

{
  "registry-mirrors": ["https://aj2rgad5.mirror.aliyuncs.com"]
}

开放管理端口映射

vim /lib/systemd/system/docker.service

#查找ExecStart=/usr/bin/dockerd,并替换为:

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock -H tcp://0.0.0.0:7654

#2375是管理端口,7654是备用端口

#在/erc/profile中写入docker管理端口

export DOCKER_HOST=tcp://0.0.0.0:2375

source /erc/profile

重启docker

systemctl daemon-reload
systemctl restart docker.service

拉取镜像

docker pull hello-world

测试docker是否正常安装和运行

docker run hello-world

在这里插入图片描述

over!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值