本文收錄在容器技術學習系列文章總目錄 1、製作鏡像 1.1 鏡像的生成途徑 基於容器製作 dockerfile,docker build 本篇主要詳細講解基於容器製作鏡像;基於dockerfile 製作鏡像在後一張文章Docker系列07—Dockerfile 詳解中詳細介紹; 1.2 基於容器製作 ...
本文收錄在容器技術學習系列文章總目錄
1、製作鏡像
1.1 鏡像的生成途徑
- 基於容器製作
- dockerfile,docker build
本篇主要詳細講解基於容器製作鏡像;基於dockerfile 製作鏡像在後一張文章Docker系列07—Dockerfile 詳解中詳細介紹;
1.2 基於容器製作
docker commit
(1)格式
Usage: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
(2)Options 參數
- -a,作者(例如,“along <[email protected]>”)
- -c,修改Dockerfile指令應用於創建的鏡像
- -m,提交消息
- -p,在提交期間暫停容器(預設為true)
(3)示例1:簡單的基於容器創建一個新的鏡像
① 先運行一個容器
[root@along ~]# docker run --name b1 -it busybox / # ls / bin dev etc home proc root sys tmp usr var / # mkdir -p /date/html / # echo "<h1>busybox httpd server</h1>" > /date/html/index.html / # cat /date/html/index.html <h1>busybox httpd server</h1>
② 不用退出這個容器,另起終端在b1容器基礎上,製作新鏡像
[root@along ~]# docker commit -p b1 sha256:3a6523b08bea7eb339ae04cc8a98caabfd46fbd27ccf31409cc3e8a764effdc1 [root@along ~]# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE <none> <none> bf29b97ba38d 7 seconds ago 1.15 MB
③ 給新製作的鏡像打標簽
[root@along ~]# docker tag bf29b97ba38d along/httpd:v0.1 [root@along ~]# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE along/httpd v0.1 bf29b97ba38d 39 seconds ago 1.15 MB
④ 可以對同一個鏡像,再打標簽
[root@along ~]# docker tag along/httpd:v0.1 along/httpd:latest [root@along ~]# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE along/httpd latest bf29b97ba38d About a minute ago 1.15 MB along/httpd v0.1 bf29b97ba38d About a minute ago 1.15 MB
⑤ 刪除同一鏡像的標簽,只是把這個鏡像的標簽去掉,只到刪除這個鏡像的最後一個標簽,此鏡像才會被刪除
[root@along ~]# docker image rmi along/httpd:latest Untagged: along/httpd:latest [root@along ~]# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE along/httpd v0.1 bf29b97ba38d About a minute ago 1.15 MB
⑥ 基於新的鏡像運行一個容器,驗證是否是基於b1創建成功的
[root@along ~]# docker run --name b2 -it along/httpd:v0.1 / # cat /date/html/index.html <h1>busybox httpd server</h1> / # exit
(4)示例2:基於容器創建新的鏡像,並修改執行命令CMD
① 基於容器b1創建新的鏡像,並修改命令為執行httpd服務
[root@along ~]# docker commit -a "Along <[email protected]>" -c 'CMD ["/bin/httpd","-f","-h","/date/html"]' -p b1 along/httpd:v0.2 sha256:2291d0e5800e53e120fad58043e97cbf8197f7db2aa1111508603fa3c16982f2
註解:busybox 中httpd 語法
- -f:不運行為守護進程,在前臺運行
- -h:指定httpd運行的主目錄
② 運行新的鏡像v0.2
[root@along ~]# docker run --name b3 -d along/httpd:v0.2 43e8731be7abd34a9b332c84bc622a1ef8707dc94465d3639db194c0b504cc42
③ 驗證成功
[root@along ~]# docker inspect b3 |grep "IPAddress" "SecondaryIPAddresses": null, "IPAddress": "172.17.0.3", "IPAddress": "172.17.0.3" [root@along ~]# curl 172.17.0.3 <h1>busybox httpd server</h1>
2、瞭解Docker Registry
2.1 介紹
- registry 用於保存docker 鏡像,包括鏡像的層次結構和元數據。
- 啟動容器時,docker daemon會試圖從本地獲取相關的鏡像;本地鏡像不存在時,其將從registry中下載該鏡像並保存到本地;
- 拉取鏡像時,如果不知道registry倉庫地址,預設從Docker Hub搜索拉取鏡像
2.2 分類
- Sponsor Registry:第三方的registry,供客戶和docker社區使用;
- mirror Registry:第三方的registry,只讓客戶使用;如docker cn和阿裡雲的鏡像加速器;
- vendor Registry:服務商的registry,由發佈docker鏡像的供應商提供的registry;如紅帽提供的專有的,收費提供;
- private Registry:通過設有防火牆和額外的安全層的私有實體提供的registry;自建的registry,在本地搭建registry,節省帶寬
2.3 registry組成(repository和index)
(1)Repository
- 由特定的docker鏡像的所有迭代版本組成的鏡像倉庫;
- 一個registry中可以存在多個repository:
- repository可分為“頂層倉庫”和“用戶倉庫”
- 用戶倉庫名稱格式為“用戶名/倉庫名”
- 每個倉庫可以包含多個Tag(標簽),每個標簽對應一個鏡像
(2)Index
- 維護用戶賬戶、鏡像的校驗以及公共命名空間的信息
- 相當於為registry提供了一個完成用戶認證等功能的檢索介面
2.4 拉取倉庫鏡像的格式
docker pull <registry>[:<port>]/[<namespace>/]<name>:<tag>
- registry:倉庫伺服器地址:不指定預設是docker hub
- port:埠;預設是443,因為是https協議
- namespace:名稱空間,指是哪個用戶的倉庫,如果是頂層倉庫,可省
- name:倉庫名
- tag:標簽名;預設是latest版本
2.5 知名docker倉庫
例:docker pull quay.io/coreos/flannel:v0.10.0-amd64
3、將製作的鏡像上傳到自己的私有registry倉庫中
3.1 創建自己的docker registry
(1)可以在docker hub上創建;但註冊docker hub需要科學上網;
(2)也可以在阿裡雲上https://cr.console.aliyun.com/cn-hangzhou/repositories創建自己的docker倉庫
① 創建鏡像倉庫
② 選擇創建本地倉庫
③ 點擊管理,會有操作指南,大家跟著操作即可,這裡我就不再演示了
本文用的是docker hub
3.2 登錄docker倉庫
[root@along ~]# docker login -u alongedu Password: Login Succeeded
3.3 將鏡像打標簽,對應自己的registry
[root@along ~]# docker tag busybox:latest alongedu/httpd:v0.1
3.4 push上傳自己的鏡像
[root@along ~]# docker push alongedu/httpd:v0.1 The push refers to a repository [docker.io/alongedu/httpd] 23bc2b70b201: Pushed v0.1: digest: sha256:cbcde3595079b1f7a6b046e96e7547fe786d5c2c8eba678bc260161bc01b8dbe size: 527
3.5 在自己的私有倉庫驗證