# Docker Registry :::success 為了有效的 - 嚴格控管docker image 的 存放位置 - 完全控制image的分發使用管道 - 流程化開發流程 ::: :::warning Docker Registry 就像一個倉庫,裡面存放著各式各樣的 Docker Image。倉庫可以是公開的;也可以是私有的,只允許特定人員存取這些Image。Docker官方有提供一個 Docker Hub Registry ,在上面可以找到需多開源套件官方提供的 Docker Image,而接下來的操作也都會圍繞在 Docker Hub 上。 ::: ### 公有倉庫 Docker Hub :::info Docker Hub 如同 Github。Github上 有許多的專案,每個人都可以上傳自己的專案,也可以下載別人的專案,有時也可以在某些開源專案,提問或提交自己的程式碼。同時,Github 也提供私有與公開的專案類型,如果專案不想被公開,則需要申請付費帳號。而 Docker Hub 則提供免費帳號一個私有 Repository。 ::: ## ***註冊*** ![](https://i.imgur.com/CLxuUIL.png) ### ***Terminal login*** 登入之後的 Registry 會直接連結到 Docker Hub。 看到 Login Succeeded 代表登入成功。 ![](https://i.imgur.com/zVWvQ0k.png) ## ***建立倉庫*** ![](https://i.imgur.com/4XT4evJ.png) ### 可以輸入你想要的 Repository 名稱,每個 Repository 的前綴字都會是登入帳號。 ![](https://i.imgur.com/E7c2D2p.png) ### 提交成功之後會看到關於這個 Repository 的基本資訊,等等我們上傳的 Docker Image 也可以在這個頁面上看到。 ![](https://i.imgur.com/Bn7u9Bb.png) ### 給這個 Image 給一個 tag ```script docker tag <DOCKER_IMAGE or ID> <YOUR_ACCOUNT_NAME>/<REPOSITORY_NAME>:1.0.0``` ``` ### 打包出來的 Docker Image,後面的 TAG 就會從 latest 變成你所指定的版本號 ![](https://i.imgur.com/OHGPLG4.png) ### 使用 docker push 指令,就可以將 tag 好的 Image,上傳到指定的 Repository ```script docker push <ACCOUNT_name>/<Repo> ``` ![](https://i.imgur.com/YymdDdf.png) ### 最後再回到 Docker Hub 頁面上,點選 Tags ![](https://i.imgur.com/ziy8Bex.png) ### 從 Docker Hub Pull Docker Image 下來 ``` docker pull {YOUR_ACCOUNT_NAME}/{REPOSITORY_NAME}:1.0.0 ``` ![](https://i.imgur.com/N061ibz.png) ![](https://i.imgur.com/7bXW66s.png) ## 私有倉庫 - ### Gitlab設定 ![](https://i.imgur.com/kivho6y.png) --- - ## 將本地設為docker倉庫 ### 拉取官方的registry ```script docker pull registry ``` ### 啟用docker image ```script docker run -d -p 15000:5000 -v /opt/data/registry:/var/lib/registry --restart=always registry ``` ### 將本地的image添加標籤 ```script # docker tag <image name> <私有倉庫主機位址>/<repo>:<tag_name> docker tag x20911x/docker-course:docker_20210609 localhost:15000/docker-course:docker_20210609 ``` ### 推送到私有倉庫 ```script # docker push <私有倉庫主機位址>/<repo>:<tag_name> docker push localhost:15000/docker-course:new-flask-0609 ``` ### 從遠程倉庫下載 ```script # docker pull <私有倉庫主機位址>/<repo>:<tag_name> docker pull localhost:15000/docker-course:new-flask-0609 ``` ![](https://i.imgur.com/9j0Nbiv.png) - #### 通過瀏覽器訪問http://domain:5000/v2/_catalog 查看倉庫是否啟動成功。 ```bash curl -XGET http://10.5.71.140:15000/v2/_catalog ``` ![](https://i.imgur.com/8qHVnQ3.png) - #### 查詢倉庫的image tags ![](https://i.imgur.com/J7cbTdr.png) ```bash curl -XGET http://localhost:15000/v2/docker-course/tags/list ``` ### 刪除遠程倉庫Image 參考連結 https://github.com/burnettk/delete-docker-registry-image ### <font color=#0000FF>切換使用者為root</font> - 獲取刪除image的權限 ``` sudo su - ``` ### 設定環境變數 -> 通過環境變量設置鏡像保存在本地的路徑 ``` export REGISTRY_DATA_DIR=/opt/data/registry/docker/registry/v2 ``` ### 查看預備刪除的image資料 or repo 資料 ```script # delete_docker_registry_image --image <repo>:<tag> --dry-run delete_docker_registry_image --image docker-course:<tag> --dry-run # delete_docker_registry_image --image <repo> delete_docker_registry_image --image docker-course ``` ##### 提示確定刪除的資料 <font color=#FF6600>Dry Run</font> ![](https://i.imgur.com/xH3rkNV.png) ### 正式刪除image or repo ```script # delete_docker_registry_image --image <repo>:<tag> delete_docker_registry_image --image docker-course:docker_20210609 # delete_docker_registry_image --image <repo> --dry-run delete_docker_registry_image --image docker-course --dry-run ``` ### Reference https://ithelp.ithome.com.tw/articles/10192824 https://ithelp.ithome.com.tw/articles/10191139 https://www.huaweicloud.com/articles/f608e18b3c41ad82d6adb9f4587efea3.html https://blog.csdn.net/qq_35887546/article/details/105390681 ###### tags: `Docker`