真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Docker第三回(鏡像的制作)

一、Docker的基礎(chǔ)架構(gòu)形式

創(chuàng)新互聯(lián)建站于2013年創(chuàng)立,先為欽南等服務(wù)建站,欽南等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為欽南企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

客戶端(docker run |create等)通過httpd或https和一個(gè)運(yùn)行了docker host守護(hù)進(jìn)程的主機(jī)(docker daemon)通信。

docker daemon接收到了客戶端的創(chuàng)建或啟動(dòng)容器的命令后,將在本地查找鏡像創(chuàng)建或啟動(dòng)容器(在一個(gè)docker host上可以啟動(dòng)多個(gè)容器)。

如果本地沒有鏡像,docker host會(huì)連接到配置的遠(yuǎn)程repository(一般默認(rèn)repo是docker hub)上下載鏡像到本地的一個(gè)專用的文件系統(tǒng),在docker1.18使用的是overlay2,之前使用的是aufs/btrfs/lxc。鏡像本身是只讀的。

而后開始根據(jù)客戶端命令創(chuàng)建或運(yùn)行容器。

1.1、docker鏡像

根據(jù)上面的架構(gòu),docker鏡像是docker運(yùn)行容器的一個(gè)重要的組件。docker鏡像含有啟動(dòng)容器所需要的文件系統(tǒng)及其內(nèi)容。因此,鏡像的作用就是創(chuàng)建并啟動(dòng)docker容器,其特點(diǎn)是;

1、采用分層構(gòu)建機(jī)制,最底層為bootfs,其次為rootfs

      bootfs:用于系統(tǒng)引導(dǎo)的文件系統(tǒng),包括bootloader和kernel,容器系統(tǒng)啟動(dòng)完成會(huì)被卸載以節(jié)約內(nèi)存資源

      rootfs:位于bootfs之上,表現(xiàn)為docker容器的根文件系統(tǒng)。每添加一個(gè)軟件,都是一個(gè)獨(dú)立的層

                          在linux傳統(tǒng)模式中,系統(tǒng)啟動(dòng)時(shí),內(nèi)核掛載rootfs時(shí),會(huì)首先將其掛載為“只讀”模式(為了避免自檢遇到錯(cuò)誤而刪除文件),完整性自檢完成后再將其掛載為讀寫模式

                          在docker中,rootfs由內(nèi)核掛載為“只讀模式”,而后通過“聯(lián)合掛載”技術(shù)額外掛載一個(gè)“可寫層“。

Docker第三回(鏡像的制作)

容器啟動(dòng)時(shí),必須按照層次加載,首先掛載bootfs,系統(tǒng)啟動(dòng)之后,從內(nèi)存中刪除bootfs,掛載rootfs,其次依次掛載上面的image層,每個(gè)應(yīng)用都是一個(gè)層,這下面的所有層都是只讀的。而后,在最上層掛載一個(gè)可寫層。(對(duì)于一個(gè)容器來說,它的寫操作都只能在這個(gè)可寫層來實(shí)現(xiàn))。他們是疊加在一起掛載的,所以稱之為聯(lián)合掛載。

當(dāng)一個(gè)容器銷毀時(shí)(執(zhí)行docker container rm操作)它的可寫層也將被刪除掉。

1.2、docker文件系統(tǒng)

1、docker鏡像的分層構(gòu)建,聯(lián)合掛載依賴于專有文件系統(tǒng)的支撐才能實(shí)現(xiàn),在早期用到的專有文件系統(tǒng)是aufs(advanced multi-layered unification filesystem):高級(jí)多層統(tǒng)一文件系統(tǒng),aufs是最早被docker用來實(shí)現(xiàn)聯(lián)合掛載的linux文件系統(tǒng),它是UnionFS的重新實(shí)現(xiàn),2006年由junjiro Okajima開發(fā)。由于centos內(nèi)核對(duì)aufs不支持,所以早期使用docker只能使用Ubuntu操作系統(tǒng)。

2、aufs的競(jìng)爭(zhēng)產(chǎn)品是overlayfs,從3.18版本開始被合并到linux內(nèi)核

3、除了aufs,docker還支持btrfs,devicemapper和vfs等

在Ubuntu系統(tǒng)下,docker默認(rèn)使用aufs,而早期在centos7中,用的是devicemapper,現(xiàn)在最新版本的dockercentos用的是overlayfs第二個(gè)版本;overlay2(overlay2是一種抽象的二級(jí)文件系統(tǒng),需要借助于本地文件系統(tǒng);xfs)

1.3、docker registry

我們?nèi)?gòu)建鏡像時(shí),鏡像做好之后應(yīng)該有一個(gè)統(tǒng)一存儲(chǔ)的位置,這個(gè)位置叫docker registry

Docker第三回(鏡像的制作)

1、docker registry分類

Sponsor Registry:第三方的registry,供客戶和Docker社區(qū)使用

Mirror Registry:第三方的registry,只讓客戶使用,比如docker cn加速,阿里云的docker加速器

Vendor Registry:由發(fā)布Docker鏡像的供應(yīng)商提供的registry,比如紅帽,只提供給買了服務(wù)了客戶使用

Private Registry:私有的docker倉(cāng)庫(kù),指用戶自己搭建的docker倉(cāng)庫(kù),只能供內(nèi)部使用

public docker registry:公共的docker倉(cāng)庫(kù),一般沒有做額外的配置,指的就是docker hub

由于第三方registry的鏡像大部分都不符合我們的使用要求,所以我們都要自建registry

2、registry的組成

Registry:

  • 由某特定的docker鏡像的所有迭代版本組成的鏡像倉(cāng)庫(kù),

  • 一個(gè)Registry中可以存在多個(gè)Repository

        Repository可分為“頂層倉(cāng)庫(kù)”和“用戶倉(cāng)庫(kù)”

        用戶倉(cāng)庫(kù)名稱格式為“用戶名/倉(cāng)庫(kù)名”

  • 每個(gè)倉(cāng)庫(kù)可以包含多個(gè)Tag,每個(gè)Tag對(duì)應(yīng)一個(gè)鏡像

Index:

  •     維護(hù)用戶賬戶,鏡像的校驗(yàn)以及公共命名空間的信息

  •     相當(dāng)于為Registry提供了一個(gè)完成用戶認(rèn)證等功能的檢索接口

3、registry的拉取

拉取鏡像使用docker pull命令

docker pull [:]/[/]:

其中registry、port、namespace可省略

registry:是一個(gè)倉(cāng)庫(kù)的web地址,如果不使用默認(rèn)的docker hub倉(cāng)庫(kù),需要指明倉(cāng)庫(kù)地址

port:是倉(cāng)庫(kù)web地址的端口號(hào),默認(rèn)使用443

namespace:代表是哪個(gè)用戶的倉(cāng)庫(kù),如果鏡像是頂級(jí)倉(cāng)庫(kù),namespace就是可省略的,namespace分為三類

    Docker第三回(鏡像的制作)

name:倉(cāng)庫(kù)的名字,和tag一起標(biāo)識(shí)了一個(gè)唯一的鏡像

tag:鏡像的標(biāo)簽,沒有就代表是一個(gè)鏡像的最新版

Docker第三回(鏡像的制作)

其中,nginx為頂層倉(cāng)庫(kù),jwilder/nginx-proxy為用戶的倉(cāng)庫(kù)

例如:

docker pull nginx:1.14        # 沒有指?jìng)}庫(kù)地址默認(rèn)從docker hub上下載nginx1.14版本到本地
docker  pull  quay.io/coreos/flannel:v0.10.0-amd64        #  從quay上拉取鏡像,coreos是namespace,flannel是倉(cāng)庫(kù)名,v0.10.0-amd64是tag

4、鏡像的制作

鏡像的生成途徑有三種

  • Dockerfile

  • 基于容器制作

  • Docker Hub automated builds

4.1、基于容器制作鏡像(在一個(gè)centos鏡像中安裝httpd并設(shè)置啟動(dòng)容器執(zhí)行httpd命令)

首先要啟動(dòng)一個(gè)容器,我去docker hub下載一個(gè)centos的鏡像

1、下載centos鏡像并運(yùn)行

[root@localhost ~]# docker image pull centos:6.6
6.6: Pulling from library/centos
f9f73d801f05: Pull complete 
Digest: sha256:74727b849f5169d0de21848f8da9d47ea241757d6f89434f312813f723451ebd
Status: Downloaded newer image for centos:6.6
[root@localhost ~]# 
[root@localhost ~]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               stable              ecc98fc2f376        2 weeks ago         109MB
centos              6.6                 4e1ad2ce7f78        3 weeks ago         203MB
redis               4-alpine            05097a3a0549        4 weeks ago         30MB

[root@localhost ~]# docker container run -p 5000:5000 --name centos1 -it centos:6.6 /bin/sh
sh-4.1# 
sh-4.1#

2、在容器中安裝httpd

sh-4.1# yum install httpd
...
...
...
Installed:
  httpd.x86_64 0:2.2.15-69.el6.centos                                                                                                                                                

Dependency Installed:
  apr.x86_64 0:1.3.9-5.el6_9.1        apr-util.x86_64 0:1.3.9-3.el6_0.1                 apr-util-ldap.x86_64 0:1.3.9-3.el6_0.1       httpd-tools.x86_64 0:2.2.15-69.el6.centos      
  mailcap.noarch 0:2.1.31-2.el6       redhat-logos.noarch 0:60.0.14-12.el6.centos      

Complete!
sh-4.1#

3、編輯httpd主頁(yè)文件并啟動(dòng)httpd

sh-4.1# echo "

Welcom To My Httpd

" >/var/www/html/index.html sh-4.1# /usr/sbin/apachectl -D FOREGROUND sh-4.1# curl 127.0.0.1

Welcom To My Httpd

4、修改容器啟動(dòng)執(zhí)行的命令并制作鏡像

[root@bogon ~]# docker commit -p -c 'CMD ["/usr/sbin/apachectl"," -D","FOREGROUND"]' centos1 httpd:1.1
sha256:bbffcf779dd42e070d52a4661dcd3eaba2bed898bed8bbfe41768506f063ad32
[root@bogon ~]# 
[root@bogon ~]# 
[root@bogon ~]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
httpd               1.1                 bbffcf779dd4        6 seconds ago       264MB                        # 這是剛才制作的httpd鏡像
nginx               stable              ecc98fc2f376        2 weeks ago         109MB
centos              6.6                 4e1ad2ce7f78        3 weeks ago         203MB
redis               4-alpine            05097a3a0549        4 weeks ago         30MB

5、直接啟動(dòng)剛才制作的鏡像并驗(yàn)證httpd是否可以訪問

[root@localhost ~]# docker container run --name centos2 -d httpd:1.1
868410465faaa3c3b89d84890e2fa8f76fe4d645075b6796299a24ccfb80be48
[root@bogon ~]# curl 172.17.0.2

Welcom To My Httpd

6、查看運(yùn)行的centos2的容器的詳細(xì)信息

[root@localhost ~]# docker container inspect centos2
[
			...
			...
			...
            "Cmd": [
                "/usr/sbin/apachectl",
                " -D",
                "FOREGROUND"
            ],
            "ArgsEscaped": true,
            "Image": "httpd:1.1",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {}
        },
			...
			...
			...
           
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "bb55b61b005b7191dd2c5dc67f58dbf5be6cd7d2b29b01fc9cee56fc97166920",
                    "EndpointID": "c4e1d785b5c463d9c99bf323ec07508fef364ff4be91f148e6f0ed7a9f96c4d6",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:02",
                    "DriverOpts": null
                }
            }
        }
    }
]

可以看到,CMD已經(jīng)從運(yùn)行/bin/sh變成了我改的運(yùn)行httpd服務(wù)了。至此,基于容器的鏡像已經(jīng)構(gòu)建成功

5、鏡像的導(dǎo)入和導(dǎo)出

如果我們制作的鏡像無法push到registry,那么可以使用鏡像的導(dǎo)入和導(dǎo)出共享給其他人

5.1、打包鏡像

docker save命令可以將你的鏡像打包成壓縮文件,由此共享給其他人

[root@localhost ~]# docker image ls                                                                        # 打包之前的鏡像
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
httpd               1.1                 bbffcf779dd4        19 minutes ago      264MB
nginx               stable              ecc98fc2f376        2 weeks ago         109MB
centos              6.6                 4e1ad2ce7f78        3 weeks ago         203MB
redis               4-alpine            05097a3a0549        4 weeks ago         30MB
[root@localhost ~]# 
[root@localhost ~]# 
[root@localhost ~]# docker save -o myimages.gz httpd:1.1 nginx:stable centos:6.6 redis:4-alpine
[root@localhost ~]# ls myimages.gz 
myimages.gz

5.2、刪除現(xiàn)有的鏡像

[root@localhost ~]# docker image rm httpd:1.1 nginx:stable centos:6.6 redis:4-alpine
Untagged: httpd:1.1
Deleted: sha256:bbffcf779dd42e070d52a4661dcd3eaba2bed898bed8bbfe41768506f063ad32
Deleted: sha256:dd73969752ff69c74c52136379013cff46f6cc2055e0bf46f64be5d336270dfd
Untagged: nginx:stable
Untagged: nginx@sha256:8b600a4d029481cc5b459f1380b30ff6cb98e27544fc02370de836e397e34030
Deleted: sha256:ecc98fc2f376d6560311b66d6958e4350a5a485ee07aa2d1235842d0bce440da
Deleted: sha256:1113e327b1235b943bc1e68ae9afa1fb663b4eb7527759ed28af36e0d2c2943e
Deleted: sha256:639da82d77d23ee8dedd6291b14f715af416d9cbf311b6f3ad982d7ce5a37c07
Deleted: sha256:237472299760d6726d376385edd9e79c310fe91d794bc9870d038417d448c2d5
Untagged: centos:6.6
Untagged: centos@sha256:74727b849f5169d0de21848f8da9d47ea241757d6f89434f312813f723451ebd
Deleted: sha256:4e1ad2ce7f78a77d914f18887130acd55778fbdd1bd3288f026ebd29181ec365
Deleted: sha256:da6517724f67fd4133a5bf508f7c79e20d8e2741c5b3264790d49db5e97c0e2e
[root@localhost ~]# 
[root@localhost ~]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
[root@localhost ~]#

5.3、重新load回剛才的鏡像

[root@localhost ~]# docker load -i myimages.gz 
da6517724f67: Loading layer [==================================================>]  213.2MB/213.2MB
ddcb568d3d1e: Loading layer [==================================================>]  61.56MB/61.56MB
Loaded image: httpd:1.1
237472299760: Loading layer [==================================================>]  58.44MB/58.44MB
f4a5f8f59caa: Loading layer [==================================================>]   54.2MB/54.2MB
19c605f267f4: Loading layer [==================================================>]  3.584kB/3.584kB
Loaded image: nginx:stable
Loaded image: centos:6.6
df64d3292fd6: Loading layer [==================================================>]  4.672MB/4.672MB
04c8ef03e935: Loading layer [==================================================>]  11.78kB/11.78kB
169a281fff0f: Loading layer [==================================================>]  2.192MB/2.192MB
742e4d74cbf8: Loading layer [==================================================>]  24.32MB/24.32MB
9e8211b509e6: Loading layer [==================================================>]  1.536kB/1.536kB
c51fc5b2384b: Loading layer [==================================================>]  3.584kB/3.584kB
Loaded image: redis:4-alpine
[root@localhost ~]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
httpd               1.1                 bbffcf779dd4        28 minutes ago      264MB
nginx               stable              ecc98fc2f376        2 weeks ago         109MB
centos              6.6                 4e1ad2ce7f78        3 weeks ago         203MB
redis               4-alpine            05097a3a0549        4 weeks ago         30MB

5.4、重新運(yùn)行鏡像驗(yàn)證是否可以啟動(dòng)容器

[root@localhost ~]# docker container run  --name myhttpd -d httpd:1.1
ae29e544fbe614bca3109b94ec77afd55a29bd637280c88e703191edd80751fc
[root@localhost ~]# 
[root@localhost ~]# docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
ae29e544fbe6        httpd:1.1           "/usr/sbin/apachectl??   8 seconds ago       Up 7 seconds        5000/tcp            myhttpd
[root@localhost ~]# curl 172.17.0.2

Welcom To My Httpd

鏡像的上傳到registry操作后續(xù)補(bǔ)上


網(wǎng)頁(yè)題目:Docker第三回(鏡像的制作)
網(wǎng)頁(yè)路徑:http://weahome.cn/article/pogsgd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部