溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Docker系列3:Docker鏡像詳解

發布時間:2020-06-30 05:28:29 來源:網絡 閱讀:453 作者:zxhk 欄目:云計算

一、Docker鏡像介紹

1、鏡像組成介紹

? ??Docker系列3:Docker鏡像詳解

分層構建的,底層的是bootfs,上面的是rootfs

  • bootfs的類型可以是btrfs、aufs、lxc,還需要一個內核,但是這個內核僅僅是用于啟動容器的用戶控件的

  • rootfs表現為一個根文件系統,這里面包括很多的文件和目錄

  • 在啟動容器的時候,這兩層都是以只讀的方式來掛載的。

構建鏡像的基本流程

  1. 先準備一個bootfs

  2. 然后安裝一個最小系統(base image)

  3. 在系統安裝應用,如果是構建apache的鏡像,那么就在base image上安裝apache

? ??Docker系列3:Docker鏡像詳解

注意:

  • 鏡像都是只讀的

  • 當啟動容器的時候,會在鏡像的基礎上再添加一個當前容器的專用層,這層是讀寫的

  • 在刪除容器的時候,這個容器的專屬的這個讀寫層就會被刪除,所以默認容器無法實現數據的持久存儲。

2、鏡像倉庫

????前面一講過了,專門用來存儲docker iamge的哪個位置稱之為 docker registry,在啟動容器的時候,本地的docker daemon會從指定的docker registry下載鏡像,并完成啟動。

docker registry是可以分為多類 的

  • Vendor registry:官方的倉庫

  • Mirror registry:像阿里云之類的鏡像加速

  • Private registry:用戶自己創建鏡像倉庫,比如企業內部需要大規模部署時候,可以自己定制鏡像,并放到自己倉庫中

一般的registry有兩部分組成:

第一部分:Repository

  • 一個registry可以有多個repository

  • Repository可以分為頂級倉庫和用戶倉庫,用戶倉庫的命名是:用戶名/倉庫名

  • Repository的名稱一般就是應用的名稱,而且在Repository中有應用的多個版本

第二部分:index

  • 維護賬戶信息

  • 提供檢索端口

3、從鏡像倉庫下載鏡像的方法

格式如下

docker?pull?<registry>[:port]?/[<namespace>/]<name>:<tag>
  • registry:port 這里是指定從哪個docker服務器來獲取鏡像,如果用的是docker官方自己的倉庫(hub.docker.com),那么這里可以省略。

  • namespace 這里是指定來自于哪個名稱空間,也就是哪個用戶的倉庫, 如果的頂級的倉庫,那么這個也可以省略

除了https://hub.docker.com之后,其實還有別的,例如:https://hub.daocloud.io/,再例如CoreOS所維護的:https://quay.io

  • 因為不是默認倉庫, 因此在下載鏡像的時候,需要指定地址


從quay.io 下載 flannel舉例如下

第一步:登錄https://quay.io,搜索flannel

Docker系列3:Docker鏡像詳解

第二步:找到項目地址

Docker系列3:Docker鏡像詳解

第三步:查看下載鏡像的方法

Docker系列3:Docker鏡像詳解

  • 這種方法是不能用的,因為需要指定標簽

第四步:查看具體的標簽

Docker系列3:Docker鏡像詳解Docker系列3:Docker鏡像詳解

Docker系列3:Docker鏡像詳解

第五步:下載鏡像

[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

  • 基于現有的容器:基于容器做鏡像,一般就是先安裝一個最小容器,然后在這個容器中安裝應用程序,然后將這個安裝了程序的容器做成鏡像就可以了

  • 基于docker hub的自動創建功能

2、基于現有容器做鏡像

第一步:啟動一個busybox容器,并創建一個html頁面

[root@host1?~]#?docker?run?--name?img1?-it?busybox
/?#?mkdir?/data/html?-p
/?#?echo?"test?page[v1.0]">>/data/html/index.html

第二步:再開一個終端,將容器制作成鏡像

  • 制作鏡像用命令commit

  • 要制作鏡像的容器不能停止

  • 將容器制作為鏡像的時候,最好讓容器暫停一下,這需要用選項-p

  • 默認制作的鏡像沒有tag,也不屬于任何的repository

[root@host1?~]#?docker?commit?-p?img1
sha256:cd7cb2a774400c721ed71f62bd20abe2c000f1d0f7d51d3bf025db1239b86b7d
[root@host1?~]#?docker?image?ls
REPOSITORY???????????????TAG?????????????????IMAGE?ID????????????CREATED?????????????SIZE
<none>???????????????????<none>??????????????cd7cb2a77440????????6?seconds?ago???????1.22MB

第三步:給鏡像打標簽

  • 打標簽用tag命令

  • 一個鏡像可以有多個不同的標簽

[root@host1?~]#?docker?tag?cd7cb2a77440?zxhk/httpd:v1-0
[root@host1?~]#?docker?image?ls
REPOSITORY???????????????TAG?????????????????IMAGE?ID????????????CREATED?????????????SIZE
zxhk/httpd???????????????v1-0????????????????cd7cb2a77440????????2?minutes?ago???????1.22MB

再打個標簽

[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

注意:

  • 一個鏡像有多個標簽的話,如何進行刪除,需要將這多個鏡像都刪除才行,類似于系統的硬鏈接

第四步:基于這個進行啟動一個容器,并在容器中運行apache

[root@host1?~]#?docker?run?--name?newhttpd?-it?zxhk/httpd:latest
/?#?httpd?-f?-h?/data/html
  • 此時,然后apache能運行,但是每次新啟動一個容器,都需手動啟動apache,接下來對鏡像進行調整,實現啟動容器后自動運行apache

第五步:升級鏡像實現自動運行內部的apache

先看看我們做的鏡像的詳細信息

[root@host1?~]#?docker?inspect?zxhk/httpd:latest

其中有一部分是Cmd,其中就是容器運行起來以后要執行的命令,如下

"Cmd":?[
??????"sh"
],

commit創建鏡像的時候會可以通過選項來設置這些內容

  • -a:指定作者

  • -c:更改基于鏡像啟動后執行的命令

  • -m:描述系想你

  • -p:暫停

再重新做個鏡像

[root@host1?~]#?docker?commit?\
>?-a?"zxhk<237745635@qq.com>"?\
>?-c?'CMD?["/bin/httpd","-f","-h","/data/html"]'?\
>?-p?img3?zxhk/httpd:v2.0

用這個鏡像啟動一個容器

[root@host1?~]#?docker?run?--rm?--name?test-httpd?zxhk/httpd:v2.0

看一下容器中執行的命令

[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",

在宿主機訪問測試容器中的站點

[root@host1?~]#?curl?172.17.0.4
test?page[v1.0]

至此,鏡像創建完成

三、將制作的鏡像上傳到docker hub中

1、在https://hub.docker.com/注冊用戶

  • 需要爬過墻頭才能注冊,你懂的?。?!

  • 注冊賬戶過程-略

2、在docker hub上創建repository和registry

??Docker系列3:Docker鏡像詳解

??Docker系列3:Docker鏡像詳解

? ?Docker系列3:Docker鏡像詳解?

注意:

  • 創建的倉庫名稱必須要和鏡像的名稱一致

3、向自己的倉庫中上傳鏡像文件

第一步:登陸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鏡像的二個版本都傳上去】

[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系列3:Docker鏡像詳解


第四步:使用docker hub中我們自己的鏡像

在docker hub中已經標識了鏡像的使用方法,如下:

Docker系列3:Docker鏡像詳解

為了效果,現將本地的鏡像刪除

[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

下載鏡像啟動容器

[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]

四、將制作的鏡像上傳到阿里云的鏡像倉庫中

1、在阿里云注冊用戶

????略

2、進入容器鏡像倉庫

? ??Docker系列3:Docker鏡像詳解

? ??Docker系列3:Docker鏡像詳解

? ??Docker系列3:Docker鏡像詳解

3、使用阿里云做鏡像加速的方法

? ??Docker系列3:Docker鏡像詳解

去docker配置文件中添加一個鏡像文件

[root@localhost?~]#?vim?/etc/docker/daemon.json
{
????"registry-mirrors":?[
????????"https://registry.docker-cn.com",
????????"https://mzxx8xy8.mirror.aliyuncs.com"
????]
}

重啟服務

[root@localhost?~]#?systemctl?daemon-reload
[root@localhost?~]#?systemctl?restart?docker

4、使用阿里云創建倉庫

? ??Docker系列3:Docker鏡像詳解

? ??Docker系列3:Docker鏡像詳解

? ??Docker系列3:Docker鏡像詳解

? ??Docker系列3:Docker鏡像詳解

看看鏡像倉庫的使用方法

? ??Docker系列3:Docker鏡像詳解

5、向阿里云倉庫上傳鏡像

第一步:使用憑證登錄阿里云

[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

第二步:上傳鏡像

  • 上傳到阿里云的鏡像需要進行先打個標簽

[root@localhost?~]#?docker?tag?89a?registry.cn-hangzhou.aliyuncs.com/zxhk1/httpd:v2.0
[root@localhost?~]#?docker?push?registry.cn-hangzhou.aliyuncs.com/zxhk1/httpd:v2.0

第三步:從阿里云拉取鏡像

[root@localhost?~]#?sudo?docker?pull?registry.cn-hangzhou.aliyuncs.com/zxhk1/httpd:v2.0
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女