Docker介绍与安装使用(一)
什么是Docker?
docker是一個基于LXC容器技術(shù)的管理工具,提供一系列更強(qiáng)的功能,如可移植性(定義了標(biāo)準(zhǔn),可以在任意主機(jī)運(yùn)行)、自動化構(gòu)建(dockerfile)、版本控制、鏡像管理等。
docker提供應(yīng)用程序的自動化部署解決方案,能夠迅速創(chuàng)建一個容器,并在容器上部署和運(yùn)行應(yīng)用程序,通過配置文件(Dockerfile)可以輕松實(shí)現(xiàn)應(yīng)用程序的自動化安裝、部署和升級。
Docker優(yōu)點(diǎn)?
1.輕量級資源,容器是在進(jìn)程級別隔離,并使用宿主機(jī)的內(nèi)核,而不需要虛擬化整個操作系統(tǒng)。不需要虛擬化和系統(tǒng)調(diào)用復(fù)雜的操作。因此節(jié)省了很大的額外開銷。不需要額外的hypervisor(虛擬化技術(shù))支持,不需要虛擬硬件,不需要額外完整的系統(tǒng)。
2.可移植性,所需要的應(yīng)用都在容器中,可以在任意一臺docker主機(jī)上運(yùn)行
3.可預(yù)測性,宿主機(jī)和容器相互不關(guān)心對方都運(yùn)行什么。只考慮所需的接口標(biāo)準(zhǔn)化。
相關(guān)組件及功能?
1.lxc,Linux Container的簡寫,lxc是一種內(nèi)核虛擬化技術(shù),與宿主機(jī)共享內(nèi)核,用namespace和cgroup實(shí)現(xiàn)資源隔離。lxc是linux內(nèi)核一個特性,它允許進(jìn)程或進(jìn)程組運(yùn)行在一塊獨(dú)立的空間,并能對其控制。并實(shí)現(xiàn)容器與宿主機(jī)資源共享。
2.cgroup,lxc是cgroup的管理工具。限制進(jìn)程或進(jìn)程組使用的系統(tǒng)資源管理。提供類似文件的接口,非常方便配置。
3.namespace,cgroup是namespace的用戶空間的管理接口。并對進(jìn)程或進(jìn)程組之間隔離,如果net、mnt、pid、user等。
4.aufs(AnotherUnionFS),支持將不同目錄掛載到同一個虛擬文件系統(tǒng)。docker容器分為只讀的鏡像層與上面可寫層,AUFS實(shí)現(xiàn)在可寫層上進(jìn)行增量的修改(增量文件系統(tǒng))。
在docker中,只讀層及在頂部的讀寫層的組合被稱為Union File System,UFS(聯(lián)合文件系統(tǒng)),目前支持的聯(lián)合文件系統(tǒng)種類包括 AUFS、btrfs、vfs和DeviceMapper。
5.chroot,使容器運(yùn)行在指定的目錄內(nèi)。
組件之間關(guān)系?
cgroup是在底層實(shí)現(xiàn)資源管理,lxc在cgroup上封裝了一層,docker又在lxc封裝了一層。
工作方式?
當(dāng)我們啟動一個docker容器時,docker會加載只讀鏡像,并在其上添加一個讀寫層(將鏡像目錄復(fù)制一份到/var/lib/docker/aufs/mnt以ID為目錄下,我們可以使用chroot進(jìn)入此目錄,與容器里面的目錄一樣)。如果運(yùn)行中的容器修改現(xiàn)有的一個已經(jīng)存在的文件,那該文件將會從讀寫層下面的只讀層復(fù)制到讀寫層,該文件的只讀版本仍然存在,只是已經(jīng)被讀寫層中的該文件的副本所隱藏,當(dāng)刪除docker容器,并通過該鏡像重新啟動時,之前的更改將會丟失。
博客地址:http://lizhenliang.blog.51cto.com
Docker安裝與使用:
操作系統(tǒng):Ubuntu14.04_x64
1、添加秘鑰
$ sudo apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys?58118E89F3A912897C070ADBF76221572C52609D
2、添加docker源
$ sudo vi /etc/apt/sources.list.d/docker.list
# Ubuntu?Precise?
deb https://apt.dockerproject.org/repo ubuntu-precise main?
# Ubuntu?Trusty?
deb https://apt.dockerproject.org/repo ubuntu-trusty main?
# Ubuntu?Vivid?
deb https://apt.dockerproject.org/repo ubuntu-vivid main?
# Ubuntu?Wily?
deb https://apt.dockerproject.org/repo ubuntu-wily main
注意:通過命令lsb_release?-c查看上面對應(yīng)的版本,不要都添加上
3、更新索引
$ sudo apt-get update
4、安裝docker
$ sudo apt-get install docker-engine
5、下載Ubuntu鏡像
#默認(rèn)下載最新版
$ sudo docker?pull?ubuntu
#如果想下載14.04版本的,可以這樣指定
$ sudo docker pull ubuntu:14.04
6、在鏡像里打印hello
$ sudo docker?run?ubuntu?/bin/echo?hello
打印出hello說明你已經(jīng)成功安裝docker并啟動一個容器!
7、熟悉下常用命令
#查看docker環(huán)境信息
$ sudo docker version
# sudo docker -D info
#在倉庫中搜索相關(guān)的鏡像
$?sudo?docker?search?centos
#查看已下載的鏡像
$?sudo?docker?images
#啟動鏡像并進(jìn)入容器
$?sudo?docker?run?-itd --name=ubuntu ubuntu
run命令選項(xiàng):
-t 模擬一個終端,-i進(jìn)入這個容器,一般結(jié)合使用創(chuàng)建一個交互式容器。
-d?后臺運(yùn)行容器并打印ID,如果不加-i后面就不能附加進(jìn)入容器
--name 為容器指定名稱
run命令選項(xiàng)很多,先不過多介紹,在使用中你會慢慢了解到!
此時你已經(jīng)創(chuàng)建并進(jìn)入容器,怎么能退出呢?
# 按ctrl+d退出容器,會暫停容器,可以再啟動(sudo docker start ID/NAME),里面數(shù)據(jù)不會丟失。
# 退出暫停容器太不符合常理啊!那么按ctrl+p+q退出docker,將不會暫停
#緊接查看運(yùn)行的容器
$?sudo?docker?ps
#這時想進(jìn)入某個容器可通過ps查看的ID進(jìn)入運(yùn)行的容器
$?sudo?docker?attach?ID/NAME
#關(guān)閉運(yùn)行的容器(start/restart)
$?sudo?docker?stop ID
#關(guān)閉所有運(yùn)行的容器
$ sudo docker kill $(sudo?docker?ps?-q) ? #-q只顯示ID
#刪除一個容器
$ sudo docker rm ID/NAME
#刪除所有容器
$ sudo docker rm?$(sudo?docker?ps?-q)
#刪除一個鏡像
$ sudo docker rmi ID
#查看Docker操作日志
$ sudo docker ps -a
#查看容器日志
$ sudo docker logs ID/NAME ?
#查看容器配置詳細(xì)信息
$ sudo?docker?inspect ID
此時,會返回一個json格式信息,我們可以獲取指定的信息,比如獲取IP地址:
$ sudo?docker?inspect?-f?'{{.NetworkSettings.IPAddress}}'?ID
#列出容器內(nèi)容文件狀態(tài)變化情況
$ sudo docker diff ID
注:A - Add,D - Delet , C - Change
#查看容器資源使用情況
$ sudo docker?stats
#免交互執(zhí)行命令
$ sudo docker exec ID/NAME command
通過這篇博文,你已經(jīng)對docker初步認(rèn)識,可以很輕松的來管理容器了!
后續(xù)緊接會更新docker進(jìn)階內(nèi)容,歡迎關(guān)注,謝謝支持!
總結(jié)
以上是生活随笔為你收集整理的Docker介绍与安装使用(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring MVC笔记 添加错误页面
- 下一篇: 关于《在Windows与.NET平台上的