上传到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

posted @ 2022-04-03 15:41  博二爷  阅读(53)  评论(0编辑  收藏  举报