1.docker簡介及安裝

1、 docker簡介mysql

   1. Docker是什麼?linux

           Docker的英文本意是「搬運工」,在程序員的世界裏,Docker搬運的是集裝箱(Container),集裝箱裏裝的是任 意類型的App,開發者經過Docker能夠將App變成一種標準化的、可移植的、自管理的組件,能夠在任何主流 系統中開發、調試和運行。 說白了,docker是一種用了新穎方式實現的輕量級虛擬機,相似於VM,可是在原理和應用上和VM的差異仍是很大 的.而且docker的專業叫法是應用容器(Application Container)。nginx

   2.爲啥要用容器?程序員

         應用容器是個啥樣子呢,一個作好的應用容器長得就像一個裝好了一組特定應用的虛擬機同樣,好比我如今想用 mysql,那我就找個裝好了mysql的容器就能夠了,而後運行起來,我就能使用mysql了。sql

         爲啥不能直接安裝一個mysql?安裝一個SQL Server也能夠啊,但是有的時候根據每一個人電腦的不一樣,在安裝的時候 可能會報出各類各樣的錯誤,萬一你的機器中毒了,你的電腦掛了,你全部的服務都須要從新安裝.docker

        可是有了docker, 或者說有了容器就不一樣了,你就至關於有了一個能夠運行起來的虛擬機,只要你能運行容器,mysql的配置就省了.而 且若是你想換個電腦,直接把容器」端過來」就可使用容器裏面的服務。數據庫

        Docker 基於Go語言開發,代碼託管在Github上,並遵循Apache 2.0 開源協議。json

        Docker 容器能夠封裝任何有效 負載,幾乎能夠在任何服務器之間進行一致性運行。換句話說,開發者構建的應用只需一次構建便可多平臺運 行。運營人員只需配置他們的服務,便可運行全部的應用。vim

       如果利用容器的話,那麼開發直接在容器裏開發,測試的時候把整個容器給測試,測好了把測試後容器再上線就好 了.經過容器,整個開發,測試和生產環境能夠保持高度一致。後端

       此外容器也VM同樣具備必定得隔離性,各個容器之間的數據和內存空間相互隔離,能夠保證必定的安全性。

      Hyper-V、KVM和Xen等虛擬機管理程序都「基於虛擬化硬件仿真機制。這意味着,它們對系統要求很高.然而,容器卻使用共享的操做系統。

      這意味着它們在使用系統資源方面比虛擬機管理程序要高效得多。容器不是對硬 件進行虛擬化處理,而是駐留在一個Linux實例上。 Docker能夠解決虛擬機可以解決的問題,同時也可以解決 虛擬機因爲資源要求太高而沒法解決的問題。

2、爲何要使用docker?

         1 、快速交付應用程序

                 開發者使用一個標準的 image 來構建開發容器,開發完成以後,系統管理員就可使用這個容器來部署代碼

                 docker能夠快速建立容器,快速迭代應用程序,並讓整個過程可見,使團隊中的其餘成員更容易理解應用程 序是如何建立和工做的。

                 docker容器很輕!很快!容器的啓動時間是次秒級的,節約開發、測試、部署的時間

       2 、更容易部署和擴展

                docker容器能夠在幾乎全部的環境中運行,物理機、虛擬機、公有云、私有云、我的電腦、服務器等等。

                docker容器兼容不少平臺,這樣就能夠把一個應用程序從一個平臺遷移到另一個。

       三、效率更高

                docker容器不須要 hypervisor ,他是內核級的虛擬化。

       4 、快速部署也意味着更簡單的管理

                一般只須要小小的改變就能夠替代以往巨型和大量的更新工做。

                Docker 的經常使用案例包括:

                            自動打包和部署應用

                            建立輕量、私有的 PaaS 環境

                            自動化測試和持續集成/部 署

                            部署並擴展 Web 應用、數據庫和後端

3、docker和vm比較優點

         1. 啓動速度快,容器一般在一秒內能夠啓動.而VM要好久.

         2. 資源利用率高,一臺普通服務器能夠跑上千個容器,而跑VM就。。。。。。

         3. 性能開銷小,VM須要額外的CPU和內存來完成OS的功能,這一部分佔據了額外的資源

        

            可見容器是在操做系統層 面上實現虛擬化,直接複用本地主機的操做系統,而傳統方式則是在硬件層面實現

 

4、 Docker優點和劣勢

         做爲一種新興的虛擬化方式,Docker 跟傳統的虛擬化方式相比具備衆多的優點。

        首先,Docker 容器的啓動可 以在秒級實現,這相比傳統的虛擬機方式要快得多。

       其次,Docker 對系統資源的利用率很高,一臺主機上可 以同時運行數千個 Docker 容器。

       容器除了運行其中應用外,基本不消耗額外的系統資源,使得應用的性能很 高,同時系統的開銷儘可能小。

       傳統虛擬機方式運行 10 個不一樣的應用就要起 10 個虛擬機,而 Docker 只須要啓 動 10 個隔離的應用便可。

 1.,Docker 在以下幾個方面具備較大的優點。

            1.更快速的交付和部署

                 對開發和運維(devop)人員來講,最但願的就是一次建立或配置,能夠在任意地方正常運行。開發者可使 用一個標準的鏡像來構建一套開發容器,開發完成以後,運維人員能夠直接使用這個容器來部署代碼。 Docker 能夠快速建立容器,快速迭代應用程序,並讓整個過程全程可見,使團隊中的其餘成員更容易理解應用程序是 如何建立和工做的。 Docker 容器很輕很快!容器的啓動時間是秒級的,大量地節約開發、測試、部署的時 間。

           2.更高效的虛擬化

               Docker 容器的運行不須要額外的 hypervisor 支持,它是內核級的虛擬化,所以能夠實現更高的性能和效率。

          3.更輕鬆的遷移和擴展

              Docker 容器幾乎能夠在任意的平臺上運行,包括物理機、虛擬機、公有云、私有云、我的電腦、服務器等。這 種兼容性可讓用戶把一個應用程序從一個平臺直接遷移到另一個。

         4.更簡單的管理

            使用 Docker,只須要小小的修改,就能夠替代以往大量的更新工做。全部的修改都以增量的方式被分發和更 新,從而實現自動化而且高效的管理。

     對比傳統虛擬機總結

          

 

5、Docker 的體系結構

        docker使用C/S 架構,docker daemon 做爲 server 端接受 client 的請求,並處理(建立、運行、分發容器),

       他們能夠運行在一個機器上,也經過 socket或者 RESTful API 通訊 Docker daemon 通常在宿主主機後臺運行。

       Docker client以系統命令的形式存在,用戶用docker命令來跟 docker daemon 交互。

       

Docker 內部:

          要理解 Docker 內部構建,須要理解如下三種部件:

               Docker 鏡像 - Docker images Docker 倉庫 - Docker registeries Docker 容器 - Docker containers

      1.Docker 鏡像

           Docker 鏡像是 Docker 容器運行時的只讀模板,鏡像能夠用來建立 Docker 容器。每個鏡像由一系列的層 (layers) 組成。Docker 使用UnionFS(聯合文件系統)來將這些層聯合到單獨的鏡像中。

          UnionFS容許獨立文件 系統中的文件和文件夾(稱之爲分支)被透明覆蓋,造成一個單獨連貫的文件系統。正由於有了這些層的存在, Docker 是如此的輕量。

           當你改變了一個 Docker 鏡像,好比升級到某個程序到新的版本,一個新的層會被創 建。所以,不用替換整個原先的鏡像或者從新創建(在使用虛擬機的時候你可能會這麼作),只是一個新的層被 添加或升級了。

          如今你不用從新發布整個鏡像,只須要升級,層使得分發 Docker 鏡像變得簡單和快速。 每一個 docker都有不少層次構成,docker使用 union file systems 將這些不一樣的層結合到一個image 中去。

         例如: centos鏡像中安裝nginx,就成了nginx鏡像」,其實在此時Docker鏡像的層級概念就體現出來了。底層一個 centos操做系統鏡像,上面疊加一個ngnx層,就完成了一個nginx鏡像的構建。

         層級概念就不難理解,此時咱們 通常centos操做系統鏡像稱爲nginx鏡像層的父鏡像。

     2.Docker倉庫

          Docker 倉庫用來保存鏡像,能夠理解爲代碼控制中的代碼倉庫。一樣的,Docker 倉庫也有公有和私有的概 念。

         公有的 Docker 倉庫名字是 Docker Hub。Docker Hub 提供了龐大的鏡像集合供使用。

         這些鏡像能夠是自 己建立,或者在別人的鏡像基礎上建立。 倉庫是集中存放鏡像文件的場所。

         有時候會把倉庫和倉庫註冊服務器 (Registry)混爲一談,並不嚴格區分。

          實際上,倉庫註冊服務器上每每存放着多個倉庫,每一個倉庫中又包含了 多個鏡像,每一個鏡像有不一樣的標籤(tag)。 倉庫分爲公開倉庫(Public)和私有倉庫(Private)兩種形式。

         最大的公開倉庫是 Docker Hub,存放了數量龐 大的鏡像供用戶下載。國內的公開倉庫包括 Docker Pool等,能夠提供大陸用戶更穩定快速的訪問。 固然,用戶也能夠在本地網絡內建立一個私有倉庫。

        當用戶建立了本身的鏡像以後就可使用push命令將它上 傳到公有或者私有倉庫,這樣下次在另一臺機器上使用這個鏡像時候,只須要從倉庫上pull下來就能夠了。

            注:Docker 倉庫的概念跟Git相似,註冊服務器能夠理解爲 GitHub 這樣的託管服務。

      3. Docker 容器

        Docker 利用容器來運行應用,一個Docker容器包含了全部的某個應用運行所須要的環境。

        每個 Docker 容器 都是從 Docker 鏡像建立的。Docker 容器能夠運行、開始、中止、移動和刪除。

       每個 Docker 容器都是獨立 和安全的應用平臺。 容器是從鏡像建立的運行實例。

       它能夠被啓動、開始、中止、刪除。每一個容器都是相互隔 離的、保證安全的平臺。

       能夠把容器看作是一個簡易版的 Linux 環境(包括root用戶權限、進程空間、用戶空 間和網絡空間等)和運行在其中的應用程序。

       注意:鏡像是隻讀的,容器在啓動的時候建立一層可寫層做爲最上層。

   

 

6、Docker底層技術

docker底層的 2 個核心技術分別是 Namespaces 和 Control groups Namespaces用來隔離各個容器

      1)pid namespace

            不一樣用戶的進程就是經過pid namespace 隔離開的,且不一樣 namespace 中能夠有相同pid。全部的LXC進程在 docker中的父進程爲docker進程,每一個lxc進程具備不一樣的 namespace 。

      2) net namespace

            有了pid namespace, 每一個 namespace 中的pid可以相互隔離,可是網絡端口仍是共享 host 的端口。

             網絡隔離是 經過 net namespace 實現的,每一個 net namespace 有獨立的 network devices, IP addresses, IP routing tables, /proc/net 目錄。這樣每一個 container 的網絡就能隔離開來。

           docker默認採用veth的方式將 container 中的虛擬 網卡同 host 上的一個docker bridge: docker0 鏈接在一塊兒。

     3) ipc namespace

            container 中進程交互仍是採用linux常見的進程間交互方法 (interprocess communication - IPC),包括常見的信號 量、消息隊列和共享內存。

            container 的進程間交互實際上仍是host 上具備相同pid namespace 中的進程間交互。

    4) mnt namespace

            相似chroot,將一個進程放到一個特定的目錄執行。mnt namespace 容許不一樣 namespace 的進程看到的文件 結構不一樣,這樣每一個 namespace 中的進程所看到的文件目錄就被隔離開了。

             在container裏頭,看到的文件系 統,就是一個完整的linux系統,有/etc、/lib 等,經過chroot實現。

    5) uts namespace

           UTS("UNIX Time-sharing System") namespace 容許每一個 container 擁有獨立的 hostname 和 domain name, 使 其在網絡上能夠被視做一個獨立的節點而非 Host 上的一個進程。

    6) user namespace

           每一個 container 能夠有不一樣的 user 和 group id, 也就是說能夠在 container 內部用 container 內部的用戶執行程 序而非 Host 上的用戶。

       有了以上 6 種 namespace 從進程、網絡、IPC、文件系統、UTS和用戶角度的隔離,一個 container 就能夠對外 展示出一個獨立計算機的能力,而且不一樣 container 從 OS 層面實現了隔離。

       然而不一樣 namespace 之間資源還 是相互競爭的,仍然須要相似ulimit來管理每一個 container 所能使用的資源 - -cgroup。 cgroups(Control groups)實現了對資源的配額和度量。

 

7、docker安裝

  一)、yum安裝

      1.安裝一些系統工具

yum install -y yum-utils device-mapper-persistent-data lvm2

     2.添加軟件源信息

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

     3.更新安裝docker-ce

yum makecache fast
yum -y install docker-ce

     4.開啓docker服務

service docker start

 二)、安裝指定版本

  官方軟件源默認啓用了最新的軟件,您能夠經過編輯軟件源的方式獲取各個版本的軟件包。例如官方並無將測試版本的軟件源置爲可用,您能夠經過如下方式開啓。同理能夠開啓各類測試版本等。

       1.查看docker-ce版本

yum list docker-ce.x86_64 --showduplicates

       2.安裝指定版本

yum -y install docker-ce-[版本號]

 3、安裝校驗

docker version

8、docker經常使用命令

1.查看鏡像
   docker  images
2.安裝程序
   docker pull  程序名稱
3.查看正在運行容器
   docker ps
4.啓動容器
   docker run -dit -p 81:80 httpd (這種只是普通啓動)

9、改成國內下載源

   1.添加配置文件

vim  /etc/docker/daemon.json

   2.寫入配置文件

{

"registry-mirrors": ["https://registry.docker-cn.com"]

}

3.重啓服務

service  docker  restart

國內源有:

1)、Docker 官方中國區
https://registry.docker-cn.com

2)、網易
http://hub-mirror.c.163.com

3)、中國科技大學
https://docker.mirrors.ustc.edu.cn

4)、阿里雲
https://pee6w651.mirror.aliyuncs.com
相關文章
相關標籤/搜索