一、Docker部署及基礎理論

一、Docker入門簡介linux

  Docker技術相似碼頭上看到的集裝箱,最先集裝箱沒有出現的時候,碼頭上有許多搬運的工人在搬運貨物,有了集裝箱之後,搬運貨物變得簡單,經過集裝箱的搬運模式更加單1、高效,將貨物打包在集裝箱裏面,能夠複製貨物之間相互影響。nginx

  若是要將貨物搬運到另外一個碼頭就須要裝運,經過集裝箱,能夠直接把它們運送到另外一個航艙內,並且徹底能夠保證裏面的貨物是總體地搬遷,而不會損壞貨物自己。docker

  而Docker虛擬化正是基於相似的原理,將本來複雜的環境打包成爲鏡像模塊,而後將模塊遷移到各個平臺,能夠快速地交付使用,從而減小了人工大量的干預。json

  Docker是一個開源的應用容器引擎,開發者使用打包他們的應用以及依賴包到一個可移植的容器中,而後發佈到如何流行的Linux機器上,進而實現虛擬化。centos

  容器是徹底使用沙箱機制的,並且互相之間不會有如何接口,幾乎沒有性能開銷,能夠很容易地在機器和數據中心運行,最重要的是,他們不依賴於如何語言、框架或包括系統。bash

  Docker虛擬化和傳統虛擬機(KVM、Xen等)方式的不一樣之處在於Docker虛擬化能夠在操做系統層面上直接實現App或者虛擬化,直接複用本地機器的操做系統,而傳統方式則須要在硬件的基礎上,虛擬GurstOS操做系統,而後在GuestOS操做系統上部署相關的App應用。服務器

Docker虛擬化實施有如下三個概念:架構

  • Docker鏡像:Docker鏡像是一個靜態模塊,與常見的ISO鏡像相似,是一個樣板,不能直接修改,能夠經過封裝生成;
  • Docker容器:基於Docker鏡像運行啓動的應用或系統,稱之爲一個Docker容器或Docker虛擬機;
  • Docker倉庫:Docker倉庫是存放Docker鏡像的地方,常見分爲公開倉庫和私有倉庫兩種形式;

Docker倉庫的用處:框架

  Docker倉庫是Docker鏡像的存儲倉庫。能夠推送鏡像到docker倉庫中,而後在docker客戶端,能夠從docker倉庫中搜索和拉取鏡像。性能

Docker容器是如何工做的:

  一個Docker容器包含了一個操做系統、用戶添加的文件和元數據(meta-data)。每一個容器都是從鏡像創建的,鏡像告訴Docker容器內包含了什麼,當容器啓動時運行什麼程序,還有許多配置數據。Docker鏡像是隻讀的,當Docker運行一個從鏡像創建的容器,它會在鏡像頂部添加一個可讀寫的層,應用程序能夠在這裏運行。

Docker用途:簡單配置、代碼流水管理、開發效率、應用隔離、服務器整合、多租戶、快速部署

二、Docker LXC及Cgroup

  Docker虛擬化的由來須要從Docker發展歷史來看,最先的Docker技術爲LXC+聯合文件系統(AUFS)組合。Docker0.9.0版本開始引入libcontainer能夠視做LXC的替代品,其中LXC負責資源管理,AUFS負責鏡像管理。而LXC包括Cgroup、Namespace、Chroot等組件,並經過Cgroups進行資源管理。

  Docker、LXC、Cgroup三者的關係是Cgroup在最底層落實資源管理。LXC在Cgroup上封裝了一層,Docker又在LXC封裝了一層。

  Cgroups最初的目標是爲資源管理提供一個統一的框架,整合現有的Cpuset等子系統,也爲將來開發新的子系統提供接口。

  Linux container容器能夠提供輕量級的虛擬化,以便隔離進程和資源,並且不須要提供指令解釋機制以及全虛擬化的其餘複雜性。容器有效地將由單個操做系統管理的資源劃分到獨立的組中,以便更好地在獨立的組之間平衡有衝突的資源使用需求。

三、Docker虛擬化特色

Docker虛擬化跟傳統虛擬化相比,有如下特色:

  • 操做啓動快,運行時的性能能夠獲取極大提高,管理操做(啓動、中止、開啓、重啓等)都是以秒或毫秒爲單位的;
  • 輕量級虛擬化,用戶會擁有足夠的「操做系統」,僅需添加或減少鏡像便可,單臺服務器上能夠部署100~1000個containers容器,而傳統虛擬化能虛擬10~20個虛擬機就很是不錯了;
  • 開源免費,成本低,由現代Linux內核支持並驅動;
  • 前景及雲支持,正在愈來愈受歡迎,各大主流公司都在推進Docker的快速交付;
  • 更簡單的管理,使用Docker只須要小小的修改,就能夠替代以往大量的更新工做,全部的修改都以增量的方式被分發和更新,從而實現自動化而且高效的管理;

四、Docker虛擬化原理

  Docker虛擬化中最核心部分爲Docker引擎,Docker引擎是一個C/S(client/server)機構的應用;

  Docker server是一個常駐進程,rest API實現了client和server間的交互協議 ,CLI實現容器和鏡像的管理,爲用戶提供統一的操做界面。Docker使用C/S架構,client經過接口與server進程通訊實現容器的構建、運行和發佈,client和server能夠運行在同一臺集羣,也能夠經過跨主機實現遠程通訊。

Docker鏡像做爲Docker中最基本的概念,有如下特性:

  • 鏡像分層:每一個鏡像都由一個或多個鏡像層組成;
  • 可經過在某個鏡像上加上必定的鏡像層獲得新鏡像(此過程能夠經過編寫DockerFile或基於容器Commit實現);
  • 每一個鏡像層擁有惟一鏡像ID;
  • 鏡像在存儲和使用時共享相同的鏡像層(根據ID),因此在Pull鏡像時,已有的鏡像層會在自動跳過下載;
  • 每一個鏡像層都是隻讀的,即便啓動成容器,也沒法對其真正的修改,修改只會做用於最上層的容器層。

Docker容器,能夠理解爲一個或多個運行進程,而這些運行進程將佔有相應的內存、相應的CPU計算資源,則經過Docker鏡像的鏡像層文件來提供。

基於每一個鏡像的json文件,Docker能夠經過解析Docker鏡像的驚悚文件,獲知應該在這個鏡像之上運行什麼樣的進程,應該爲進程配置怎樣的環境變量,Docker守護進程實現了靜態向動態的轉變。

五、Docker安裝配置-CentOS7.X系列安裝Docker軟件

sed -i '/SELINUX/s/enforcing/disabled/g' /etc/selinux/config setenforce 0 yum -y install epel-release yum -y install docker* systemctl start docker

報錯:

Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.

解決辦法:

vi /etc/sysconfig/docker

systemctl start docker systemctl enable docker ps -ef |grep docker

 

Docker下載加速,默認docker下載是從國外去下載,可是下載速度慢,全部咱們 這邊使用國內的:

cat > /etc/docker/daemon.json <<EOF { "registry-mirrors": [ "https://registry.docker-cn.com", "https://dockerhub.azk8s.cn", "https://reg-mirror.qiniu.com" ] } EOF systemctl restart docker

六、Dockers必備命令

公共倉庫Nginx和CentOS鏡像下載以及本地導入CentOS鏡像,執行以下命令

docker pull centos             :Docker下載CentOS鏡像

docker pull nginx             :Docker下載Nginx鏡像

本地導入鏡像:

格式:cat 本地容器快照名 | docker import-自定義容器名:自定義標記名

docker version             :查看Docker版本

docker info             :查看當前信息

docker search centos           :搜索可用Docker鏡像

docker search -s 500 nginx           :搜索星級爲500以上的鏡像

docker pull docker.io/nginx           :下載nginx鏡像

docker images             :查看當前Docker全部鏡像

啓動Docker鏡像:

-i:表示交互輸入 -t:表示打開終端 -d:表示後臺啓動

docker run -i -t centos /bin/bash

進入Docker容器:

docker exec -it a9ca644fd04f /bin/bash       :紅色部分是容器的ID

退出Docker容器:

(1)exit或者ctrl+d :退出並中止容器

(2)先按ctrl+p再按ctrl+q :退出僞終端,容器後臺運行

docker ps         :查看容器,-l得到最後一個容器的ID,-a查看全部的容器

docker start id       :啓動Docker容器,能夠利用docker ps查看容器,而後輸入iD

docker stop id         :關閉Docker容器

docker save -o centos-7.2.tar centos:latest         :存儲鏡像

docker rm id     :刪除Docker容器,若是刪除多個容器則須要使用空格隔離便可~!

docker rmi id               :刪除Dokcer鏡像

docker load < centos-7.2.tar           :導入容器快照

docker export -o centos-7.2.test.tar container_id   :Docker導出鏡像

cat centos-7.2.test.tar | docker import - centos-7.2.test :本地導入Docker鏡像,紅色爲鏡像名,須要自定義

docker run -p 5500:80 -it nginx /bin/bash       :將宿主機5500端口映射給容器的80端口

nginx                        :啓動nginx服務

圖片顯示

相關文章
相關標籤/搜索