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動態
1、Docker是一種打包和分發軟體的方式
一個現代的軟體系統包括許多部分,包括二進位制檔案、庫檔案、配置檔案和依賴性。將這些不同的元件裝成一臺機器可不是一件容易的事情,但你“出貨”這款軟體的時候就更加複雜了。一旦你出貨了你的軟體,你就需要找到一種方式,將所有這些東西打包到一起、把它們放到需要執行的地方。Docker就是這樣一種容器技術,讓打包軟體以及所有元件之間的依賴性、提供給開發者、分期或者生產、或者傳送到需要執行的地方,所有這些變得非常輕鬆。
2、Docker並不是特別新的技術
Docker問世只有短短几年時間,但是容器技術已經伴隨我們有幾十年了。雖然容器在大型機時代很有用處,但是Docker現在發揮才能是受很多因素影響的,包括Linux日益突出、虛擬化技術的普及、以及雲對作業系統重要性的侵蝕。
3、幾乎每個人都提供了Docker
不管你選擇的廠商恰好是誰,幾乎這些廠商100%都支援Docker。從Amazon Web Services到Red Hat,再到Google,人人都愛Docker。
4、Docker並不只是面向Linux
Docker紮根於Docker,但是微軟把它發揚光大。或者它一定會如此。Docker依賴於像Linux Containers(LXC)這樣的Linux技術,以及cgroups和名稱空間功能,這些在Windows尚不存在。因此微軟正在奮力構建這之間的掛接,使得Docker容器也能夠執行在Windows Server上。微軟在Windows上執行自己的容器技術已經有多年時間了,但是微軟正在擴大範圍,也支援Docker這個社群標準。
5、Docker讓你分配特定量的CPU、記憶體和磁碟資源給每個程序,就像虛擬機器
在Docker的核心是Linux cgroups(控制組),提供計算和限制容器使用CPU、記憶體、網路、磁碟資源數量的方法。這提供了一些虛擬化的好處,例如能夠分配出一臺計算機給少量的資源,這樣你就不用讓一個程序佔用所有計算機讓其他程序沒有資源可用——但是這並不會帶來VMware那樣沉重的開銷或者成本。
6、Docker比啟動一個虛擬機器快(微秒對分鐘)
如果你想要在一臺伺服器上執行多個任務,那麼傳統的方法是將其劃分為多個虛擬機器,使用每個虛擬機器來執行一個任務。但是虛擬機器啟動很慢,因為它們必須啟動整個作業系統,這要花上幾分鐘的時間。而且這會佔用大量資源,因為每個虛擬機器都需要執行一個完整的作業系統例項。容器則提供了某種類似的行為,但是速度更快一些,因為啟動一個容器就像啟動一個程序。Docker的開銷也更少——實際上不會多過一個程序。
7、但是,Docker不消滅掉虛擬機器
Docker並不是虛擬機器的對等替代物,因為它要求你所有的容器共享相同的底層作業系統。這意味著,例如你不能在同一臺伺服器上同時執行 Windows和Linux應用。而且,隨著Docker容器脫穎而出,它的安全隔離要弱於虛擬機器,這也使得它成為某種多租戶的不恰當的選擇。
8、Docker的開發速度相當迅猛
登上Docker這趟列車可不像是乘坐蒸汽機,而更像是跳上了日本子彈頭火車……它以250 MPH的速度向你呼嘯而來。考慮到Docker只有一年半的API已經有了15個修訂版本,你會知道它變化地有多快。雖然Docker“已經成熟,因為它正在成長為一款穩定的、企業值得使用的軟體”,但是它仍然沒有能持續10年的支援承諾,這通常是企業對他們的軟體的期望。
9. 5月1日,Docker釋出了自家的容器網路管理專案libnetwork,libnetwork使用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