前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker 学习系列一之原理

Docker 学习系列一之原理

作者头像
吕海峰
发布2018-04-03 15:16:09
7210
发布2018-04-03 15:16:09
举报
文章被收录于专栏:Brian

Docker 认识

在谈及Docker时,不得不牵扯到一个现在很重要的一个领域:云计算。云计算是一种资源的服务模式,该模式可以按需的从可配置计算资源共享池中获取所需的资源,并且资源能快速供应和释放,利于资源管理和资源的充分利用,说白了就是充分利用硬件资源并节省成本。 云计算分为IaaS、PaaS和SaaS三层服务

  • Iaas 基础设施即服务,为基础设施运维人员服务提供计算、存储和网络等资源。
  • PaaS 平台即服务,为应用开发人员提供支撑应用运行所需的软件运行时环境、相关工具与服务(数据库、监控、日志等)。
  • SaaS 软件即服务,为一般用户提供一整套软件系统,用户只需通过浏览器和应用客户端就能访问部署在云上的应用服务。

劣势:IaaS的发展主要是以KVM、Xen、Vmware等重量级虚拟机为最小力度的资源调度单位,一般比较笨重。因为虚拟机本身运行需要占用大量宿主机的系统资源并且启动一个虚拟机相对缓慢,调度分发缓慢等一系列问题。PaaS在IaaS发展而来,PaaS在应用架构选择、支持的软件环境服务等方面有很大的限制,这样就造成了应用于平台无法解耦、应用运行时环境局限性强、运维人员控制力下降等各种问题。如何把虚拟机轻量级化?OpenVZ、VServer、LXC为代表的容器类虚拟机是一种内核虚拟化技术,与宿主机运行在相同的linux内核,不需要指令集模拟,性能消耗费朝向,是非常轻量级的虚拟化技术。Docker就是采用LXC的,Docker是以Docker容器为资源分割和调度的基本单位,封装整个软件运行时环境,为开发者和系统管理员设计的,用于构建、发布和运行分布式应用的平台。他是一个跨平台、可移植且简单易用的容器解决方案。

Docker 深入

Docker是一个C/S的架构“软件”,以Docker Daemon作为Server端(在宿主机以守护进程形式运行)。Docker Client既可以采用以指令方式也可以采用RESTful API方式和Server通信。 Docker最主要的两个核心概念是镜像和容器,它的工作流程如下图所示:

Docker WorkFlow
Docker WorkFlow

用户只关心的是自己的应用在docker上能直接运行,至于怎么安装软件、运行在何种操作系统和版本等问题,都不应该是用户关心的。所以docker就把软件和它依赖的环境(包括操作系统、共享库、配置文件等)都打包成一个,以虚拟机的形式存放到仓库里,就好像GitHub里的代码一样。当大家想使用和部署软件时,只需要从仓库里面取出来即可。但是这种部署有一些问题?

1.如果每一个软件都要依赖操作系统,操作系统文件很大,运行事小下载和管理维护很费事?Docker采用了分层概念,把一个app分为多层。比如:操作系统是第一层也是最底层,依赖的库和第三方软件是第二层,应用的软件包和配置文件是第三层,如果两个应用操作系统相同即可共享底层。比如:app1和app2的操作系统版本一致,当安装运行app1时需要下载操作系统层,安装app2时则不需要下载操作系 统,只需下载它所依赖包和自身的软件包。 2.共享层存在冲突问题如何解决?针对同一个os的app1和app2,大多数是采用不同的操作系统配置。如何解决共享层的冲突问题?Docker对分层进行了高度抽离和扩展+写时拷贝来解决策略来解决该问题。对加入的分层采用了优先级的概念,计算机知识都是相同的,和进程的调度、作业的调度都是类似的。只不过docker的优先级是作用在它自己抽象实体层里,而进程和作业的优先级需要os设置。Docker规定:层次是有优先级的,上层和下层的文件和配置相同时,上层覆盖下层,以上层为准。Docker为每个app预留一个优先级最高的空白层,如果想修改文件只需要把文件拷贝到优先级最高的空白层,这样既能保证底层资源的稳定和共享,又能对每个app都可以进行高效的扩展。Docker采用分层和写时拷贝策略,相对于重量级的虚拟机(KVM、xen等)性能消耗非常小,基本上和一个普通的进程差不多。如下图所示:

Docker Apps
Docker Apps

Docker 镜像和容器

在Docker本地仓库或官方仓库里,只要app有完整的文件系统和程序包,没有动态生成文件的需求。当从仓库下载到宿主机上运行对外提供的服务时,有可能修改文件,那么需要在优先级高的空白层用于写时拷贝。那么如何区分这两种不同的状态呢?Docker采用了镜像和容器来做了不同的区分。

  • 镜像:在本地仓库和官方Hub都是以镜像的形式存储的,镜像是一份曾、可以被LXC/libcontainer理解的存储格式。所以docker的应用都要以镜像的形式存储到仓库中,供大家使用。
  • 容器:把应用从仓库中下载到本地,以镜像为模板,在一个虚拟机中启动应用。这个虚拟机就是容器。

如下图所示:

Docker Image and Container
Docker Image and Container

Docker 安装

安装Docker并启动

代码语言:javascript
复制
#安装
yum install docker-io
#启动
service docker start
#检查docker进程是否启动
ps aux | grep docker

Docker数据目录转移到大的磁盘分区

代码语言:javascript
复制
service docker stop
mkdir /data/dockerData
mv /var/lib/docker /data/dockerData
ln -s /data/dockerData/docker /var/lib/docker
service start docker

升级Docker

代码语言:javascript
复制
service stop docker
wget https://....../docker.....
tar xf docker.tgz
cp docker/docker /usr/bin/docker
chmod +x /usr/bin/docker
service docker start

修改Docker监听内网的配置文件

代码语言:javascript
复制
#配置文件位于**/etc/sysconfig/docker**
emacs /etc/sysconfig/docker
#找到**--insecure-registry**,它指定了内部Docker仓库的IP和端口,**-dns**指定内部DNS服务器的地址。
--insecure-registry 10.11.10.11:123 -dns 10.11.11.11
#修改sysctl.conf
emacs /etc/sysctl.conf
#增加如下内容
net.ipv4.ip_forward=1
#配置生效
sysctl -p

配置网桥

Docker默认采用的网络配置是NAT模式,如果要是用网桥配置,要如下配置:

代码语言:javascript
复制
#宿主机配置网桥
#备份网络配置
cp /etc/sysconfig/network-scripts/ifcfg-eth1 /opt
emacs /etc/sysconfig/network-scripts/ifcfg-eth1
#修改如下内容
DEVICE='eth1' # 你的网卡设备名称
HWADDR=00:00S..... #网卡MAC地址
ONBOOT=yes #启动时配置生效
BRIDGE=br100 #网桥名称
#修改网桥配置
emacs /etc/sysconfig/network-scrpts/ifcfg-br100
DEVICE='br100'
TYPE=Bridge
BOOTPROTO=static
ONBOOT=yes
IPADDR='ip address' # 宿主机的IP
NETMASK='XX'#宿主机的子网掩码
GATEWAY='XX'#宿主机的网关
#重启生效
/etc/init.d/network restart

更新相应软件

代码语言:javascript
复制
# 安装pipework脚本,用于给container指定IP。
wget -O /usr/bin/pipework https://xxxxx
chmod +x /usr/bin/pipework
# 更新iproute
yum install iproute
service start docker

总结

最近在学习Docker,深深感受到Docker的强大和优势。不仅是解决问题还是设计思路都值得学习。不知道Docker在安全性方面如何做的?由于是采用Linux操作系统的内核的一部分组件来实现的,那么一些交互和传输就得依靠Linux 内核组件,随之带来的安全性如何确保非常安全个人觉得有待思考。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-03-11,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Docker 认识
  • Docker 深入
    • Docker 镜像和容器
    • Docker 安装
      • 安装Docker并启动
        • Docker数据目录转移到大的磁盘分区
          • 升级Docker
            • 修改Docker监听内网的配置文件
              • 配置网桥
                • 更新相应软件
                • 总结
                相关产品与服务
                容器镜像服务
                容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档