ITPub博客

首页 > 数据库 > Oracle > Docker 如何把镜像上传到docker hub

Docker 如何把镜像上传到docker hub

原创 Oracle 作者:lhrbest 时间:2020-04-02 13:10:10 0 删除 编辑


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/,如需转载,请注明出处,否则将追究法律责任。

全部评论
【QQ:646634621】【微信:lhrbestxh】【微信公众号:DB宝】【11g、12c OCM】【QQ群:230161599、618766405】【《数据库笔试面试宝典》作者】【OCP、OCM、高可用(RAC+DG+OGG)、MySQL培训班已开讲,只讲实用内容】

注册时间:2012-09-23

  • 博文量
    1498
  • 访问量
    8685335