Docker初探

Posted zhujingxiu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker初探相关的知识,希望对你有一定的参考价值。

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

  1. 应用场景

    • Web 应用的自动化打包和发布。

    • 自动化测试和持续集成、发布。

    • 在服务型环境中部署和调整数据库或其他的后台应用。

    • 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境
  2. 作用

    • 解决了运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术
      • 简化程序
      • 节省开支
    • 早前的虚拟技术
      • 虚拟机
        • 资源占用多
        • 启动慢
        • 冗余步骤多
    • 容器虚拟化技术 LinuxContainers
      • 是对进程的隔离,而非模拟一个完整的系统
      • 可以将软件运行所需的所有资源打包到一个隔离的容器
      • 无需捆绑一整套操作系统,只需软件工作所需的库资源和设置
    • 虚拟机与容器的比较
      • 传统虚拟机技术上虚拟一套硬件后,在其上运行一个完整的操作系统,在系统上再运行所需的应用进程
      • 容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,也没有进行硬件虚拟。因此容器更为轻便
      • 每个容器间相互隔离,每个容器都有自己的文件系统,容器之间进程不会相互影响,能区分计算资源
    • 开发自运维 DevOps
      • 更快速的应用交付和部署
      • 更便捷的升级和扩缩容
      • 更简单的系统运维
      • 更高效的计算资源利用
      • 一次封装,随处运行
    • 底层原理
      • C-S结构,Docker守护进程运行在主机上。通过Socket连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器
      • 容器是 一个运行时环境,即集装箱
      • Docker 比虚拟机有更少的抽象层。Docker不需要Hypervisor实现硬件资源虚拟化,运行在Docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU,内存利用率上Docker将会在效率上有明显的优势
      • Docker 利用的是宿主机的内核,而不需要GuestOS。因此,新建一个容器时,Docker无需和虚拟机一样重新加载操作系统内核,从而避免引寻,加载操作系统内核这个费时费资源的过程,当新建一个虚拟机时,虚拟机需要加载GuestOS,这个新建过程是分钟级别的。而Docker由于直接利用宿主机的操作系统,则省略了这个过程,因此新建一个Docker只需几秒技术分享图片
  3. 安装

    • 前提条件
      • CentOS仅发行版中的内核支持Docker
      • CentOS7,要求系统为64位,系统内核版本为3.10以上
      • CentOS6.5或更高的版本,要求系统为64位,系统内核版本为2.6.32-431或以上
      • 相关命令
        uname -r
        
        cat /etc/redhat-release
        
        lsb_release -a (centos7不支持)
    • 下载
      • 官网 www.docker.com
      • 中文网 docker-cn.com
      • 仓库 
        • hub.docker.com
      • 版本
        • 社区版 Docker CE
        • 企业版
    • 基本组成
      • 镜像 image
        • Docker镜像是由文件系统叠加而成。最低端是一个引导文件系统,即bootfs。当一个容器启动后,它将会被移到内存中,而引导文件系统则会被卸载,以留出更多的内存供initrd磁盘镜像使用
        • Docker镜像的第二层是root文件系统rootfs,它位于引导文件系统之上。rootfs可以是一种或多种操作系统
        • 在Docker里,root文件系统永远只能是只读状态,并且Docker利用联合加载技术又会在root文件系统层上加载更多的只读文件系统。联合加载指的是一次同时加载多个文件系统,但是在外面看起来只能看到一个文件系统。联合加载会将各层文件系统叠加到一起,这样最终的文件系统会包含所有底层的文件和目录
        • 当从一个镜像启动容器时,Docker会在该镜像的最顶层加载一个读写文件系统
        • 当Docker第一次启动一个容器时,初始的读写层是空的。当文件系统发生变化时,这些变化都会应用到这一层上。如果修改一个文件,这个文件首先会从该读写层下面的只读层复制到该读写层。该文件的只读版本依然存在,但是已经被读写层中的该文件副本所隐藏
        • 通常这种机制被称为写时复制,这也是使Docker如此强大的技术之一。每个只读镜像层都是只读的,并且以后永远不会变化。当创建一个新容器时,Docker会构建出一个镜像栈,并在栈的最顶端添加一个读写层。这个读写层再加上其下面的镜像层以及一些配置数据,就构成了一个容器
      • 容器 container
        • 用镜像创建的运行实例
        • 可以被启动,开始,停止,删除。每个容器都是相互隔离,保证安全的平台
        • 其定义与镜像几乎一致,也是一堆层的统一视角,唯一的区别在于容器的最上面那一层是可读可写的
      • 仓库 repository
        • 集中存放镜像文件的场所
        • 仓库(repository)和仓库注册服务器(registry)是由区别的。仓库注册服务器上往往存放着多个仓库,每个仓库中又包含多个镜像,每个镜像有不同的标签
        • 分为公开仓库(public)和私有仓库(private)。国内的公开仓库包括阿里云,网易云等
    • 安装步骤
      • CentOS6.x
        • yum install -y epel-release
        • yum install -y docker-io
        • 配置文件 /etc/sysconfig/docker
        • 启动后台服务 service docker start
        • docker version 验证
          [[email protected] ~]# docker version
          Client version: 1.7.1
          Client API version: 1.19
          Go version (client): go1.4.2
          Git commit (client): 786b29d/1.7.1
          OS/Arch (client): linux/amd64
          Server version: 1.7.1
          Server API version: 1.19
          Go version (server): go1.4.2
          Git commit (server): 786b29d/1.7.1
          OS/Arch (server): linux/amd64

简化程序

以上是关于Docker初探的主要内容,如果未能解决你的问题,请参考以下文章

基于 Jenkins+Docker+Git 的CI流程初探

初探JSP与LEeclipse

Docker的使用初探:常用指令说明

Docker初探:利用Docker运行samtools

Docker Swarm集群初探

docker-swarm初探