一、Docker鏡像介紹
創(chuàng)新互聯(lián)專注于西平企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站開(kāi)發(fā),商城建設(shè)。西平網(wǎng)站建設(shè)公司,為西平等地區(qū)提供建站服務(wù)。全流程定制開(kāi)發(fā),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)1、鏡像組成介紹
分層構(gòu)建的,底層的是bootfs,上面的是rootfs
bootfs的類型可以是btrfs、aufs、lxc,還需要一個(gè)內(nèi)核,但是這個(gè)內(nèi)核僅僅是用于啟動(dòng)容器的用戶控件的
rootfs表現(xiàn)為一個(gè)根文件系統(tǒng),這里面包括很多的文件和目錄
在啟動(dòng)容器的時(shí)候,這兩層都是以只讀的方式來(lái)掛載的。
構(gòu)建鏡像的基本流程
先準(zhǔn)備一個(gè)bootfs
然后安裝一個(gè)最小系統(tǒng)(base image)
在系統(tǒng)安裝應(yīng)用,如果是構(gòu)建apache的鏡像,那么就在base image上安裝apache
注意:
鏡像都是只讀的
當(dāng)啟動(dòng)容器的時(shí)候,會(huì)在鏡像的基礎(chǔ)上再添加一個(gè)當(dāng)前容器的專用層,這層是讀寫(xiě)的
在刪除容器的時(shí)候,這個(gè)容器的專屬的這個(gè)讀寫(xiě)層就會(huì)被刪除,所以默認(rèn)容器無(wú)法實(shí)現(xiàn)數(shù)據(jù)的持久存儲(chǔ)。
2、鏡像倉(cāng)庫(kù)
前面一講過(guò)了,專門用來(lái)存儲(chǔ)docker iamge的哪個(gè)位置稱之為 docker registry,在啟動(dòng)容器的時(shí)候,本地的docker daemon會(huì)從指定的docker registry下載鏡像,并完成啟動(dòng)。
docker registry是可以分為多類 的
Vendor registry:官方的倉(cāng)庫(kù)
Mirror registry:像阿里云之類的鏡像加速
Private registry:用戶自己創(chuàng)建鏡像倉(cāng)庫(kù),比如企業(yè)內(nèi)部需要大規(guī)模部署時(shí)候,可以自己定制鏡像,并放到自己倉(cāng)庫(kù)中
一般的registry有兩部分組成:
第一部分:Repository
一個(gè)registry可以有多個(gè)repository
Repository可以分為頂級(jí)倉(cāng)庫(kù)和用戶倉(cāng)庫(kù),用戶倉(cāng)庫(kù)的命名是:用戶名/倉(cāng)庫(kù)名
Repository的名稱一般就是應(yīng)用的名稱,而且在Repository中有應(yīng)用的多個(gè)版本
第二部分:index
維護(hù)賬戶信息
提供檢索端口
3、從鏡像倉(cāng)庫(kù)下載鏡像的方法
格式如下
docker?pull?registry:port這里是指定從哪個(gè)docker服務(wù)器來(lái)獲取鏡像,如果用的是docker官方自己的倉(cāng)庫(kù)(hub.docker.com),那么這里可以省略。
namespace這里是指定來(lái)自于哪個(gè)名稱空間,也就是哪個(gè)用戶的倉(cāng)庫(kù), 如果的頂級(jí)的倉(cāng)庫(kù),那么這個(gè)也可以省略
除了https://hub.docker.com之后,其實(shí)還有別的,例如:https://hub.daocloud.io/,再例如CoreOS所維護(hù)的:https://quay.io
因?yàn)椴皇悄J(rèn)倉(cāng)庫(kù), 因此在下載鏡像的時(shí)候,需要指定地址
從quay.io 下載 flannel舉例如下
第一步:登錄https://quay.io,搜索flannel
第二步:找到項(xiàng)目地址
第三步:查看下載鏡像的方法
這種方法是不能用的,因?yàn)樾枰付?biāo)簽
第四步:查看具體的標(biāo)簽
第五步:下載鏡像
[root@host1?~]#?docker?pull?quay.io/coreos/flannel:v0.11.0-s390x[root@host1?~]#?docker?image?ls REPOSITORY???????????????TAG?????????????????IMAGE?ID????????????CREATED?????????????SIZE busybox??????????????????latest??????????????b534869c81f0????????2?weeks?ago?????????1.22MB nginx????????????????????1.14-alpine?????????8a2fb25a19f5????????8?months?ago????????16MB quay.io/coreos/flannel???v0.10.0-s390x???????463654e4ed2d????????23?months?ago???????47MB二、制作鏡像
1、制作鏡像方法種類
基于dockerfile
基于現(xiàn)有的容器:基于容器做鏡像,一般就是先安裝一個(gè)最小容器,然后在這個(gè)容器中安裝應(yīng)用程序,然后將這個(gè)安裝了程序的容器做成鏡像就可以了
基于docker hub的自動(dòng)創(chuàng)建功能
2、基于現(xiàn)有容器做鏡像
第一步:?jiǎn)?dòng)一個(gè)busybox容器,并創(chuàng)建一個(gè)html頁(yè)面
[root@host1?~]#?docker?run?--name?img1?-it?busybox /?#?mkdir?/data/html?-p /?#?echo?"test?page[v1.0]">>/data/html/index.html第二步:再開(kāi)一個(gè)終端,將容器制作成鏡像
制作鏡像用命令commit
要制作鏡像的容器不能停止
將容器制作為鏡像的時(shí)候,最好讓容器暫停一下,這需要用選項(xiàng)-p
默認(rèn)制作的鏡像沒(méi)有tag,也不屬于任何的repository
第三步:給鏡像打標(biāo)簽
打標(biāo)簽用tag命令
一個(gè)鏡像可以有多個(gè)不同的標(biāo)簽
再打個(gè)標(biāo)簽
[root@host1?~]#?docker?tag?cd7cb2a77440?zxhk/httpd:latest [root@host1?~]#?docker?image?ls REPOSITORY???????????????TAG?????????????????IMAGE?ID????????????CREATED?????????????SIZE zxhk/httpd???????????????latest??????????????cd7cb2a77440????????3?minutes?ago???????1.22MB zxhk/httpd???????????????v1-0????????????????cd7cb2a77440????????3?minutes?ago???????1.22MB注意:
一個(gè)鏡像有多個(gè)標(biāo)簽的話,如何進(jìn)行刪除,需要將這多個(gè)鏡像都刪除才行,類似于系統(tǒng)的硬鏈接
第四步:基于這個(gè)進(jìn)行啟動(dòng)一個(gè)容器,并在容器中運(yùn)行apache
[root@host1?~]#?docker?run?--name?newhttpd?-it?zxhk/httpd:latest /?#?httpd?-f?-h?/data/html此時(shí),然后apache能運(yùn)行,但是每次新啟動(dòng)一個(gè)容器,都需手動(dòng)啟動(dòng)apache,接下來(lái)對(duì)鏡像進(jìn)行調(diào)整,實(shí)現(xiàn)啟動(dòng)容器后自動(dòng)運(yùn)行apache
第五步:升級(jí)鏡像實(shí)現(xiàn)自動(dòng)運(yùn)行內(nèi)部的apache
先看看我們做的鏡像的詳細(xì)信息
[root@host1?~]#?docker?inspect?zxhk/httpd:latest其中有一部分是Cmd,其中就是容器運(yùn)行起來(lái)以后要執(zhí)行的命令,如下
"Cmd":?[ ??????"sh" ],commit創(chuàng)建鏡像的時(shí)候會(huì)可以通過(guò)選項(xiàng)來(lái)設(shè)置這些內(nèi)容
-a:指定作者
-c:更改基于鏡像啟動(dòng)后執(zhí)行的命令
-m:描述系想你
-p:暫停
再重新做個(gè)鏡像
[root@host1?~]#?docker?commit?\ >?-a?"zxhk<237745635@qq.com>"?\ >?-c?'CMD?["/bin/httpd","-f","-h","/data/html"]'?\ >?-p?img3?zxhk/httpd:v2.0用這個(gè)鏡像啟動(dòng)一個(gè)容器
[root@host1?~]#?docker?run?--rm?--name?test-httpd?zxhk/httpd:v2.0看一下容器中執(zhí)行的命令
[root@host1?~]#?docker?ps CONTAINER?ID????????IMAGE???????????????COMMAND??????????????????CREATED?????????????STATUS??????????????PORTS???????????????NAMES 243f050288bd????????zxhk/httpd:v2.0?????"/bin/httpd?-f?-h?/d…"???16?seconds?ago??????Up?15?seconds???????????????????????????test-httpd看一下地址信息
[root@host1?~]#?docker?inspect?243?|?grep?IPAddress ????????????"SecondaryIPAddresses":?null, ????????????"IPAddress":?"172.17.0.4", ????????????????????"IPAddress":?"172.17.0.4",在宿主機(jī)訪問(wèn)測(cè)試容器中的站點(diǎn)
[root@host1?~]#?curl?172.17.0.4 test?page[v1.0]至此,鏡像創(chuàng)建完成
三、將制作的鏡像上傳到docker hub中
1、在https://hub.docker.com/注冊(cè)用戶
需要爬過(guò)墻頭才能注冊(cè),你懂的!?。?/p>
注冊(cè)賬戶過(guò)程-略
2、在docker hub上創(chuàng)建repository和registry
?
注意:
創(chuàng)建的倉(cāng)庫(kù)名稱必須要和鏡像的名稱一致
3、向自己的倉(cāng)庫(kù)中上傳鏡像文件
第一步:登陸docker hub【我的用戶名是zxhk】
[root@localhost?~]#?docker?login?-uzxhk Password:? WARNING!?Your?password?will?be?stored?unencrypted?in?/root/.docker/config.json. Configure?a?credential?helper?to?remove?this?warning.?See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login?Succeeded第二步:上傳鏡像到hub【此處我們上傳httpd鏡像的二個(gè)版本都傳上去】
[root@localhost?~]#?docker?image?ls REPOSITORY???????????????TAG?????????????????IMAGE?ID????????????CREATED?????????????SIZE zxhk/httpd???????????????v2.0????????????????89a647171235????????18?hours?ago????????1.22MB zxhk/httpd???????????????latest??????????????cd7cb2a77440????????19?hours?ago????????1.22MB zxhk/httpd???????????????v1-0????????????????cd7cb2a77440????????19?hours?ago????????1.22MB[root@localhost?~]#?docker?push?zxhk/httpd:v2.0 The?push?refers?to?repository?[docker.io/zxhk/httpd] f577c88ef366:?Pushed? eac247cb7af5:?Mounted?from?library/busybox? v2.0:?digest:?sha256:c1c3e604e37652595563b8dc2be877620c77314c925115c7ba35f9969b1a77a0?size:?734[root@localhost?~]#?docker?push?zxhk/httpd:v1-0第三步:在docker hub上查看一下
第四步:使用docker hub中我們自己的鏡像
在docker hub中已經(jīng)標(biāo)識(shí)了鏡像的使用方法,如下:
為了效果,現(xiàn)將本地的鏡像刪除
[root@localhost?~]#?docker?rmi?89?zxhk/httpd:v1-0 [root@localhost?~]#?docker?rmi?89?zxhk/httpd:v2.0[root@localhost?~]#?docker?image?ls? REPOSITORY???????????????TAG?????????????????IMAGE?ID????????????CREATED?????????????SIZE busybox??????????????????latest??????????????b534869c81f0????????2?weeks?ago?????????1.22MB下載鏡像啟動(dòng)容器
[root@localhost?~]#?docker?pull?zxhk/httpd:v2.0 [root@localhost?~]#?docker?image?ls REPOSITORY???????????????TAG?????????????????IMAGE?ID????????????CREATED?????????????SIZE zxhk/httpd???????????????v2.0????????????????89a647171235????????19?hours?ago????????1.22MB busybox??????????????????latest??????????????b534869c81f0????????2?weeks?ago?????????1.22MB [root@localhost?~]#?docker?run?--rm?--name?web1?89a查看一下容器的信息
[root@localhost?~]#?docker?ps? CONTAINER?ID????????IMAGE???????????????COMMAND??????????????????CREATED?????????????STATUS??????????????PORTS???????????????NAMES 0ec8687bb487????????89a?????????????????"/bin/httpd?-f?-h?/d…"???16?seconds?ago??????Up?15?seconds???????????????????????????web1[root@localhost?~]#?docker?inspect?0ec?|?grep?"IPAddr" ????????????"SecondaryIPAddresses":?null, ????????????"IPAddress":?"172.17.0.2", ????????????????????"IPAddress":?"172.17.0.2",[root@localhost?~]#?curl?172.17.0.2 test?page[v1.0]四、將制作的鏡像上傳到阿里云的鏡像倉(cāng)庫(kù)中
1、在阿里云注冊(cè)用戶
略
2、進(jìn)入容器鏡像倉(cāng)庫(kù)
3、使用阿里云做鏡像加速的方法
去docker配置文件中添加一個(gè)鏡像文件
[root@localhost?~]#?vim?/etc/docker/daemon.json { ????"registry-mirrors":?[ ????????"https://registry.docker-cn.com", ????????"https://mzxx8xy8.mirror.aliyuncs.com" ????] }重啟服務(wù)
[root@localhost?~]#?systemctl?daemon-reload [root@localhost?~]#?systemctl?restart?docker4、使用阿里云創(chuàng)建倉(cāng)庫(kù)
看看鏡像倉(cāng)庫(kù)的使用方法
5、向阿里云倉(cāng)庫(kù)上傳鏡像
第一步:使用憑證登錄阿里云
[root@localhost?~]#?sudo?docker?login?--username=zxhk?registry.cn-hangzhou.aliyuncs.com Password:? WARNING!?Your?password?will?be?stored?unencrypted?in?/root/.docker/config.json. Configure?a?credential?helper?to?remove?this?warning.?See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login?Succeeded第二步:上傳鏡像
上傳到阿里云的鏡像需要進(jìn)行先打個(gè)標(biāo)簽
第三步:從阿里云拉取鏡像
[root@localhost?~]#?sudo?docker?pull?registry.cn-hangzhou.aliyuncs.com/zxhk1/httpd:v2.0另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。