1. 程式人生 > >Docker安裝及其應用部署

Docker安裝及其應用部署

                                                                                                                                           Docker

什麼是Docker

Docker是基於Go語言實現的開源專案。

2014年6月釋出了1.0穩定版本

    Docker依賴於像LinuxContainers(LXC)這樣的Linux技術,以及cgroups和名稱空間功能,這些在Windows尚不存在。因此微軟正在奮力構建這之間的掛接,使得Docker容器也能夠執行在Windows Server上。微軟在Windows上執行自己的容器技術已經有多年時間了,但是微軟正在擴大範圍,也支援Docker這個社群標準

賣點:

1.Docker也可以被稱為輕量級虛擬化技術。與傳統的VM相比。它更輕量級,啟動速凍更快。單臺硬體上可以同時跑成百上千臺個容器,所以非常適合在業務高峰期通過啟動大量容器進行橫向擴充套件。

2.Docker是可移植性的,可以再各種主流linux釋出版本或者os x以及windown上(需要使用boot2docker或者虛擬機器)使用。java可以做到“一次編譯,到處執行”,而Docker則可以稱之為“構建一次,在各平臺上執行”(Build once,run anywhere)

    Docker不僅僅是描述了應用程式,而且還描述了其對所需執行軟體的所有依賴關係。如果你描述了容器內所需執行軟體的所有細節,並且將該容器轉移到另外一個新伺服器中,那麼,你不必擔憂其是否適配於該伺服器、依賴關係是否相配,所有問題都會得到解決。

3.Docker讓你分配特定量的CPU、記憶體和磁碟資源給每個程序,就像虛擬機器 速度更快,啟動一個容器就像啟動一個程序。Docker的開銷也更少-實際上不會多於一個程序。它要求你所有的容器共享相同的底層作業系統,安全隔離要弱於虛擬機器

    Docker推薦單個容器只執行一個應用程式或者程序,這樣就形成了一個分散式的應用程式模式,在這種模式下,應用程式或者服務都可以表示為一系列內部互聯的容器,從而使分散式部署應用程式,擴充套件或者除錯應用程式都變得非常簡單,同時也提高了程式的內省性。

 ***************************

管理程式虛擬化(hypervisor)通過中間層將一臺或者多臺獨立的機器虛擬執行與物理硬體之上,而容器則是執行在作業系統核心之上的使用者空間。

****************************

Docker客戶端和伺服器端

   Docker是一個客戶-伺服器(c/s)架構的程式。Docker客戶機只需向Docker伺服器或者守護程序傳送請求,伺服器或者守護程序將完成所有工作並返回結果。

Docker動態

1Docker是一種打包和分發軟體的方式

一個現代的軟體系統包括許多部分,包括二進位制檔案、庫檔案、配置檔案和依賴性。將這些不同的元件裝成一臺機器可不是一件容易的事情,但你出貨款軟體的時候就更加複雜了。一旦你出貨了你的軟體,你就需要找到一種方式,將所有這些東西打包到一起、把它們放到需要執行的地方。Docker就是這樣一種容器技術,讓打包軟體以及所有元件之間的依賴性、提供給開發者、分期或者生產、或者傳送到需要執行的地方,所有這些變得非常輕鬆。

2Docker並不是特別新的技術

Docker問世只有短短几年時間,但是容器技術已經伴隨我們有幾十年了。雖然容器在大型機時代很有用處,但是Docker現在發揮才能是受很多因素影響的,包括Linux日益突出、虛擬化技術的普及、以及雲對作業系統重要性的侵蝕。

3、幾乎每個人都提供了Docker

不管你選擇的廠商恰好是誰,幾乎這些廠商100%都支援Docker。從Amazon Web ServicesRed Hat,再到Google,人人都愛Docker

4Docker並不只是面向Linux

Docker紮根於Docker,但是微軟把它發揚光大。或者它一定會如此。Docker依賴於像Linux ContainersLXC)這樣的Linux技術,以及cgroups和名稱空間功能,這些在Windows尚不存在。因此微軟正在奮力構建這之間的掛接,使得Docker容器也能夠執行在Windows Server上。微軟在Windows上執行自己的容器技術已經有多年時間了,但是微軟正在擴大範圍,也支援Docker這個社群標準。

5Docker讓你分配特定量的CPU、記憶體和磁碟資源給每個程序,就像虛擬機器

Docker的核心是Linux cgroups(控制組),提供計算和限制容器使用CPU、記憶體、網路、磁碟資源數量的方法。這提供了一些虛擬化的好處,例如能夠分配出一臺計算機給少量的資源,這樣你就不用讓一個程序佔用所有計算機讓其他程序沒有資源可用——但是這並不會帶來VMware那樣沉重的開銷或者成本。

6Docker比啟動一個虛擬機器快(微秒對分鐘)

如果你想要在一臺伺服器上執行多個任務,那麼傳統的方法是將其劃分為多個虛擬機器,使用每個虛擬機器來執行一個任務。但是虛擬機器啟動很慢,因為它們必須啟動整個作業系統,這要花上幾分鐘的時間。而且這會佔用大量資源,因為每個虛擬機器都需要執行一個完整的作業系統例項。容器則提供了某種類似的行為,但是速度更快一些,因為啟動一個容器就像啟動一個程序。Docker的開銷也更少——實際上不會多過一個程序。

7、但是,Docker不消滅掉虛擬機器

Docker並不是虛擬機器的對等替代物,因為它要求你所有的容器共享相同的底層作業系統。這意味著,例如你不能在同一臺伺服器上同時執行 WindowsLinux應用。而且,隨著Docker容器脫穎而出,它的安全隔離要弱於虛擬機器,這也使得它成為某種多租戶的不恰當的選擇。

8Docker的開發速度相當迅猛

登上Docker這趟列車可不像是乘坐蒸汽機,而更像是跳上了日本子彈頭火車……它以250 MPH的速度向你呼嘯而來。考慮到Docker只有一年半的API已經有了15個修訂版本,你會知道它變化地有多快。雖然Docker“已經成熟,因為它正在成長為一款穩定的、企業值得使用的軟體,但是它仍然沒有能持續10年的支援承諾,這通常是企業對他們的軟體的期望。

9. 51日,Docker釋出了自家的容器網路管理專案libnetworklibnetwork使用Go語言編寫,目標是定義一個容器網路模型(CNM),併為應用程式提供一致的程式設計介面以及網路抽象。目前libnetwork仍在全力開發中,並沒有達到使用標準。

                                    Docker的深入瞭解:

Docker核心概念

*映象

*容器

*倉庫

1.Docker映象(image)類似於虛擬機器映象,可以將它理解為一個面向Docker引擎的只讀模板,包含了檔案系統。映象是建立Docker容器的基礎。

2.Docker容器(container)類似於一個輕量級的沙箱,Docker利用容器來執行和隔離應用。容器是從映象建立的應用執行例項,可以將其啟動,開始,停止,刪除,而這些容器都是互相隔離,互不可見的

3.Docker倉庫(repository)類似於程式碼倉庫,是Docker集中存放映象檔案的場所。Docker倉庫可以分為共有倉庫和私有倉庫兩種形式,目前最大的公開倉庫是Docker Hub

Docker的安裝

Docker支援在主流作業系統平臺上使用。包括ubuntu,centos,windown以及macos等系統。在linux系列平臺上是原生支援,使用體驗也最好。

Ubuntu

目前支援以下ubuntu版本:

ubuntu 14.04

ubuntu 12.04

ubuntu 13.04

ubuntu 13.10

並不意味除了清單以外的ubuntu版本就不能安裝Docker。只要在適當的核心和Docker所需的支援。其他也是可以安裝Docker的

檢測前提條件:

1.核心

linux終端下命令“uname -a”

核心版本必須在3.8. x86_64。如核心版本過低,要升級核心版本

2.Device mapper

使用device mapper作為儲存驅動,自2.6.9版本的linux核心開始已經集成了device mapper,並且提供了一個將塊裝置對映到高階虛擬裝置的方法

linux終端: sudo grep device-mapper /proc/devices

如果出現device-mapper的相關資訊,則ok5

安裝Docker

首先確認安裝了curl命令,終端命令如下:

#whereis curl

如找不到curl命令,則安裝

#apt-get install -y curl

新增Docker倉庫GPG祕鑰

更新APT源

#sudo apt-get update

接下來安裝Docker軟體包

sudo apt-get install lxc-docker

確認Docker已經正常安裝並執行:

docker info

centos

Red hat 和 Red hat系列發行版本中安裝docker

 少數版本可以安裝docker:

RHEL(centos 6)或者以上版本(64位)

Fedora core 19 或者以上版本(64位)

RPM軟體包安裝

安裝玩EPEL安裝Docker

sudo yum -y install docker.io

啟動守護程序

在red hat系列中啟動守護程序

RHEL6或者centos6中:

sudo service docker start

想要在系統開機時自動啟動Docker服務:

sudo service docker enable

在RHEL7啟動Docker服務

sudo systemctl start docker

開機自啟動:sudo systemctl enable docker

windowns

windowns下安裝boot2docker

boot2docker是極小的虛擬機器,boot2docker在windowns上安裝了一個原生的命令工具,並提供Docker環境

要在windown中安裝BOOT2Docker,依賴兩個必要條件:

*virtualbox

*Docker客戶端

要在windowns安裝boot2Docker,需要從github上下載相應的安裝程式

執行安裝檔案,並根據提示安裝boot2Docker

安裝完boot2Docker後,可以從桌面或者program files >boot2Docker for windowns 來執行boot2Docker start指令碼

測試boot2Docker

嘗試使用將本機Docker客戶端連線到boot2docker虛擬機器中執行的守護程序來測試boot2Docker是否已經正常安裝

docker info

boot2docker是本地虛擬機器,擁有自己的網路介面和IP地址

命令:

想得到Boot2docker的IP地址,檢視DOCKER_HOST環境變數,啟動Boot2docker: #boot2docker start 

檢視ip: #boot2docker ip

獲取到Boot2docker的IP地址後,就可以連線localhost上的容器了

例如使用curl命令,只需將localhost替換成相應的IP就可以

#curl localhost:49155  --》 #curl IP:4915

Docker守護程序:

Docker守護程序是以root許可權執行的。處理普通使用者無法完成的操作。

檢視docker守護程序:

sudo status docker

start或者stop Docker守護程序

sudo stop docker或sudo start docker

sudo service docker stop或sudo service dockerstart

Docker的使用

確保Docker正常執行:

#docker info

docker是基於客戶端/伺服器架構的

執行第一個容器

sudo docker run -it ubuntu  /bin/bash

如果不清楚可以使用docker run --help  檢視詳細引數資訊

docker用映象啟動了容器,該容器擁有自己的網路。IP地址,以及用來和宿主機進行通訊的網橋

使用容器:

以root身份登陸容器。檢視容器資訊(linux終端命令)

在容器內安裝軟體包:apt-get install Vim(以ubuntu為例)

工作結束輸入:exit 就返回ubuntu宿主機額

檢視容器:

docker ps -a (列出所有容器)

容器命名:

docker run --name hh_container -it ubuntu /bin/bash (hh_container 是容器的名字)

重啟停止的容器:

sudo docker start hh_container

或者利用容器的ID重啟hh_container

sudo docker start ID

建立守護式容器:

守護式容器沒有互動會話。非常適合執行應用程式和服務

sudo docker run --name hh_container -d ubuntu /bin/bash

引數-d將容器放到後臺執行

檢視容器內部資訊:

docker logs hh_container

docker logs --help 檢視命令資訊

檢視容器內的程序:

docker top hh_container

在容器內部執行程序:

容器內執行的程序有兩種型別:後臺任務和互動性任務

sudo docker exec -d hh_container touch /etc/aa

通過docker exec 後臺命令,我們可以再正在執行的容器中進行維護,監控和管理

sudo docker exec -it hh_container /bin/bash

停止守護程序:

docker stop hh_container

深入瞭解docker:

sudo docker inspect  hh_container

詳細介紹docker映象和倉庫

什麼是docker映象:docker映象是由檔案系統疊加而成,最底層是一個引導檔案,即boots

列出檔案映象images:

docker  images

下載映象:sudo pull ubuntu

檢視映象:sudo search centos

構建映象:docker commit 命令或者docker build和Dockerfile檔案

註釋:docker commit提交的支援建立容器映象和容器的當前的差異,這使得該更新非常輕量

docker build利用Dockerfile檔案按照所需構建自己的映象

刪除映象:docker rmi  id