docker基本介紹與安裝

1、Docker簡介node

Docker是什麼?mysql

Docker的英文本意是「搬運工」,在程序員的世界裏,Docker搬運的是集裝箱(Container),集裝箱裏裝的是任意類型的App,開發者經過Docker能夠將App變成一種標準化的、可移植的、自管理的組件,能夠在任何主流系統中開發、調試和運行。nginx

 

說白了,docker是一種用了新穎方式實現的輕量級虛擬機,相似於VM,可是在原理和應用上和VM的差異仍是很大的.而且docker的專業叫法是應用容器(Application Container)。程序員

 

爲啥要用容器?sql

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

 

爲啥不能直接安裝一個mysql?安裝一個SQL Server也能夠啊,但是有的時候根據每一個人電腦的不一樣,在安裝的時候可能會報出各類各樣的錯誤,萬一你的機器中毒了,你的電腦掛了,你全部的服務都須要從新安裝.可是有了docker,或者說有了容器就不一樣了,你就至關於有了一個能夠運行起來的虛擬機,只要你能運行容器,mysql的配置就省了.並且若是你想換個電腦,直接把容器」端過來」就可使用容器裏面的服務.shell

 

總結Docker的優勢能夠分爲四類:centos

1.多安全

能夠經過鏡像一部署多個應用,組成完整的架構環境。
服務器

2.快

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

3.好

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

docker容器之間是隔離的,若是容器出現問題,能夠經過鏡像快速生成全新的容器保證正常訪問。

4.省

在容器中不用搭建系統,只須要基本的運行環境就能夠了,這樣就省去了系統環境硬件的消耗。

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



那麼爲啥不用VM?

那麼既然容器和VM這麼相似爲啥不用VM?docker容器相對於VM仍是有不少優勢的:

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

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

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

 

爲啥類似的功能在性能上會有如此巨大的差距呢?看一下他們的設計圖,先看VM的:

wKiom1jOhbywSwP6AAIWbbVNeSE290.png


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

 

Docker優點和劣勢

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

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

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

容器除了運行其中應用外,基本不消耗額外的系統資源,使得應用的性能很高,同時系統的開銷儘可能小。傳統虛擬機方式運行 10 個不一樣的應用就要起 10 個虛擬機,而 Docker 只須要啓動 10 個隔離的應用便可。

 

具體說來,Docker 在以下幾個方面具備較大的優點。

更快速的交付和部署

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

更高效的虛擬化

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

更輕鬆的遷移和擴展

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

更簡單的管理

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

對比傳統虛擬機總結

特性

容器 虛擬機
啓動 秒級 分鐘級
硬盤使用 通常爲MB 通常爲GB
性能 接近原生 較弱
系統支持量 單機支持上千個容器


Docker 鏡像

Docker 鏡像是 Docker 容器運行時的只讀模板,鏡像能夠用來建立 Docker 容器。每個鏡像由一系列的層 (layers) 組成。Docker 使用UnionFS(聯合文件系統)來將這些層聯合到單獨的鏡像中。UnionFS容許獨立文件系統中的文件和文件夾(稱之爲分支)被透明覆蓋,造成一個單獨連貫的文件系統。正由於有了這些層的存在,Docker 是如此的輕量。當你改變了一個 Docker 鏡像,好比升級到某個程序到新的版本,一個新的層會被建立。所以,不用替換整個原先的鏡像或者從新創建(在使用虛擬機的時候你可能會這麼作),只是一個新的層被添加或升級了。如今你不用從新發布整個鏡像,只須要升級,層使得分發 Docker 鏡像變得簡單和快速。

每一個docker都有不少層次構成,docker使用  union file systems  將這些不一樣的層結合到一個p_w_picpath 中去。

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

wKioL1jOh4yQ_cTAAADwfBED6BM877.png


Docker 倉庫

Docker 倉庫用來保存鏡像,能夠理解爲代碼控制中的代碼倉庫。一樣的,Docker 倉庫也有公有和私有的概念。公有的 Docker 倉庫名字是 Docker Hub。Docker Hub 提供了龐大的鏡像集合供使用。這些鏡像能夠是本身建立,或者在別人的鏡像基礎上建立。

倉庫是集中存放鏡像文件的場所。有時候會把倉庫和倉庫註冊服務器(Registry)混爲一談,並不嚴格區分。實際上,倉庫註冊服務器上每每存放着多個倉庫,每一個倉庫中又包含了多個鏡像,每一個鏡像有不一樣的標籤(tag)。

 

倉庫分爲公開倉庫(Public)和私有倉庫(Private)兩種形式。

最大的公開倉庫是 Docker Hub,存放了數量龐大的鏡像供用戶下載。國內的公開倉庫包括 Docker Pool等,能夠提供大陸用戶更穩定快速的訪問。

 

固然,用戶也能夠在本地網絡內建立一個私有倉庫。

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

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

Docker 容器

Docker 利用容器來運行應用,一個Docker容器包含了全部的某個應用運行所須要的環境。每個 Docker 容器都是從 Docker 鏡像建立的。Docker 容器能夠運行、開始、中止、移動和刪除。每個 Docker 容器都是獨立和安全的應用平臺。

容器是從鏡像建立的運行實例。它能夠被啓動、開始、中止、刪除。每一個容器都是相互隔離的、保證安全的平臺。

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

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


wKioL1jOh7igbqmYAAEJ84Mn8p0600.png



與虛擬機相比,容器有一個很大的差別,它們被設計用來運行"單進程",沒法很好地模擬一個完整的環境。Docker設計者極力推崇「一個容器一個進程的方式」,若是你要選擇在一個容器中運行多個進程,那惟一狀況是:出於調試目的。

容器是設計來運行一個應用的,而非一臺機器。你可能會把容器當虛擬機用,但你將失去不少的靈活性,由於Docker提供了用於分離應用與數據的工具,使得你能夠快捷地更新運行中的代碼/系統,而不影響數據。



Docker 安裝

docker官網:https://docs.docker.com


Docker值得關注的特性:

o 文件系統隔離:每一個進程容器運行在一個徹底獨立的根文件系統裏。

o 資源隔離:系統資源,像CPU和內存等能夠分配到不一樣的容器中,使用cgroup。

o 網絡隔離:每一個進程容器運行在本身的網絡空間,虛擬接口和IP地址。

o 日誌記錄:Docker將會收集和記錄每一個進程容器的標準流(stdout/stderr/stdin),用於實時檢索或批量檢索。

o 變動管理:容器文件系統的變動能夠提交到新的映像中,並可重複使用以建立更多的容器。無需使用模板或手動配置。

o 交互式shell:Docker能夠分配一個虛擬終端並關聯到任何容器的標準輸入上,

 

CentOS 系列安裝 Docker,Docker 支持 CentOS6 及之後的版本。

CentOS6:

在RedHat/CentOS環境下安裝Docker。官方文檔要求Linux kernel至少3.8以上,且docker只能運行在64位的系統中。因爲RHEL6和CentOS6的內核版本爲2.6,所以必需要先升級內核。

 

升級內核(記住必定要升級,要否則會出現不少莫名奇怪的問題,建議用yum安裝)

    一、yum安裝帶aufs模塊的3.10內核


#cd /etc/yum.repos.d 

#wget http://www.hop5.in/yum/el6/hop5.repo

#yum install kernel-ml-aufs kernel-ml-aufs-devel


 

二、修改grub的主配置文件/etc/grub.conf,設置default=0,表示第一個title下的內容爲默認啓動的kernel(通常新安裝的內核在第一個位置)重啓系統,這時候你的內核就成功升級了。


[root@localhost ~]# uname -r

3.10.5-3.el6.x86_64

查看內核是否支持aufs:


[root@localhost ~]# grep aufs /proc/filesystems

nodev    aufs


 

 

對於 CentOS6,可使用EPEL庫安裝 Docker,命令以下

#yum install http://mirrors.yun-idc.com/epel/6/i386/epel-release-6-8.noarch.rpm

#yum install docker-io

啓動docker服務

#service docker start

 

CentOS7:

Prerequisites(先決條件)

Docker requires a 64-bit installation regardless of your CentOS version. Also, your kernel must be 3.10 at minimum, which CentOS 7 runs.

To check your current kernel version, open a terminal and use uname -r to display your kernel version:

[root@localhost~]# uname -r


Docker 軟件包已經包括在默認的 CentOS-Extras 軟件源裏。所以想要安裝docker,只須要運行下面的 yum 命令:

[root@localhost~]#yum install docker

啓動 Docker 服務:

安裝完成後,使用下面的命令來啓動docker服務,並將其設置爲開機啓動:

[root@localhost~]#service docker start

[root@localhost~]#chkconfig docker on

(此處採用了舊式的sysv語法,如採用CentOS 7中支持的新式systemd語法,以下:

[root@localhost~]#systemctl start docker.service

[root@localhost~]#systemctl enable docker.service

查看docker版本  

#docker version 

安裝以前刪除這條不然沒法安裝

rm -rf /var/run/yum.pid

wKioL1jOiUCAdj45AAD84GCh9cA915.png


查看docker版本:docker  info


wKiom1jOiYiS1SyQAAGNPtRiGd0355.png


以上是使用centos7軟件源提供的docker安裝程序

附:也能夠按照官方文檔安裝

1. Log into your machine as a user with sudo or root privileges.

2. Make sure your existing yum packages are up-to-date.

3.Add the yum repo

$ sudo tee /etc/yum.repos.d/docker.repo<<-'EOF'

[dockerrepo]

name=DockerRepositorybaseurl=https://yum.dockerproject.org/repo/main/centos/7/

enabled=1

gpgcheck=1

gpgkey=https://yum.dockerproject.org/gpg

EOF

注:若是咱們既想把輸出保存到文件中,又想在屏幕上看到輸出內容,就可使用tee命令了。tee命令讀取標準輸入,把這些內容同時輸出到標準輸出和(多個)文件中

4.Install the Docker package

$ sudo yum install docker-engine

5.Start the Docker daemon.

$ sudo service dockerstart

6.Verify docker is installed correctly by running a test p_w_picpath in a container.

驗證docker安裝正確

$ sudo docker run hello-world

 

wKioL1jOifPBXoISAAG9Nd2-7Qc991.png

docker默認使用的是unix socket


wKioL1jOiiygToLeAABCMRxRbrU281.png


附:直接輸入docker命令來查看全部的Options和Commands查看某一個command的詳細使用方法:dockerCOMMAND--help

相關文章
相關標籤/搜索