大話Docker-Docker概述和Docker爲何出現

前言

已經2021年了,我想各行各業的開發小夥伴都必不可少的提「分佈式」、「微服務」這些高大上的詞彙了吧。固然看到這篇文章不論是學習仍是瞭解我想看完後等你的幫助都是很大的。
這篇文章是實現微服務的第一步,環境搭建。在開發的圈子裏有句話說的挺有意思的,就是「不使用容器的微服務就是耍流氓」。那麼接下來咱們就一塊兒來探索下容器技術-dockermysql

Docker概述

Docker是一個用於開發,交付和運行應用程序的開放平臺。Docker使您可以將應用程序與基礎架構分開,從而能夠快速交付軟件。藉助Docker,您能夠以與管理應用程序相同的方式來管理基礎架構。經過利用Docker的快速交付,測試和部署代碼的方法,您能夠顯著減小編寫代碼和在生產環境中運行代碼之間的延遲。git

固然上面的解釋是來自於官方的概述,既然是大話docker,我仍是用比較接地氣的方式來給你們逐一介紹docker,首先Docker是一個用於開發,交付和運行應用程序的開放平臺開發我們就不用多說了,應該在座的多多少少都是開發出身。咱們來談一下何爲交付和運行吧。github

例如:當咱們後端寫了一個用戶登陸接口,傳統的作法是編譯 -> 發佈 -> 上傳部署服務(或將服務提交給運維) -> 而後運維將服務添加或更新 -> 更新完成後告訴測試或產品 -> 測試或產品進行功能測試。這個過程就是交付和運行.
可是在上面這些步驟中最頻繁也最費時的就是開發和運維之間的交付步驟,由於在部署或和運維的配合過程當中會常常出現兩個問題:1.在個人機器上能夠跑的啊,爲何你換一個環境就不行了,2.版本更新致使服務不可用。這樣對於運維人員考驗就很是大,要麼開發管運維,要麼運維學開發。那麼有沒有一種方式
能很好的處理這個問題呢作到快速交付開發及運維呢。redis

設想一下,若是咱們能將咱們寫的應用程序部署在一個虛擬機裏面而後將這個應用程序所須要的運行環境(runtime)、mysql、redis等一一安裝部署完畢,而後將這個虛擬機打一個快照將這個快照發送給運維同窗,運維同窗那邊也裝一個虛擬機而後恢復咱們給他發送的快照,這樣他部署起來不是很快了嗎?
確實上面的方案能夠實現快速部署但新的問題又出現了,那就是咱們都知道虛擬機運行成本極高。例如vm須要guest os,運行一個虛擬機須要加載一個操做系統內核。且一個性能較好的宿主機同時也啓動不了幾臺虛擬機,對於一個小小應用程序來講這樣的交付方式是極其浪費資源的。雖然能夠作到快速交付
但也作不到快速運行sql

那麼有沒有一種技術手段能像虛擬機那樣呢,不須要加載Guest OS而是利用宿主機的操做系統和資源只對文件、基礎環境、應用程序隔離呢。這時dotCloud 2013年初就發佈開源了一款產品叫作docker,它基於 Google 公司推出的 Go 語言實現。 項目後來加入了 Linux 基金會,聽從了 Apache 2.0 協議,項目代碼在 GitHub 上進行維護。
Docker 自開源後受到普遍的關注和討論,以致於 dotCloud 公司後來都更名爲 Docker Inc。Redhat 已經在其 RHEL6.5 中集中支持 Docker;Google 也在其 PaaS 產品中普遍應用。
Docker 項目的目標是實現輕量級的操做系統虛擬化解決方案。 Docker 的基礎是 Linux 容器(LXC)等技術。
在 LXC 的基礎上 Docker 進行了進一步的封裝,讓用戶不須要去關心容器的管理,使得操做更爲簡便。用戶操做 Docker 的容器就像操做一個快速輕量級的虛擬機同樣簡單。docker

Docker架構

Docker使用客戶端-服務器架構。Docker客戶端與Docker守護進程進行對話,該守護進程完成了構建,運行和分發Docker容器的繁重工做。Docker客戶端和守護程序能夠 在同一系統上運行,或者您能夠將Docker客戶端鏈接到遠程Docker守護程序。Docker客戶端和守護程序在UNIX套接字或網絡接口上使用REST API進行通訊。後端

Docker守護程序

Docker守護程序(dockerd)偵聽Docker API請求並管理Docker對象,例如鏡像,容器,網絡和卷。守護程序還能夠與其餘守護程序通訊以管理Docker服務。
Docker客戶端 Docker客戶端(docker)是許多Docker用戶與Docker交互的主要方式。當您使用諸如之類的命令時docker run,客戶端會將這些命令發送到dockerd,以執行這些命令。該docker命令使用Docker API。Docker客戶端能夠與多個守護程序通訊。
Docker註冊表 Docker註冊表存儲Docker映像。Docker Hub是任何人均可以使用的公共註冊表,而且默認狀況下,Docker已配置爲在Docker Hub上查找映像。您甚至能夠運行本身的私人註冊表。
使用docker pull或docker run命令時,所需的圖像將從配置的註冊表中提取。使用該docker push命令時,會將映像推送到配置的註冊表。
在使用docker的過程當中你會發現它像git同樣,如拉取、提交等,它和git同樣有一個公共倉庫docker hub如github同樣,裏面存放了大量開發或運維人員提交的鏡像,方便你們直接拉取使用。
固然你也可使用國內阿里雲的鏡像倉庫或經過harbor自建一個私有鏡像倉庫服務器

docker是怎麼工做的?

Docker 是一個Client-Service結構的系統,Docker的守護進程運行在主機上,經過Socket從客戶端訪問!
Docker-Server接收到Docker-Client的指令,就會執行這個命令!
網絡

Docker爲何比虛擬機快?

上面咱們已經簡要說明docker與虛擬機之間的區別了
下面咱們詳細的說說它爲何比虛擬機快架構

  1. docker比vm有更少的抽象層
  2. docker使用的是宿主機的內核,vm須要guest os

    因此說docker新建一個容器的時候,不須要像虛擬機同樣從新加載一個操做系統內核,避免引導性的一些操做,虛擬機是加載guest os,分鐘級別的,而dockers是利用宿主機的操做系統,省略了這個複雜過程,因此容器啓動時秒級的!
    以後學習完因此的命令再回過頭來看這段理論就會很是的清晰

參考資料

https://docs.docker.com/engine/
https://docs.docker.com/get-started/overview/

相關文章
相關標籤/搜索