Linux容器技術和docker

發展歷程:
    容器技術最先出如今FreeBSD上叫作 jail,將一個進程放入jail中運行,無論這個進程在其中發生怎樣的錯誤都不會影響到系統上其餘進程的運行
    jail技術在Linux中的實現叫作vserver,vserver所實現的功能體現爲chroot

namespaces:
    容器技術出現的主要目的是爲了"資源隔離"
    資源隔離包括:
        名稱            描述                內核版本
        UTS         主機名和域名的隔離        2.6.19
        Mount       文件系統的隔離           2.4.19
        IPC         進程間通訊隔離           2.6.19
        PID         進程編號隔離             2.6.24
        User        用戶空間隔離             3.8
        Network     網絡空間隔離             2.6.29

    爲了支持容器技術,Linux在內核中經過namespaces原生支持這6種資源隔離,而且直接經過系統調用對外進行輸出
    目前Linux上所謂的容器技術就是依靠namespaces技術實現的

cgroups 用於控制每一個namespace中的資源分配:
    blkio           塊設備io
    cpu             cpu
    cpuacct         cpu資源使用報告
    cpuset          多處理器平臺上的cpu集合
    devices         設備訪問
    freezer         掛起或恢復任務
    memory          內存用量及報告
    perf_event      對cgroup中的任務進行統一性能測試
    net_cls         cgroup中的任務建立的數據報文的類別標識符

LXC(LinuX Container):
    有了namespaces和cgroups那麼Linux已經擁有了實現容器技術的前提,這時若是想要使用容器技術能夠經過寫代碼調用系統調用實現容器技術。
    可是有多少用戶能夠寫代碼實現容器技術那? 因此LXC應運而生,他使用戶能夠經過一組工具完成容器的建立

    lxc中有個命令叫作 lxc-create 用於根據模板建立容器,在模板中定義須要安裝的容器系統發行版以及一系列的安裝步驟

    LXC的問題:
        一、遷移困難
        二、持久化困了
        三、批量建立容器困難

Docker:
    Docker在必定程度上是LXC的加強版,早期的Docker使用LXC做爲容器引擎,因此也能夠說Docker是LXC的二次封裝發行版
    目前docker使用的容器引擎爲runC,其是容器運行時標準的實現之一
    Docker使用鏡像的方式啓動容器,解決了LXC所面臨的問題
    目前市面上所說的容器一般指Docker,其以成爲事實上的工業標準

Docker與傳統虛擬機的區別:
    一、docker直接構建在Linux操做系統之上,其使用的內核爲當前宿主機的內核;虛擬機通常構建在虛擬機管理軟件之上,擁有獨立的內核
    二、因爲docker直接使用宿主機內核因此其性能接近宿主機性能;虛擬機使用本身的內核,可是其內核也是虛擬出來的因此須要進行兩級調度性能相對較差
    三、docker使用內核的namespace進行用戶空間隔離,虛擬機使用獨立內核。虛擬機的隔離相對較好
    四、docker相對虛擬機更加輕量,其餘和部署更加方便快捷
    五、每一個docker容器通常只運行一個進程,一個虛擬機一般運行多個進程

Docker術語:
    鏡像(Image)
          只讀模板,用於建立docker容器
    容器(Container)
          實例化的鏡像,在只讀層上增長了一層可寫層,容器能夠啓動,中止,刪除和修改每一個容器都是相互隔離的
    倉庫(Repository)
          集中存放鏡像的地方,倉庫分爲公開倉庫(Public)和私有倉庫(Private)兩種形式
          世界上最大的公開倉庫是Docker Hub,國內的公開倉庫Docker Pool等,相似於yum倉庫

          用戶能夠在本地網絡內建立一個私有倉庫
          用戶建立的鏡像能夠push到公有或者私有倉庫,若是須要在另一臺機器上使用這個鏡像時候,只須要從倉庫上pull下來就能夠了

安裝 docker (要求內核 3.10以上):
    ubuntu 16.04系統:
        升級source列表並保證https和ca證書成功安裝
            sudo apt-get update
            sudo apt-get install apt-transport-https ca-certificates

        增長新的GPG密鑰
            sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D

        新增或編輯source列表裏的docker.list文件
            sudo vim /etc/apt/sources.list.d/docker.list
                deb https://apt.dockerproject.org/repo ubuntu-xenial main       #添加內容

        安裝linux-image-extra(額外的內核模塊)
            sudo apt-get install linux-image-extra-$(uname -r)

        安裝docker
            sudo apt-get update
            sudo apt-get install docker-engine
            sudo service docker start

    centos 7系統:
        https://download.docker.com/linux/centos/7/x86_64/stable/Packages/          #docker RPM包下載路徑
        yum -y localinstall docker-ce-selinux-17.03.0.ce-1.el7.centos.noarch.rpm docker-ce-17.03.0.ce-1.el7.centos.x86_64.rpm
        curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://8ad7943c.m.daocloud.io  #進行鏡像下載加速
        systemctl start docker              #啓動docker
        systemctl status docker             #查看docker狀態
相關文章
相關標籤/搜索