zoukankan      html  css  js  c++  java
  • 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
        • 国内镜像
          • 网易加速器:http://hub-mirror.c.163.com
          • 官方中国加速器:https://registry.docker-cn.com
          • ustc的镜像:https://docker.mirrors.ustc.edu.cn
          • daocloud:https://www.daocloud.io/mirror#accelerator-doc(注册后使用)
        • 仓库 
          • 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 验证
            [root@centos69-zjx ~]# 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
        •  CentOS7.x
          • uname -r 命令查看你当前的内核版本
          • 确保 yum 包更新到最新
            yum update
          • 卸载旧版本 
             yum remove docker  docker-common docker-selinux docker-engine
          • 安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
            yum install -y yum-utils device-mapper-persistent-data lvm2
          • 设置yum源
            yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
          • 查看所有仓库中所有docker版本,并选择特定版本安装
            yum list docker-ce --showduplicates | sort -r
          • 安装docker
            sudo yum install docker-ce
          • 启动并加入开机启动
            systemctl start docker
            systemctl enable docker
          • 验证安装是否成功
            docker version
          • 设置阿里云镜像加速地址
            sudo mkdir -p /etc/docker
            sudo tee /etc/docker/daemon.json <<-'EOF'
            {
              "registry-mirrors": ["https://k*****k.mirror.aliyuncs.com"]
            }
            EOF
            sudo systemctl daemon-reload
            sudo systemctl restart docker
  • 相关阅读:
    linux内核源码之基础准备篇
    GDB 自动化操作的技术-PYTHON
    GDB 调试PYTHON
    GCC onlinedocs
    深入CSS,让网页开发少点“坑”
    多款控件新版发布,新特性抢鲜知
    如何选择前端框架:ANGULAR VS EMBER VS REACT
    推荐10个很棒的AngularJS学习指南
    Top 15 不起眼却有大作用的 .NET功能集
    最全数据结构详述: List VS IEnumerable VS IQueryable VS ICollection VS IDictionary
  • 原文地址:https://www.cnblogs.com/zhujingxiu/p/10046669.html
Copyright © 2011-2022 走看看