• 上传到dockerhub


    来源:(47条消息) Docker 如何把镜像上传到docker hub_牧竹子的博客-CSDN博客_dockerhub上传镜像

    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 MB

    创建dockerfile
    mkdir docker_file
    cd docker_file/
    vi Dockerfile
    内容如下

    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"]
    docker build -t cenots/httpd:1.0 .

    ...
    Removing intermediate container bd9551733fae
    Successfully built 88bb00e21fc6

    查看当前已经有两个镜像了

    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 MB


    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_spence

    发布docker
    接下来就是登录一个hub帐号了 命令: docker login 如果成功则显示下图

    docker login


    输入用户名,密码登陆成功即可

    这个过程和github的使用非常相似

    1.commit一个容器 命令: docker commit CONTAINER_ID 仓库路径

    docker commit 2907ad80faca zhangbamboo/test

    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

    success

    现在验证一下 命令: 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"
    ]
    }
    上传Docker镜像到阿里云
    配置阿里云的镜像加速器:https://cr.console.aliyun.com/#/accelerator
    参考 配置docker加速器中的内容
    https://blog.csdn.net/zjcjava/article/details/91380509

    登录阿里云Docker Registry
    $ sudo docker login --username=zjcjava@163.com registry.cn-hangzhou.aliyuncs.com
    1
    用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。

    您可以在产品控制台首页修改登录密码。

    从Registry中拉取镜像
    $ sudo docker pull registry.cn-hangzhou.aliyuncs.com/dreamer/dokcer_test:[镜像版本号]
    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.0

    请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数。

    选择合适的镜像仓库地址
    从ECS推送镜像时,可以选择使用镜像仓库内网地址。推送速度将得到提升并且将不会损耗您的公网流量。
    如果您使用的机器位于VPC网络,请使用 registry-vpc.cn-hangzhou.aliyuncs.com 作为Registry的域名登录,并作为镜像命名空间前缀。

    示例
    使用"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-dfb6816

    使用"docker images"命令找到镜像,将该镜像名称中的域名部分变更为Registry专有网络地址。

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

    从registry中拉取镜像:

    $ sudo docker pull registry.cn-hangzhou.aliyuncs.com/qz/nginx-vim:[镜像版本号]

    登录阿里云查看已上传的镜像列表: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/busybox
    到此就搭建好了Docker私有仓库,但是如上搭建的仓库是不需要加密认证的,当然你可以通过证书或者Nginx实现认证访问。下面介绍一下基于Nexus 3搭建的Docker私有仓库。

    基于Nexus 3搭建的Docker私有仓库

    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/
    ————————————————
    版权声明:本文为CSDN博主「牧竹子」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/zjcjava/article/details/90908500

  • 相关阅读:
    虚拟环境和包
    1105471854403716
    Sunshine on my shoulders
    ERROR: Command errored out with exit status 1:
    JAVA调用SAP ODATA服务
    reacthooks学习
    mtalb 密度图 制作
    vue3.0 + vite + ts 完成自动导入 vue API 和 自动导入组件
    【报告笔记】作物顺式调控模块的挖掘与利用
    【WDL】5. 实践与建议
  • 原文地址:https://www.cnblogs.com/smartisn/p/16096139.html
Copyright © 2020-2023  润新知