本篇內(nèi)容主要講解“Docker原理、架構(gòu)與應(yīng)用是什么”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Docker原理、架構(gòu)與應(yīng)用是什么”吧!
成都做網(wǎng)站、網(wǎng)站制作,成都做網(wǎng)站公司-創(chuàng)新互聯(lián)已向近1000家企業(yè)提供了,網(wǎng)站設(shè)計(jì),網(wǎng)站制作,網(wǎng)絡(luò)營(yíng)銷等服務(wù)!設(shè)計(jì)與技術(shù)結(jié)合,多年網(wǎng)站推廣經(jīng)驗(yàn),合理的價(jià)格為您打造企業(yè)品質(zhì)網(wǎng)站。
一、云計(jì)算簡(jiǎn)介
1.Docker,通過(guò)將運(yùn)行環(huán)境和應(yīng)用程序打包到一起,來(lái)解決部署的環(huán)境依賴問(wèn)題,真正做到跨平臺(tái)的分發(fā)和使用
2.容器由于省去了操作系統(tǒng),整個(gè)層級(jí)更簡(jiǎn)化,可以在單臺(tái)服務(wù)器上運(yùn)行更多的應(yīng)用
3.ubuntu的存儲(chǔ)部分可以使用AUFS,而CentOS只能使用Devicemapper,前者的性能更好
二、Docker的安裝
三、使用Docker
1.容器其實(shí)就是運(yùn)行在操作系統(tǒng)上的一個(gè)進(jìn)程,只不過(guò)加入了對(duì)資源的隔離和限制,Docker三大核心功能:
CGroups:用來(lái)限定一個(gè)進(jìn)程的資源使用,在一個(gè)操作系統(tǒng)之上,用戶ID、機(jī)器名等資源是全局的,運(yùn)行的進(jìn)程間都是訪問(wèn)同一份資源
Namespace:用來(lái)劃分不同的命名空間
UnionFS:用來(lái)處理分層鏡像
2.鏡像就是容器中的文件系統(tǒng),還集成了一部分容器運(yùn)行的參數(shù),可以將鏡像看作容器的模板
3.一些命令:
docker info:查看運(yùn)行狀態(tài)及版本信息,是整個(gè)Docker Daemon守護(hù)進(jìn)程運(yùn)行狀況的縮影,包括容器個(gè)數(shù)、鏡像個(gè)數(shù)、Daemon版本、使用的存儲(chǔ)驅(qū)動(dòng)等信息
docker pull:拉取鏡像
docker run -i -t ubuntu /bin/bash:-i表示啟動(dòng)一個(gè)可交互的容器,-t表示使用pseudo-TTY,關(guān)聯(lián)到容器的stdin和stdout,ubuntu是運(yùn)行的鏡像,/bin/bash表示啟動(dòng)容器時(shí)要運(yùn)行的命令,如果要退出交互模式且不影響容器運(yùn)行,使用【Ctrl+PQ】
運(yùn)行長(zhǎng)時(shí)間容器:-d讓容器在后臺(tái)運(yùn)行,docker logs <容器id>查看容器的日志(其實(shí)就是查看容器的標(biāo)準(zhǔn)輸出日志)
docker ps:查看容器,-a查看所有容器
四、Docker深入解析
A.Docker的架構(gòu)
1.Docker Daemon:運(yùn)行在一個(gè)主機(jī)上,用戶并不是直接同Docker Daemon進(jìn)行交互,而是通過(guò)Docker Client
2.Docker Client:是主要的用戶訪問(wèn)Docker的渠道,用戶通過(guò)它對(duì)Docker Daemon進(jìn)行訪問(wèn)控制
3.Docker Image:是一個(gè)只讀的模板
4.Docker Registry:是存放Image的倉(cāng)庫(kù),可以使用公有的和私有的Registry來(lái)進(jìn)行上載和下載
5.Docker Containers:Docker容器就像一個(gè)文件夾,一個(gè)容器包含了應(yīng)用程序所需的所有環(huán)境,每個(gè)容器都源于一個(gè)Image,容器可以運(yùn)行、開(kāi)始、停止、移動(dòng)并刪除,每個(gè)容器都是隔離的、安全的應(yīng)用
B.Docker如何工作
1.Docker Image是只讀模板,隨容器一起啟動(dòng),每個(gè)鏡像包含多個(gè)層,使用的是Union File System來(lái)將這些層組合成一個(gè)鏡像,Union FS可以將文件和目錄進(jìn)行透明的層疊組裝,形成一個(gè)單獨(dú)的文件系統(tǒng),每個(gè)鏡像都來(lái)源于一個(gè)基礎(chǔ)鏡像
2.一個(gè)容器由操作系統(tǒng)、用戶文件和元數(shù)據(jù)構(gòu)成,運(yùn)行時(shí),容器會(huì)在Union FS的頂層增加文件層
3.Docker使用的Namespace:PID Namespace、NET Namesapce、IPC Namesapce、MNT Namespace、UTS Namespace;使用的Union FS包括AUFS、Btrfs、VFS、DevicemapperFS等
4.-p 主機(jī)端口:容器端口
5.進(jìn)入鏡像:docker exec -it 容器id /bin/bash
6.docker commit 容器id 新名字,保存鏡像以及一切改動(dòng)
C.鏡像制作
1.獲取鏡像的三種方式:
拉取鏡像:docker pull
把容器轉(zhuǎn)換成鏡像:docker commit
制作鏡像:通過(guò)Dockerfile生成鏡像
2.查找DockerHub鏡像:docker search
3.push鏡像,首先先tag鏡像,docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME]NAME[:TAG]
4.根據(jù)Dockerfile編譯鏡像:在Dockerfile文件所在目錄docker build .
5.刪除鏡像:docker rmi
D.docker run 命令
1.語(yǔ)法格式:docker run [OPTIONS] IMAGE[:TAG!@DIGEST][COMMAND][ARG…]
2.前后臺(tái)運(yùn)行:后臺(tái)-d,前臺(tái)-i -t,后臺(tái)運(yùn)行后再次進(jìn)入容器,可以使用docker attach <cid>,退出時(shí)使用【ctrl+pq】
3.容器的標(biāo)識(shí):—name,Image[:tag],Image[@digest]
4.PID設(shè)置:—pid=host,可以在容器里面共享主機(jī)的PID Namespace
5.IPC設(shè)置:—pic是進(jìn)程間通信的支持,可以和主機(jī)共享
五、容器的網(wǎng)絡(luò)
A.容器自帶網(wǎng)絡(luò)
1.通過(guò)docker network ls來(lái)查看,包括bridge、host 、none
B.網(wǎng)絡(luò)詳情
1.通過(guò)docker network inspect <net>來(lái)查看本機(jī)的網(wǎng)絡(luò)信息
2.當(dāng)啟動(dòng)一個(gè)容器時(shí),都會(huì)在全局注冊(cè)相關(guān)的網(wǎng)絡(luò)信息
C.用戶自定義網(wǎng)絡(luò)
1.包括三種:橋接網(wǎng)絡(luò)、Overlay網(wǎng)絡(luò)、插件網(wǎng)絡(luò)
2.橋接網(wǎng)絡(luò):
系統(tǒng)默認(rèn)的橋接是docker0
使用docker network create —driver bridge mynet創(chuàng)建mynet橋接網(wǎng)絡(luò)
通過(guò)—net屬性將容器掛接到mynet中
在同一個(gè)橋接下,形成了一個(gè)私網(wǎng),相互間是可以通信的,但這僅限于在同一臺(tái)主機(jī)上
2.Overlay網(wǎng)絡(luò):
Overlay是一種虛擬交接技術(shù),主要是解決不同IP地址段之間的網(wǎng)絡(luò)通信問(wèn)題,Docker使用的Overlay技術(shù)是VXLAN,是借助于libnetwork實(shí)現(xiàn)的
Overlay需要一個(gè)K-V服務(wù)來(lái)存儲(chǔ)相關(guān)的主機(jī)信息,可以使用Consul、Etcd和ZooKeeper,Consul是默認(rèn)的
Overlay主機(jī)還必須 開(kāi)放UDP/4789和TCP/UDP/7946,分別用作數(shù)據(jù)通道和控制通道
六、容器的數(shù)據(jù)
A.數(shù)據(jù)卷
1.數(shù)據(jù)卷提供了一種主機(jī)和容器共享數(shù)據(jù)的方式,有些時(shí)候需要用它來(lái)做持久化和數(shù)據(jù)共享。當(dāng)做持久化時(shí),通常數(shù)據(jù)卷都會(huì)比較大,可以將其放在單獨(dú)的磁盤、卷或者陣列上,這個(gè)時(shí)候容器只是一個(gè)執(zhí)行環(huán)境。當(dāng)做數(shù)據(jù)共享時(shí),可以用于開(kāi)發(fā)和測(cè)試分布式系統(tǒng),如需要用到共享盤、處理fencing等
2.創(chuàng)建數(shù)據(jù)卷:主要通過(guò)-v屬性來(lái)指定,-v [主機(jī)目錄](méi):[容器目錄](méi)
3.任何時(shí)候都不要將宿主機(jī)的根目錄映射到容器內(nèi)部
B.使用數(shù)據(jù)型容器
1.把容器的卷分享給另一個(gè)容器用
2.創(chuàng)建一個(gè)包含外部卷的容器,只需要create即可
3.在另一個(gè)容器中通過(guò)—volumes-from來(lái)映射
C.備份、還原和遷移數(shù)據(jù)卷
1.-v $(pwd):xxxx,$(pwd)表示當(dāng)前路徑
D.容器和代碼進(jìn)行關(guān)聯(lián)
1.數(shù)據(jù)卷的幾個(gè)特點(diǎn):
數(shù)據(jù)卷在容器創(chuàng)建時(shí)進(jìn)行初始化
數(shù)據(jù)卷既可以共享,也可以在容器之間重用
對(duì)于數(shù)據(jù)卷的讀寫是直接下發(fā)的
Commit命令不會(huì)將改動(dòng)保存到鏡像中
即使容器被刪除了,數(shù)據(jù)卷仍然存在,因此這一塊需要特別注意,避免產(chǎn)生垃圾數(shù)據(jù)卷
七、鏡像倉(cāng)庫(kù)
A.倉(cāng)庫(kù)相關(guān)的Docker命令
1.docker login -u username -p password,登錄docker hub或第三方庫(kù)
2.docker search MySQL,查找mysql相關(guān)的庫(kù)
3.docker pull mysql,拉取mysql鏡像
4.docker push [OPTIONS] [server/][user/] image name[:TAG],提交鏡像
八、鏡像和容器的存儲(chǔ)結(jié)構(gòu)
A.鏡像、容器和存儲(chǔ)驅(qū)動(dòng)的關(guān)系
1.每個(gè)鏡像都由多個(gè)鏡像層組成,這些鏡像層是只讀的,從下往上,以棧的方式組合在一起,組成容器的根文件系統(tǒng)
2.容器運(yùn)行時(shí),所有文件變化 的數(shù)據(jù)都保存在容器層中,如新建文件、修改文件、刪除文件
3.Docker在管理鏡像和容器時(shí),使用寫時(shí)復(fù)制技術(shù),寫時(shí)復(fù)制采用了共享和復(fù)制,針對(duì)相同的數(shù)據(jù),系統(tǒng)只保留一份數(shù)據(jù),所有操作都訪問(wèn)這一份數(shù)據(jù)。當(dāng)有操作需要修改或添加數(shù)據(jù)時(shí),操作系統(tǒng)會(huì)把這部分?jǐn)?shù)據(jù)復(fù)制到新的地方,這個(gè)操作會(huì)在新的數(shù)據(jù)區(qū)修改或添加數(shù)據(jù),其他操作仍然在舊的數(shù)據(jù)區(qū)讀取原始數(shù)據(jù)
4.docker history命令,列出鏡像的層信息
5.定時(shí)復(fù)制技術(shù)節(jié)約存儲(chǔ)空間,加速容器的啟動(dòng)時(shí)間,
6.數(shù)據(jù)卷是宿主機(jī)上的一個(gè)文件或者目錄,啟動(dòng)容器時(shí),會(huì)把這個(gè)文件或目錄掛載到容器中。數(shù)據(jù)卷不受存儲(chǔ)驅(qū)動(dòng)程序管理,數(shù)據(jù)卷中的數(shù)據(jù)讀寫操作會(huì)練過(guò)存儲(chǔ)驅(qū)動(dòng)程序,直接工作在宿主機(jī)的文件系統(tǒng)中。容器中掛載 的數(shù)據(jù)卷數(shù)量沒(méi)有限制 ,多個(gè)容器也可以掛載同一個(gè)數(shù)據(jù)卷
B.如何選擇存儲(chǔ)驅(qū)動(dòng)
1.使用哪種存儲(chǔ)驅(qū)動(dòng)取決于用戶在宿主機(jī)上使用何種文件系統(tǒng),一些存儲(chǔ)驅(qū)動(dòng)可以工作在不同的后端文件系統(tǒng)上,另一些存儲(chǔ)驅(qū)動(dòng)必須使用相同的后端文件系統(tǒng)
2.—storage-driver=<name>,設(shè)置存儲(chǔ)驅(qū)動(dòng)
3.考慮因素:沒(méi)有哪種存儲(chǔ)驅(qū)動(dòng)能夠適用于所有場(chǎng)景;每種存儲(chǔ)驅(qū)動(dòng)都在不斷升級(jí);
4.選擇方向:穩(wěn)定性;熟悉性;成熟性;Overlay和Overlay2
C.AUFS存儲(chǔ)驅(qū)動(dòng)
1.AUFS是一種Union FS,將不同的目錄合并成一個(gè)目錄,做成一個(gè)虛擬文件系統(tǒng)。AUFS為每個(gè)目錄設(shè)置不同權(quán)限 ,并且可以實(shí)時(shí)的添加、刪除、修改已經(jīng)掛載好的目錄
D.Devicemapper存儲(chǔ)驅(qū)動(dòng)
1.Devicemapper把鏡像和容器存儲(chǔ)在虛擬設(shè)備上,使用按需分配、寫時(shí)復(fù)制快照技術(shù)管理鏡像和容器,對(duì)塊設(shè)備進(jìn)行操作,而不是整個(gè)文件
2.在生產(chǎn)環(huán)境中應(yīng)該使用Devicemapper的direct-lvm模式,該模式下,Devicemapper使用真實(shí)的塊設(shè)備為存儲(chǔ)介質(zhì),在塊設(shè)備上建立thin pool
E.Btrfs存儲(chǔ)驅(qū)動(dòng)
1.Btrfs是下一代存儲(chǔ)技術(shù),使用了按需分配、寫時(shí)復(fù)制和快照技術(shù)管理鏡像和容器,目前還處于開(kāi)發(fā)階段,生產(chǎn)環(huán)境慎用
2.Btrfs把鏡像層和容器層保存在獨(dú)立的子卷或快照中,鏡像中的基礎(chǔ)層作為一個(gè)子卷保存,其他鏡像卷和容器卷都作為快照保存
F.ZFS存儲(chǔ)驅(qū)動(dòng)
1.ZFS是下一代文件系統(tǒng),提供卷管理、快照、校驗(yàn)、壓縮、消重和多地復(fù)制等功能,如果開(kāi)發(fā)者沒(méi)有使用過(guò)ZFS,建議不要在生產(chǎn)環(huán)境使用
G.Overlay存儲(chǔ)驅(qū)動(dòng)
1.OverlayFS是一種聯(lián)合文件系統(tǒng),Linux內(nèi)核4.0及以上版本支持Overlay2存儲(chǔ)驅(qū)動(dòng)
2.Overlay/Overlay2存儲(chǔ)驅(qū)動(dòng)很快,比AFUS和Devicemapper都要快,在某些場(chǎng)景下甚至快于Btrfs
九、定制Docker Daemon
A.修改Docker Daemon的三種方式
1.三種方式:命令行修改、修改啟動(dòng)項(xiàng)和修改配置文件,命令行時(shí)Docker Daemon運(yùn)行在前端,適合調(diào)試,在生產(chǎn)環(huán)境中應(yīng)使用另外兩種方式
B.倉(cāng)庫(kù)相關(guān)配置
1.—disable-legacy-registry選項(xiàng):設(shè)置不從舊版本的鏡像倉(cāng)庫(kù)下載鏡像
2.—registry-mirror選項(xiàng):指定鏡像倉(cāng)庫(kù),可以設(shè)置多個(gè)鏡像倉(cāng)庫(kù)
3.—insecure-registry選項(xiàng):設(shè)置可以從不安全的鏡像倉(cāng)庫(kù)下載鏡像
C.安全相關(guān)配置
1.-p,—pidfile選項(xiàng):設(shè)置Docker Daemon使用的pid文件,默認(rèn)為/var/run/docker.pid
2.-H,—host選項(xiàng):配置Docker Daemon監(jiān)聽(tīng)的IP和端口
3.—tls,—tlscacert,—tlscert,—tlskey,—tlsverify選項(xiàng):配置遠(yuǎn)程通信的TLS通信及相關(guān)證書
D.日志相關(guān)
1.-D,—debug選項(xiàng):開(kāi)房調(diào)試模式
2.—log-level,—log-driver,—log-opt選項(xiàng):設(shè)置日志等級(jí)、日志格式等信息
E.存儲(chǔ)相關(guān)配置
1.-g,—graph選項(xiàng):設(shè)置Docker運(yùn)行時(shí)的根目錄
2.—storage-driver選項(xiàng):配置Docker Daemon的存儲(chǔ)驅(qū)動(dòng)
3.—ostorage-opt選項(xiàng):配置存儲(chǔ)驅(qū)動(dòng)的參數(shù)
F.網(wǎng)橋相關(guān)配置
1.—big選項(xiàng):設(shè)置docker0的IP和子網(wǎng)掩碼
2.—fixed-cidr,—fixed-cidr-v6選項(xiàng):配置容器的IP范圍
3.—mtu選項(xiàng):配置docker0的最大會(huì)轉(zhuǎn)單元長(zhǎng)度
4.-b,—bridge選項(xiàng):配置網(wǎng)橋
G.容器與外部通信
1.—ip-forward選項(xiàng):會(huì)自動(dòng)修改宿主機(jī)的ip_forward,默認(rèn)true
2.—iptables選項(xiàng):會(huì)在iptables中追加轉(zhuǎn)發(fā)規(guī)則,默認(rèn)true
3.—ip,—ipv6選項(xiàng):設(shè)置IP地址
H.其他網(wǎng)絡(luò)配置
1.—default-gateway、—default-gateway-v6選項(xiàng):設(shè)置網(wǎng)關(guān)
I.excdriver配置
1—exec-opt選項(xiàng):設(shè)置如何管理容器的CGroups,默認(rèn)值為cgroupfs,可選systemd
2.—exec-root選項(xiàng):設(shè)置execdriver使用的狀態(tài)文件的根目錄,默認(rèn)為/var/run/docker
J.其他配置
1.—default-ulimit,設(shè)置一個(gè)用戶能夠使用的最大進(jìn)程數(shù),啟動(dòng)容器時(shí)為—ullimit參數(shù)
十、如何編寫Dockerfile
A.本地編譯鏡像
1.加入.dockerignore,過(guò)濾不需要的文件
2.使用指定Dockerfile文件,-f
3.-t用于打標(biāo)簽
4.—no-cache,編譯時(shí)不使用緩存
2.dockerignore文件
1.和git類似
C.Dockerfile格式
1.每條指令由指令+參數(shù)組成,中間以空格隔離,#為注釋
2.一般指令大寫,參數(shù)小寫,第一條指令必須是FROM,設(shè)置基礎(chǔ)鏡像
D.Dockerfile指令詳解
1.FROM指令:設(shè)置基礎(chǔ)鏡像,可以設(shè)置多個(gè)基礎(chǔ)鏡像,兩條FROM指令之間的內(nèi)容放在一個(gè)鏡像中,tag和digest是可選項(xiàng),忽略tag會(huì)使用latest鏡像
2.MAINTAINER指令:設(shè)置鏡像作者
3.RUN指令:生成一個(gè)新的容器,在容器中執(zhí)行腳本,腳本正常執(zhí)行完后,Docker daemon會(huì)把該容器提交為一個(gè)中間鏡像,供后面的指令使用
4.CMD指令:設(shè)置容器的啟動(dòng)集合,只能有一條CMD指令,如果寫了多條,只有最后一條生效
5.LABEL指令:設(shè)置鏡像的標(biāo)簽,可以通過(guò)docker inspect查看標(biāo)簽,每個(gè)標(biāo)簽采用Key=Value的格式,不同標(biāo)簽之前通過(guò)空格隔離。每條指令會(huì)生成一個(gè)鏡像層,一個(gè)鏡像只能有127層,因此最好使用一條LABEL指令設(shè)置完成
6.EXPOSE指令:設(shè)置鏡像暴露端口,記錄容器啟動(dòng)時(shí)監(jiān)聽(tīng)在哪些端口
7.ENV指令:設(shè)置鏡像中的環(huán)境變量,支持讀取環(huán)境變量的指令:ADD、COPY、ENV、EXPOSE、LABEL、USER、WORKDIR、VOLUME、STOPSIGNAL、ONBUILD
8.ADD指令:把文件復(fù)制到鏡像中,ADD <src>..<dest>,src必須在編譯目錄中,src為URL時(shí),如果dest結(jié)尾沒(méi)有/則dest作為文件名保存在/tmp,如果有/,則dest作為存儲(chǔ)目錄,如果src為目錄,復(fù)制目錄內(nèi)所有內(nèi)容,包括文件系統(tǒng)的元數(shù)據(jù),如果scr是壓縮文件(identity,gzip,bzip2,xz)會(huì)解壓成目錄,如果src是文件則復(fù)制文件和元數(shù)據(jù),如果src使用了通配符或是一個(gè)文件列表,則dest必須以/結(jié)尾,如果dest不以/結(jié)尾則為文件名,如果dest不存在,則ADD會(huì)自動(dòng)創(chuàng)建dest及缺失的上級(jí)目錄
9.COPY指令:把文件或目錄復(fù)制到鏡像中
10.ENTRYPOINT指令:設(shè)置容器的入口程序,計(jì)算器程序是容器啟動(dòng)時(shí)執(zhí)行的程序,docker run命令中最后的命令將作為參數(shù)傳遞給入口程序,只有最后的ENTRYPOINT生效
11.VOLUMN指令:設(shè)置容器的掛載點(diǎn)
12.USER指令:設(shè)置執(zhí)行RUN、CMD和ENTRYPOINT的用戶名或UID
13.WORKDIR指令:設(shè)置RUN、CMD、ENTRYPOINT、ADD和COPY指令的工作目錄
14.ARG指令:設(shè)置編譯變量
15.ONBUILD指令:設(shè)置子鏡像的編譯鉤子指令,當(dāng)從父鏡像生成子鏡像時(shí),子鏡像編譯過(guò)程中,首先會(huì)執(zhí)行父鏡像中的ONBUILD指令
16.STOPSIGNAL指令:設(shè)置容器退出時(shí),Docker Daemon向容器發(fā)送的信號(hào)量
E、CMD、ENTRYPOINT和RUN的區(qū)別
1.RUN指令是設(shè)置編譯鏡像時(shí)執(zhí)行的腳本和程序,鏡像編譯完成,RUN指令的生命周期結(jié)束
2.CMD叫作容器默認(rèn)啟動(dòng)命令,在docker run末尾添加Command即可替換掉CMD設(shè)置的啟動(dòng)程序
3.ENTRYPOINT叫做入口程序,不能被docker run末尾的Command替換,末尾的Command會(huì)被當(dāng)做字符串,傳遞給ENTRYPOINT作為參數(shù),可以在docker run中加入—entrypoint替換鏡像中的入口程序
4.一些規(guī)則 :
在Dockerfile中,應(yīng)至少有一條CMD或ENTRYPOINT指令
當(dāng)使用容器作為一個(gè)程序容器時(shí),應(yīng)使用ENTRYPOINT定義入口程序
在Dockerfile中,如果同時(shí)定義了ENTRYPOINT和CMD,CMD會(huì)作為參數(shù)傳遞給ENTRYPOINT
十一、Dockerfile最佳實(shí)踐
A.基本原則
1.容器的生命期是短暫的
2.使用.dockerignore
3.只安裝需要的包
4.每個(gè)容器只運(yùn)行一個(gè)進(jìn)程
5.減少鏡像層
6.把多個(gè)參數(shù)排在不同的行中
7.編譯緩存:Docker Daemon從基礎(chǔ)鏡像編譯出新的鏡像;針對(duì)ADD和COPY指令,Docker Daemon會(huì)檢查鏡像層中所有源文件的元數(shù)據(jù)和文件內(nèi)容;除了ADD和COPY指令外,Docker Daemon在鏡像緩存中尋找鏡像層時(shí),不會(huì)檢查文件
B.Dockerfile指令最佳實(shí)踐
1.RUN指令:具有可讀性,apt-get的install和update必須在一行執(zhí)行,盡量在一條指令中安裝需要的包
2.CMD指令:應(yīng)盡量使用JSON格式,不要使用CMD設(shè)置ENTRYPOINT的參數(shù)
3.EVN指令:使用容器對(duì)外提供服務(wù)時(shí),最好通過(guò)環(huán)境變量設(shè)置服務(wù)相關(guān)配置
4.ADD和COPY指令:推薦使用COPY指令,因?yàn)楣δ芨鼏我唬瑑H把編譯目錄中的文件復(fù)制到鏡像中,而ADD還會(huì)解壓文件并支持遠(yuǎn)端復(fù)制
5.ENTRYPOINT指令:當(dāng)需要把容器當(dāng)作一個(gè)命令行工具使用時(shí),最好通過(guò)ENTRYPOINT指令設(shè)置鏡像的入口程序
6.VOLUME指令:如果需要在容器中,對(duì)數(shù)據(jù)庫(kù)、配置文件、用戶上傳文件夾等文件目錄做數(shù)據(jù)持久化,可以使用VOLUME指令導(dǎo)出這些文件和目錄;容器會(huì)在主機(jī)的/var/lib/docker/volumes目錄中創(chuàng)建對(duì)應(yīng)的目錄掛載到容器中;
7.WORKDIR指令:設(shè)置Dockerfile中其他指令的工作目錄,就使用絕對(duì)路徑
8.USER指令:如果容器中的應(yīng)用程序不需要特殊權(quán)限,則可以通過(guò)USER指令把應(yīng)用程序的所有者設(shè)置為非root用戶
9.ONBUILD指令:在基礎(chǔ)鏡像中設(shè)置鉤子指令,子鏡像會(huì)先執(zhí)行基礎(chǔ)鏡像的ONBUILD設(shè)置的指令
C.如何減小鏡像體積
1.避免apt/yum update
2.每條指令都會(huì)生成一個(gè)鏡像層,每個(gè)鏡像層都會(huì)占用一些磁盤空間
3.應(yīng)該在一條RUN指令中,更新安裝源、安裝程序、清理緩存,這樣可以減少鏡像體積
十二、使用容器提供服務(wù)
A.使用容器提供數(shù)據(jù)庫(kù)服務(wù)
1.查看啟動(dòng)mysql容器時(shí)可以添加的選項(xiàng):docker run -it —rm mysql —verbose —help
2.-e EVNIRONMENT,可以配置環(huán)境變量
3.mysql相關(guān)目錄:/etc/mysql/my.cnf、/etc/mysql/conf.d/、/var/lib/mysql/
4.MongoDB相關(guān)目錄:/data/db/
B.使用容器提供Web服務(wù)
1.apache相關(guān)目錄:/usr/local/apache2/htdocs/、/usr/local/apache2/conf/httpd.conf
2.gitlab/gitlab-ce(git倉(cāng)庫(kù))相關(guān)目錄:/etc/gitlab,配置文件、/var/opt/gitlab,保存git所有版本庫(kù)、/var/log/gitlab,日志
十三、建立私有鏡像倉(cāng)庫(kù)
1.registry,鏡像倉(cāng)庫(kù)容器,鏡像存儲(chǔ)目錄:/var/lib/registry,配置文件:/etc/docker/registry/config.yml
十四、Docker常見(jiàn)問(wèn)題
1.虛擬化就是在一臺(tái)主機(jī)上運(yùn)行多個(gè)相互隔離的實(shí)例,這包含兩層意思,一是相互隔離,即彼此之間沒(méi)有影響;二是實(shí)例,既可以是一個(gè)完整的操作系統(tǒng)
到此,相信大家對(duì)“Docker原理、架構(gòu)與應(yīng)用是什么”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
網(wǎng)站題目:Docker原理、架構(gòu)與應(yīng)用是什么
鏈接地址:http://www.chinadenli.net/article32/ieospc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、App開(kāi)發(fā)、電子商務(wù)、自適應(yīng)網(wǎng)站、品牌網(wǎng)站建設(shè)、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)