Docker 如何把映象上傳到docker hub

lhrbest發表於2020-04-02


Docker 如何把映象上傳到docker hub


1 首先你得準備一個hub 的帳號, 去  https://hub.docker.com 註冊吧!

2 在hub那裡新建一個倉庫, 這個就類似於github那邊的..create ---> create repository(建立知識庫) 然後隨便搞個名字, 我這裡就叫ubuntu吧 所以路徑就是wherein/ubuntu了

3 執行 docker ps 檢視容器, 這裡就是要獲取到CONTAINER ID嘛

4 commit一個容器  命令: docker commit CONTAINER ID wherein/ubuntu

5 接下來就是登入一個hub帳號了 命令: docker login  如果成功則顯示下圖

6 將剛才的映象push 到你的hub 那裡去 命令: docker push wherein/ubuntu:latest  這個latest其實就是一個tag name 會在hub的Tags那裡顯示

: 這裡注意一下, 有時push會超時的, 沒關係, 再push一次就好了

 

7 現在驗證一下 命令: docker inspect wherein/ubuntu

8 最後看一下你的hub中的tags 是否有了新的更新

嗯, 看來是成功了!




Docker 如何把映象上傳到docker hub

Docker 平臺

在這裡插入圖片描述
Docker 平臺基本上由三部分組成:

客戶端:使用者使用 Docker 提供的工具(CLI 以及 API 等)來構建,上傳映象併發布命令來建立和啟動容器
Docker 主機:從 Docker registry 上下載映象並啟動容器
Docker registry:Docker 映象倉庫,用於儲存映象,並提供映象上傳和下載

與Mavan的管理一樣,Docker不僅提供了一箇中央倉庫,同時也允許我們使用registry搭建本地私有映象倉庫。

中央倉庫
官方的hub.docker
國內廠商,阿里雲,daocloud提供的免費中央倉庫

也可以使用官方hub安裝自建私有倉庫

準備工作

首先你得準備一個hub 的帳號, 去  https://hub.docker.com 註冊吧!

檢視本地已有映象

docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/centos    latest              9f38484d220f        2 months ago        202 MB1234

建立dockerfile

mkdir docker_file
cd docker_file/
vi Dockerfile 
123

內容如下

FROM centos
MAINTAINER sandywei <zjcjava@163.com>
# move all configuration files into container
RUN yum install -y httpd
EXPOSE 80
CMD ["sh","-c","service httpd start;bash"]1234567
docker build -t cenots/httpd:1.0 .
...
Removing intermediate container bd9551733fae
Successfully built 88bb00e21fc6123456

檢視當前已經有兩個映象了

  docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
cenots/httpd        1.0                 88bb00e21fc6        3 minutes ago       329 MB
docker.io/centos    latest              9f38484d220f        2 months ago        202 MB12345

cenots的拼寫我這裡寫錯了

建立容器

docker run -d 88bb00e21fc6 bash -c "while true; do echo hello world; sleep 1; done"
docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
2907ad80faca        88bb00e21fc6        "bash -c 'while tr..."   13 seconds ago      Up 13 seconds       80/tcp              wonderful_spence12345

釋出docker

接下來就是登入一個hub帳號了 命令: docker login 如果成功則顯示下圖

docker login12

輸入使用者名稱,密碼登陸成功即可

這個過程和github的使用非常相似

1.commit一個容器 命令: docker commit CONTAINER_ID 倉庫路徑

docker commit 2907ad80faca zhangbamboo/test1

2.將剛才的映象push 到你的hub 那裡去 命令: docker push 倉庫路徑:版本號 這個latest其實就是一個tag name 會在hub的Tags那裡顯示

docker push zhangbamboo/test:latest 
The push refers to a repository [docker.io/zhangbamboo/test]
d8153f44fb20: Pushing [==================================================>] 128.3 MB
d69483a6face: Pushing [==================================================>] 209.5 MB
success1234567

現在驗證一下 命令: docker inspect zhangbamboo/test

 docker inspect zhangbamboo/test
[
    {
        "Id": "sha256:188f3ed072afad90f22cf0c7024029fc2437365744e432b8566f36c9b8349044",
        "RepoTags": [
            "zhangbamboo/test:latest"
        ],
        "RepoDigests": [
            "zhangbamboo/test@sha256:702a594f74413ba060664e587fb8535d7fcbf5a50b5a628d21c90ebb70b555aa"
        ],
        "Parent": "sha256:88bb00e21fc683553117487f57ba637054f84220eb6c4fe445b31c2cdc1fbd2d",
        "Comment": "",
        "Created": "2019-06-05T10:03:03.807710776Z",
        "Container": "2907ad80faca19257db56491da14c24627ddfc708604c5455cbeabbefae1c767",
        "ContainerConfig": {
            "Hostname": "2907ad80faca",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "80/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "bash",
                "-c",
                "while true; do echo hello world; sleep 1; done"
            ],
            "Image": "88bb00e21fc6",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "org.label-schema.build-date": "20190305",
                "org.label-schema.license": "GPLv2",
                "org.label-schema.name": "CentOS Base Image",
                "org.label-schema.schema-version": "1.0",
                "org.label-schema.vendor": "CentOS"
            }
        },
        "DockerVersion": "1.13.1",
        "Author": "",
        "Config": {
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "80/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "bash",
                "-c",
                "while true; do echo hello world; sleep 1; done"
            ],
            "Image": "",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "org.label-schema.build-date": "20190305",
                "org.label-schema.license": "GPLv2",
                "org.label-schema.name": "CentOS Base Image",
                "org.label-schema.schema-version": "1.0",
                "org.label-schema.vendor": "CentOS"
            }
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 329320764,
        "VirtualSize": 329320764,
        "GraphDriver": {
            "Name": "overlay2",
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/8115006f63caf4a90d60d3eee5643d0068c5a853f07e3b559d21d6f0c7ba07a0/diff",
                "MergedDir": "/var/lib/docker/overlay2/8aa447669d56da1205fa222c144ea3449d860c3b2905c1e5e48026624a9e0589/merged",
                "UpperDir": "/var/lib/docker/overlay2/8aa447669d56da1205fa222c144ea3449d860c3b2905c1e5e48026624a9e0589/diff",
                "WorkDir": "/var/lib/docker/overlay2/8aa447669d56da1205fa222c144ea3449d860c3b2905c1e5e48026624a9e0589/work"
            }
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:d69483a6face4499acb974449d1303591fcbb5cdce5420f36f8a6607bda11854",
                "sha256:d8153f44fb200d131212f3db77bcdd32e352d717d590b1ad344006a7c9aef63d"
            ]
        } 
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105

上傳Docker映象到阿里雲

配置阿里雲的映象加速器: https://cr.console.aliyun.com/#/accelerator
參考  配置docker加速器中的內容
https://blog.csdn.net/zjcjava/article/details/91380509

  1. 登入阿里雲Docker Registry
    $ sudo docker login --username=zjcjava@163.com registry.cn-hangzhou.aliyuncs.com1

用於登入的使用者名稱為阿里雲賬號全名,密碼為開通服務時設定的密碼。

您可以在產品控制檯首頁修改登入密碼。

  1. 從Registry中拉取映象
    $ sudo docker pull registry.cn-hangzhou.aliyuncs.com/dreamer/dokcer_test:[映象版本號]1
  1. 將映象推送到Registry

這裡我們以我係統裡面已經pull的nginx為例

   $ sudo docker login --username=zjcjava@163.com registry.cn-hangzhou.aliyuncs.com  #如果已經登陸過這裡可以跳過
docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/nginx     latest              719cd2e3ed04        33 hours ago        109 MB
#   $ sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/dreamer/dokcer_test:[映象版本號]  #命名規則按照阿里的命名規則設定
sudo docker tag 719cd2e3ed04  registry.cn-hangzhou.aliyuncs.com/dreamer/dokcer_test:v1.0
#可以看到719cd2e3ed04有兩個tag不同的名稱
docker images
REPOSITORY                                              TAG                 IMAGE ID            CREATED             SIZE
docker.io/nginx                                         latest              719cd2e3ed04        33 hours ago        109 MB
registry.cn-hangzhou.aliyuncs.com/dreamer/dokcer_test   v1.0                719cd2e3ed04        33 hours ago        109 MB
 
#$ sudo docker push registry.cn-hangzhou.aliyuncs.com/dreamer/dokcer_test:[映象版本號] 釋出版本到倉庫
   sudo docker push registry.cn-hangzhou.aliyuncs.com/dreamer/dokcer_test:v1.012345678910111213141516

請根據實際映象資訊替換示例中的[ImageId]和[映象版本號]引數。

  1. 選擇合適的映象倉庫地址
    從ECS推送映象時,可以選擇使用映象倉庫內網地址。推送速度將得到提升並且將不會損耗您的公網流量。

如果您使用的機器位於VPC網路,請使用  registry-vpc.cn-hangzhou.aliyuncs.com 作為Registry的域名登入,並作為映象名稱空間字首。

  1. 示例
    使用"docker tag"命令重新命名映象,並將它通過專有網路地址推送至Registry。
    $ sudo docker images
    REPOSITORY                                                         TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
    registry.aliyuncs.com/acs/agent                                    0.7-dfb6816         37bb9c63c8b2        7 days ago          37.89 MB
    $ sudo docker tag 37bb9c63c8b2 registry-vpc.cn-hangzhou.aliyuncs.com/acs/agent:0.7-dfb68161234

使用"docker images"命令找到映象,將該映象名稱中的域名部分變更為Registry專有網路地址。

    $ sudo docker push registry-vpc.cn-hangzhou.aliyuncs.com/acs/agent:0.7-dfb68161

從registry中拉取映象:

$ sudo docker pull registry.cn-hangzhou.aliyuncs.com/qz/nginx-vim:[映象版本號]1

登入阿里雲檢視已上傳的映象列表: https://cr.console.aliyun.com/#/imageList

自建私有倉庫

使用官方hub安裝自建私有倉庫有許多優點:
1.節省網路頻寬,針對於每個映象不用每個人都去中央倉庫上面去下載,只需要從私有倉庫中下載即可;
2.提供映象資源利用,針對於公司內部使用的映象,推送到本地的私有倉庫中,以供公司內部相關人員使用。
缺點:
只有即便的倉庫功能,沒有和賬號資訊關聯(這部分需要自研,大廠都有提供),共有和私有倉庫的許可權(需要自研)

使用官方提供的hub自己安裝

搭建私有倉庫:

# 下載registry映象
$ sudo docker pull registry
# 通過該映象啟動一個容器
$ sudo docker run -d -p 8082:8082 registry
# 對映映象路徑至宿機器、放置容器刪除、映象丟失:
$ sudo docker run -d -p 8082:8082 -v /opt/data/registry:/tmp/registry registry
修改配置並重啟Docker
vi /etc/docker/daemon.json
{
   "registry-mirrors": ["172.17.120.102:8082"],
   "insecure-registries":["172.17.120.102:8082"]
  
}
# 重啟 docker 服務
systemctl restart docker
測試倉庫Push/Pull:
# 首先pull一個比較小的映象(busybox)來測試
docker pull busybox
# 修改一下該映象的tag
$ docker tag busybox 172.17.120.102:8080/busybox
# 上傳映象到私有倉庫。
$ docker push  172.17.120.102:8082/busybox123456789101112131415161718192021222324

到此就搭建好了Docker私有倉庫,但是如上搭建的倉庫是不需要加密認證的,當然你可以通過證照或者Nginx實現認證訪問。下面介紹一下基於Nexus 3搭建的Docker私有倉庫。

基於Nexus 3搭建的Docker私有倉庫

nexus
Nexus簡介
Nexus是一個多功能的倉庫管理系統,是企業常用的私有倉庫伺服器軟體。目前常被用來作為Maven私服、Docker私服。
如果用java的maven元件那麼這個大公司基本都會有自己的私服nexus倉庫。

優點
安裝簡單,並且有官方Docker映象
使用者介面,並提供REST API
支援瀏覽、檢索以及檢查機制
支援npm與bower以及Raw repositories、NuGet repositories
總之Nexus物美價廉,又提供功能全面的oss版,加之支援種類眾多的依賴管理,又可以統一管理docker映象。

安裝
參考之前寫的一篇部落格: 本地私服倉庫nexus3.3.1使用手冊 。當然,這裡我們有更簡潔的安裝方式,由於nexus3+依賴於JDK1.8,可能有不少企業系統上安裝的還是1.7甚至是1.6版本,這裡建議主機安裝安裝,不適用Dokerfile。

參考資料

本地私服倉庫nexus3.3.1使用手冊
https://blog.52itstyle.vip/archives/1025/







About Me

........................................................................................................................

● 本文作者:小麥苗,部分內容整理自網路,若有侵權請聯絡小麥苗刪除

● 本文在itpub、部落格園、CSDN和個人微 信公眾號( DB寶)上有同步更新

● 本文itpub地址: http://blog.itpub.net/26736162

● 本文部落格園地址: http://www.cnblogs.com/lhrbest

● 本文CSDN地址: https://blog.csdn.net/lihuarongaini

● 本文pdf版、個人簡介及小麥苗雲盤地址: http://blog.itpub.net/26736162/viewspace-1624453/

● 資料庫筆試面試題庫及解答: http://blog.itpub.net/26736162/viewspace-2134706/

● DBA寶典今日頭條號地址: http://www.toutiao.com/c/user/6401772890/#mid=1564638659405826

........................................................................................................................

● QQ群號: 230161599 、618766405

● 微 信群:可加我微 信,我拉大家進群,非誠勿擾

● 聯絡我請加QQ好友 646634621 ,註明新增緣由

● 於 2020-04-01 06:00 ~ 2020-04-30 24:00 在西安完成

● 最新修改時間:2020-04-01 06:00 ~ 2020-04-30 24:00

● 文章內容來源於小麥苗的學習筆記,部分整理自網路,若有侵權或不當之處還請諒解

● 版權所有,歡迎分享本文,轉載請保留出處

........................................................................................................................

小麥苗的微店https://weidian.com/s/793741433?wfr=c&ifr=shopdetail

小麥苗出版的資料庫類叢書http://blog.itpub.net/26736162/viewspace-2142121/

小麥苗OCP、OCM、高可用網路班http://blog.itpub.net/26736162/viewspace-2148098/

小麥苗騰訊課堂主頁https://lhr.ke.qq.com/

........................................................................................................................

使用 微 信客戶端掃描下面的二維碼來關注小麥苗的微 信公眾號( DB寶)及QQ群(DBA寶典)、新增小麥苗微 信, 學習最實用的資料庫技術。

........................................................................................................................

歡迎與我聯絡

 

 



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26736162/viewspace-2684115/,如需轉載,請註明出處,否則將追究法律責任。

相關文章