1. 程式人生 > >Linux容器技術和docker

Linux容器技術和docker

資源隔離 多少 性能 空間 私有倉庫 隔離 系統 table sel

發展歷程: 容器技術最早出現在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的問題: 1、遷移困難 2、持久化困了 3、批量創建容器困難 Docker: Docker在一定程度上是LXC的增強版,早期的Docker使用LXC作為容器引擎,所以也可以說Docker是LXC的二次封裝發行版 目前docker使用的容器引擎為runC,其是容器運行時標準的實現之一 Docker使用鏡像的方式啟動容器,解決了LXC所面臨的問題 目前市面上所說的容器通常指Docker,其以成為事實上的工業標準 Docker與傳統虛擬機的區別: 1、docker直接構建在Linux操作系統之上,其使用的內核為當前宿主機的內核;虛擬機一般構建在虛擬機管理軟件之上,擁有獨立的內核 2、由於docker直接使用宿主機內核所以其性能接近宿主機性能;虛擬機使用自己的內核,但是其內核也是虛擬出來的所以需要進行兩級調度性能相對較差 3、docker使用內核的namespace進行用戶空間隔離,虛擬機使用獨立內核。虛擬機的隔離相對較好 4、docker相對虛擬機更加輕量,其他和部署更加方便快捷 5、每個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狀態

Linux容器技術和docker