? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??🎬慕斯主頁:修仙—別有洞天
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???今日夜電波:秒針を噛む—ずっと真夜中でいいのに。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 0:34━━━━━━?💟──────── 4:20
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 🔄 ? ?? ? ? ? ?? ? ????
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?💗關注👍點贊🙌收藏您的每一次鼓勵都是對我莫大的支持😍
?目錄
首先理解幾個概念
Docker鏡像倉庫(Registry)是什么?
鏡像倉庫分類?
鏡像倉庫工作機制?
常用的鏡像倉庫命令
1. 登錄鏡像倉庫
2. 登出鏡像倉庫
3. 拉取鏡像
4. 推送鏡像
5. 搜索鏡像
注意事項
常見的鏡像命令
1. docker images
2. docker image inspect
3. docker tag
常見容器命令
1. docker run
2. docker ps
首先理解幾個概念
Docker鏡像倉庫(Registry)是什么?
????????鏡像倉庫 (Docker Registry) 負責存儲、管理和分發鏡像,并且提供了登錄認證能力,建立了倉庫的索引。鏡像倉庫管理多個 Repository, Repository 通過命名來區分。每個 Repository 包含一個或多個鏡像,鏡像通過鏡像名稱和標簽 (Tag)來區分。
????????鏡像倉庫(Registry):要從哪一個鏡像倉庫拉取鏡像,通常通過 DNS 或 IP 地址來確定一個鏡像倉庫如 hub.docker.com;一個 Registry 中可以存在多個Repository·Repository 可分為“頂層倉庫”和“用戶倉庫”;·用戶倉庫名稱格式為“用戶名/倉庫名”·每個倉庫可以包含多個 Tag(標簽),每個標簽對應一個鏡像
????????Repository: ·由某特定的 docker 鏡像的所有迭代版本組成的鏡像倉庫
????????鏡像名稱(name) +標簽(tag):如 nginx:latest
????????認證能力:提供用戶注冊,登錄、登出能力
????????索引:提供鏡像的索引信息,方便檢索
????????一個容器鏡像包含了兩個部分,一個是元數據,其實就是由 dockerfile 構建出來的描述文件,這個描述文件會說這個容器鏡像有多少層,每一層里面有什么內容,它的checksum 這些信息都會記錄下來,還有最終的可執行文件在哪就是在存儲數據里面,就是在一個一個的 blob 里面,真正占有空間的就是這些 blob。
????????下面看看官方給出的Docker 架構,可以結合此圖來理解鏡像倉庫的概念:
鏡像倉庫分類?
????????Docker鏡像倉庫按照不同的分類標準可以劃分為多種類型。以下是根據鏡像倉庫的公開性、供應商和面向群體等維度進行分類的詳細介紹:
一、按是否對外公開分類
- 公有倉庫:
-
- Docker Hub:最常用的公共倉庫,包含了大量的官方和社區維護的鏡像。用戶可以通過Docker Hub獲取這些鏡像,并享受自動構建、團隊協作等額外功能。Docker Hub的官網為https://hub.docker.com/。
- 阿里云倉庫:在國內使用較為方便,提供了豐富的鏡像資源和服務。
- 其他公有倉庫:還有如Google、RedHat等供應商提供的鏡像倉庫服務,以及第三方贊助的registry等。
- 私有倉庫:
-
- Registry私有倉庫:Docker官方提供的工具,可以用于構建私有的鏡像倉庫。Registry分為v1版本和v2版本,v2版本使用Go語言編寫,相對更加快速簡潔。
- Harbor企業私有倉庫:Harbor是VMware公司開源的企業級Docker Registry項目,它基于Docker Registry進行了更高級的封裝,提供了圖形管理UI、基于角色的訪問控制(RBAC)、AD/LDAP集成以及審計日志等功能。
- 阿里云個人私有倉庫:阿里云提供的個人私有倉庫服務,用戶可以在阿里云上創建和管理自己的私有鏡像倉庫。
二、按供應商和面向群體分類
- Sponsor Registry(贊助倉庫):
-
- 這類倉庫由第三方提供,供客戶和Docker社區版使用。它們可能提供一些特定的服務或功能,以吸引用戶。
- Mirror Registry(鏡像倉庫):
-
- 第三方提供的鏡像倉庫,但只讓客戶使用。例如,阿里云等云服務商提供的鏡像倉庫服務,用戶需要注冊才能使用。
- Vendor Registry(供應商倉庫):
-
- 由發布Docker鏡像的供應商提供的倉庫。例如,Google、RedHat等公司在提供其軟件或服務的同時,也提供了對應的Docker鏡像倉庫服務。
- Private Registry(私有倉庫):
-
- 通過沒有防火墻和額外安全層的私有實體提供的倉庫,僅供內部使用。這類倉庫通常由企業或組織自行搭建和管理,用于存儲和管理自己的鏡像資源。
鏡像倉庫工作機制?
- 鏡像倉庫使用流程
? 通過 docker login 登錄倉庫
? Docker pull 拉取需要的鏡像
? 通過 dockerfile 或者 commit 等方式制作完鏡像通過 docker push 上傳到倉庫 - 實際研發中鏡像倉庫如何使用
Docker Registry 中的鏡像通常由開發人員制作,而后推送至“公共”或“私有”Registry 上
保存,供其他人員使用,例如“部署”到生產環境;
常用的鏡像倉庫命令
????????Docker的鏡像倉庫命令是Docker生態系統中的重要組成部分,它們允許用戶與Docker鏡像倉庫進行交互,包括登錄、登出、拉取鏡像、推送鏡像以及搜索鏡像等。以下是對這些命令的詳細介紹:
1. 登錄鏡像倉庫
- 命令:
docker login [OPTIONS] [SERVER]
- 功能:登錄到一個Docker鏡像倉庫。如果未指定鏡像倉庫地址,默認為官方倉庫Docker Hub。
- 選項:
-
-u
:登陸的用戶名-p
:登陸的密碼(出于安全考慮,建議不要在命令行中直接包含密碼)
- 示例:
docker login -u 用戶名 -p 密碼
(注意:出于安全考慮,實際使用時應避免直接在命令行中輸入密碼)
2. 登出鏡像倉庫
- 命令:
docker logout [OPTIONS] [SERVER]
- 功能:登出一個Docker鏡像倉庫。如果未指定鏡像倉庫地址,默認為官方倉庫Docker Hub。
- 示例:
docker logout
3. 拉取鏡像
- 命令:
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
- 功能:從鏡像倉庫中拉取或者更新指定鏡像。
- 選項:
-
-a
:拉取所有tagged鏡像--disable-content-trust
:忽略鏡像的校驗,默認開啟
- 示例:
-
docker pull ubuntu:18.04
:從Docker Hub下載ubuntu的18.04版本鏡像docker pull -a java
:從Docker Hub下載REPOSITORY為java的所有鏡像
如下我們在dockerhub拉取找到自己要拉取的鏡像:
找到對應的Tags:
????????拉取對應的鏡像即可,由于是國外的網站,因此我們可以更換國內鏡像源增加下載速度(具體參考上篇博客),注意格式為NAME:Tags:
4. 推送鏡像
- 命令:
docker push [OPTIONS] NAME[:TAG]
- 功能:將本地的鏡像上傳到鏡像倉庫,需要先登錄到鏡像倉庫。
- 選項:
-
--disable-content-trust
:忽略鏡像的校驗,默認開啟
- 示例:
docker push myapache:v1
:上傳本地鏡像myapache的v1版本到鏡像倉庫中
????????需要先創建好自己的鏡像倉庫,并且按照創建好的鏡像倉庫格式改好鏡像源的格式才能進行推送:
5. 搜索鏡像
- 命令:
docker search [OPTIONS] TERM
- 功能:從Docker Hub查找鏡像。
- 選項:
-
--automated
:只列出automated build類型的鏡像-f <過濾條件>
:基于給定條件過濾輸出,例如-f stars=10
列出收藏數不小于10的鏡像--no-trunc
:顯示完整的鏡像描述
- 示例:
docker search -f stars=10 java
:從Docker Hub查找所有鏡像名包含java,并且收藏數大于10的鏡像
注意事項
- 在使用這些命令時,請確保已經安裝了Docker,并且Docker服務正在運行。
- 登錄和推送鏡像到私有倉庫時,需要確保你有足夠的權限。
- 鏡像的TAG和DIGEST是鏡像的唯一標識,用于區分不同版本的鏡像。
- 在拉取和推送鏡像時,Docker會檢查鏡像的完整性,確保鏡像沒有被篡改或損壞。這可以通過選項
--disable-content-trust
來忽略,但通常不推薦這樣做。
常見的鏡像命令
當然,下面是對您提到的Docker命令的詳細解析:
1. docker images
命令作用:docker images
命令用于列出本地主機上所有可用的Docker鏡像。這些鏡像可以是您從Docker Hub或其他鏡像倉庫拉取下來的,也可以是您自己構建的。
命令格式:
docker images [OPTIONS] [REPOSITORY[:TAG]]
盡管該命令支持[OPTIONS]
和[REPOSITORY[:TAG]]
作為可選參數,但通常直接運行docker images
而不帶任何參數就足以列出所有鏡像。
常用選項:
-a
或--all
:顯示所有鏡像(包括中間層鏡像)。默認情況下,docker images
只顯示頂層鏡像。--digests
:顯示鏡像的摘要信息。-f
或--filter
:根據提供的條件過濾鏡像列表。--no-trunc
:不截斷輸出信息,顯示完整的鏡像信息。
示例:
docker images
這將列出所有頂層鏡像的名稱、標簽、鏡像ID、創建時間以及大小。
2. docker image inspect
命令作用:docker image inspect
命令用于顯示一個或多個Docker鏡像的詳細信息,包括鏡像的配置信息、層信息、元數據等。
命令格式:
docker image inspect [OPTIONS] IMAGE [IMAGE...]
您可以通過指定一個或多個鏡像名稱或ID來查看它們的詳細信息。
常用選項:
--format
:使用Go模板格式化輸出信息。這允許您以自定義的格式顯示鏡像的詳細信息。--size
:顯示鏡像的大小信息。
示例:
docker image inspect nginx
這將返回nginx鏡像的詳細信息,包括其配置、層、架構等。
3. docker tag
命令作用:docker tag
命令用于給鏡像添加一個新的標簽(即,重命名鏡像或為其指定一個新的版本)。這對于將鏡像推送到Docker Hub或其他私有倉庫時特別有用,因為您可以為鏡像指定一個更具描述性的名稱和標簽。
命令格式:
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
您需要將SOURCE_IMAGE[:TAG]
替換為源鏡像的名稱和標簽(如果未指定標簽,則默認為latest),將TARGET_IMAGE[:TAG]
替換為目標鏡像的名稱和標簽。
示例:
docker tag nginx:1.21 mynginx:latest
這將為nginx鏡像的1.21版本添加一個新的標簽mynginx:latest
。現在,您可以使用這個新標簽來引用這個鏡像,就像它是一個全新的鏡像一樣。請注意,這實際上并沒有創建鏡像的新副本,而只是為現有鏡像添加了一個額外的引用(即,標簽)。
常見容器命令
1. docker run
? 功能 創建一個新的容器并運行一個命令
? 語法 docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
? 別名 docker container run
? 關鍵參數
○ -d: 后臺運行容器,并返回容器 ID;
○ -i: 以交互模式運行容器,通常與 -t 同時使用;
○ -P: 隨機端口映射,容器內部端口隨機映射到主機的端口
○ -p: 指定端口映射,格式為: 主機(宿主)端口:容器端口
○ -t: 為容器重新分配一個偽輸入終端,通常與 -i 同時使用;
○ --name="nginx-lb": 為容器指定一個名稱;
○ -h "mars": 指定容器的 hostname;
○ -e username="ritchie": 設置環境變量;
○ --cpuset-cpus="0-2" or --cpuset-cpus="0,1,2": 綁定容器到指定 CPU 運行;
○ -m :設置容器使用內存最大值;
○ --network="bridge": 指定容器的網絡連接類型;
○ --link=[]: 添加鏈接到另一個容器;
○ --volume , -v: 綁定一個卷
○ --rm :shell 退出的時候自動刪除容器
? 樣例
#使用 docker 鏡像 nginx:latest 以后臺模式啟動一個容器,并將容器命名為
mynginx。
docker run --name mynginx -d nginx:latest
#使用鏡像 nginx:latest,以后臺模式啟動一個容器,將容器的 80 端口映射到主
機的 80 端口,主機的目錄 /data 映射到容器的 /data。
docker run -p 80:80 -v /data:/data -d nginx:latest
我們使用docker在centos7的環境下啟動了一個Ubuntu20.04的操作系統,通過使用-it選項以可以交互的終端方式進行啟動:
2. docker ps
? 功能 列出容器
? 語法 docker ps [OPTIONS]
? 別名 docker container ls, docker container list, docker container ps
? 關鍵參數
○ -a :顯示所有的容器,包括未運行的。
○ -f :根據條件過濾顯示的內容。
○ --format :指定返回值的模板文件。如 json 或者 table
○ -l :顯示 latest 的容器。
○ -n :列出最近創建的 n 個容器。
○ --no-trunc :不截斷輸出。
○ -q :靜默模式,只顯示容器編號。
○ -s :顯示總的文件大小。
? 樣例
docker ps -a
???????????????????? 感謝你耐心的看到這里?( ′・?・` )比心,如有哪里有錯誤請踢一腳作者o(╥﹏╥)o!?
????????????????????????????????? ? ? ??
????????????????????????????????????????????????????????????????????????給個三連再走嘛~??