一、什么是docker?
1.Docker 是一個(gè)開(kāi)源的應(yīng)用容器引擎,讓開(kāi)發(fā)者可以打包他們的應(yīng)用以及依賴包到一個(gè)可移植的容器中,然后發(fā)布到任何流行的Linux機(jī)器上。容器是完全使用沙箱機(jī)制,相互之間不會(huì)有任何接口;
2.Docker的思想來(lái)源于集裝箱,集裝箱(docker容器)可以放在任何噸位的輪船上(linux系統(tǒng)),輪船也不會(huì)在意集裝箱里放的是什么東西。
二、使用docker的好處?
1.比如我們安裝一個(gè)docker的tomcat容器,這個(gè)容器不需要考慮系統(tǒng)的環(huán)境、版本,也不需要配置JAVA環(huán)境,它作為一個(gè)獨(dú)立的容器可以發(fā)布在不同的linux系統(tǒng)上(前提是這個(gè)linux系統(tǒng)支持docker),和系統(tǒng)內(nèi)其他軟件也不會(huì)產(chǎn)生任何影響;
2.docker的安裝非常容易,解決了大部分軟件在linux系統(tǒng)安裝需要安裝大量依賴包的問(wèn)題;
3.容器的復(fù)用(實(shí)際上是鏡像),A機(jī)器的tomcat容器里的web項(xiàng)目可以一起打包到B機(jī)器發(fā)布,不用另外配置任何參數(shù)。每一個(gè)docker容器的安裝、打包、發(fā)布都是輕量級(jí)的。
三、docker的常用名詞解釋和概念
1.什么是docker鏡像、容器?它們的關(guān)系?
我們可以把鏡像當(dāng)做一個(gè)docker容器的實(shí)體,我們?nèi)グ惭b一個(gè)docker容器,首先也是安裝的鏡像。但是我們并不使用鏡像,我們使用的是容器,容器是鏡像的實(shí)例化。每一個(gè)容器都會(huì)有自己對(duì)應(yīng)的鏡像,將鏡像‘實(shí)例化’后就是我們需要的容器。所以,鏡像才是我們需要關(guān)心和維護(hù)的docker文件,而容器可以隨時(shí)用鏡像實(shí)例化,隨時(shí)拋棄,有問(wèn)題的容器就刪除掉。鏡像和容器是一對(duì)多的關(guān)系,也就是說(shuō)一個(gè)鏡像可以實(shí)例化成多個(gè)容器
2.容器到底是怎樣的存在?
容器可以是一個(gè)虛擬機(jī),也可以是一個(gè)中間件。比如我在最開(kāi)始安裝tomcat容器的時(shí)候,是安裝了一個(gè)centos的容器,我將我們平時(shí)使用的tar包上傳到這個(gè)centos容器內(nèi)解壓發(fā)布。但是因?yàn)楹髞?lái)在遷移容器的時(shí)候,這種虛擬機(jī)容器出現(xiàn)了問(wèn)題沒(méi)有解決,我才重新安裝tomcat的容器,并且在centos容器內(nèi)安裝mysql也會(huì)出現(xiàn)缺少文件的問(wèn)題。而且在linux系統(tǒng)內(nèi)安裝一個(gè)centos的容器也沒(méi)有任何意義,因?yàn)閏entos的容器看起來(lái)像是一個(gè)輪船,而不是集裝箱。所以最后放棄了這種方式,只安裝中間件的容器;
3.端口映射
容器和操作系統(tǒng)唯一的連接通道就是端口,比如我們安裝一個(gè)tomcat容器時(shí)映射的是8080端口,那么這臺(tái)linux服務(wù)器的8080端口就被這個(gè)tomcat容器占用了,我們?cè)L問(wèn)這臺(tái)機(jī)器的8080端口,也就是訪問(wèn)了tomcat容器;
4.一個(gè)容器的配置文件如何修改?
我們平時(shí)安裝一個(gè)tomcat,有可能要改它的端口號(hào)或者其他一些參數(shù)。目前知道容器修改配置文件的參數(shù)有三種方式。第一種是在實(shí)例化容器的時(shí)候就配置參數(shù),比如tomcat的端口配置;第二種是進(jìn)入容器內(nèi)部修改;第三種是將這個(gè)配置文件從本機(jī)掛載到容器內(nèi)部,讓這個(gè)容器啟動(dòng)時(shí)就執(zhí)行這個(gè)配置文件,那么我們?cè)诒緳C(jī)或者容器內(nèi)部(其實(shí)也是第二種)都可以修改配置文件,比如nginx的nginx.conf文件,我在安裝的時(shí)候就是用的這種方式。當(dāng)然這三種參數(shù)的配置對(duì)于一個(gè)容器來(lái)說(shuō)都是可以使用的,我們依容器安裝的方便程度來(lái)決定;
5.war包如何發(fā)布?
當(dāng)一個(gè)容器需要我們從外部上傳文件時(shí),比如tomcat需要war包。在實(shí)例化容器的時(shí)候一定要從本機(jī)掛載一個(gè)文件夾到容器內(nèi)部,這樣我們的war包拷貝到本機(jī)的文件夾就可以,我們?cè)俚卿浫萜骶涂梢砸苿?dòng)這些文件,當(dāng)然將本機(jī)的文件夾直接掛載到tomcat的webapps文件夾內(nèi)也是很好的選擇,因?yàn)槿萜鲿?huì)自動(dòng)幫我們解壓war包。
四、docker的安裝
1.目前依照項(xiàng)目的集群方案搭建了一套docker容器,有tomcat、nginx、redis、mysql、mongdb,其中keepalived不能安裝docker容器,原因是它沒(méi)有端口,并且需要配置防火墻規(guī)則,也沒(méi)有找到相應(yīng)的解決方案
2.安裝docker使用阿里提供的腳本,因?yàn)閲?guó)外的官方腳本因?yàn)榫W(wǎng)絡(luò)或者墻了的關(guān)系無(wú)法安裝
腳本:curl -sSLhttp://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet |sh
3.docker鏡像的拉取也是使用國(guó)內(nèi)官方鏡像
執(zhí)行:docker pullregistry.docker-cn.com/library/tomcat:8.0.54
docker pullregistry.docker-cn.com/library/? :不管拉取什么鏡像,前面都是這樣寫(xiě)
tomcat: 8.5.4:分號(hào)前的tomcat是要拉取tomcat容器;分號(hào)后的8.5.4是tomcat的版本
4.鏡像的遷移
遷移docker的時(shí)候,并不遷移它的鏡像,而是將啟動(dòng)的容器生成一個(gè)鏡像,將這個(gè)鏡像打包用文件的方式遷移
5.安裝步驟
所有容器的安裝步驟,問(wèn)題,方案,都可以參考文檔‘docker安裝筆記.doc’
6.tomcat的安裝和遷移實(shí)例(有網(wǎng)絡(luò)的情況):
a.更新yum倉(cāng)庫(kù)。執(zhí)行:yum upgrade

b.執(zhí)行阿里docker腳本,安裝docker。執(zhí)行:curl –sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet| sh

c.啟動(dòng)docker服務(wù)。執(zhí)行:service docker start

d.安裝tomcat容器
# 拉取tomcat鏡像。執(zhí)行:docker pull registry.docker-cn.com/library/tomcat:8.5.3

# 查看剛剛拉取的鏡像:

# 啟動(dòng)tomcat容器。執(zhí)行:docker run -p 8083:8080 -v /docker/tomcat/webapps:/docker/tomcat/webapps--name tomcat8_1 tomcat:8.5.4
docker run:根據(jù)鏡像啟動(dòng)容器
-p 8083:8080:將宿主機(jī)的8083端口映射到容器里的8080端口
-v /docker/tomcat/webapps:/docker/tomcat/webapps:將本機(jī)下的目錄掛載到容器內(nèi)的目錄
--name tomcat8_1:容器的名字
tomcat:8.5.4:執(zhí)行的鏡像

# 因?yàn)槭堑谝淮螁?dòng),tomcat進(jìn)程不是后臺(tái)運(yùn)行,CTRL+C停止進(jìn)程。執(zhí)行docker ps –a查看所有容器:

#然后根據(jù)容器名稱/Id啟動(dòng)容器并查看運(yùn)行的容器:

#然后訪問(wèn)tomcat:http://ip:8083
e.遷移tomcat容器
# 先將需要備份的容器運(yùn)行起來(lái):docker ps 查看正在運(yùn)行的容器:

# 創(chuàng)建該容器的快照。執(zhí)行:docker commit -p 32d91c90fd3e docker-mytomcat-backup

# 查看產(chǎn)生的鏡像。執(zhí)行docker images

# 將鏡像打成tar包:docker save -o/docker/tomcat/docker-mytomcat-backup.tardocker-mytomcat-backup

# 將tar包拷貝到另一臺(tái)機(jī)器scp?docker-mytomcat-backup.tarroot@192.168.9.20:/docker/tomcat/


# 在新機(jī)器上下載鏡像:docker load -i /docker/tomcat/docker-mytomcat-backup.tar
# 然后查看鏡像是否存在:docker images

# 用鏡像啟動(dòng)容器(跟最開(kāi)始拉取鏡像啟動(dòng)容器一樣)
# dockerrun -p 8084:8080 -v /docker/tomcat/webapps:/docker/tomcat/webapps

五、docker常用命令
查看docker版本:docker version
服務(wù)啟動(dòng)docker:servicedocker start
正在運(yùn)行的容器:dockerps
所有容器:docker ps -a
查看鏡像:dockerimages
所有鏡像:docker images-a
Centos版本:lsb_release –a
刪除容器:docker rmcontainerid
停止容器:docker stopcontainerid
刪除鏡像 :docker rmi imageid
先停止容器,先刪容器,再刪除鏡像
查看所有容器ID:docker ps -a -q
停止所有容器:docker stop$(docker ps -a -q)
殺死所有正在運(yùn)行的容器:docker kill$(docker ps -a -q)
刪除所有已經(jīng)停止的容器:docker rm$(docker ps -a -q)
刪除所有鏡像:docker rmi $(docker images -q)
刪除所有容器:docker? rm $(docker ps -a -q)
容器內(nèi)添加vi命令:apt-get update ?&& apt-get?install?vim
檢查容器狀態(tài):docker inspect容器ID
登錄容器:docker exec
-it 容器名/容器ID /bin/bash
查看linux磁盤(pán)大小:df –lh
查看每個(gè)目錄使用的磁盤(pán)大?。篸u -hx--max-depth=1 / | sort –h
鏈接容器(進(jìn)入容器內(nèi)部操作):docker exec -it 容器名/容器id /bin/bash