网站首页 > 技术文章 正文
Docker仓库就是用来存储镜像的地方,我们可以将镜像上传至仓库,也可以从仓库下载镜像。Docker提供一个注册服务器(Registry)用来管理仓库的服务器,一个服务器上可以存在多个仓库,每个仓库下也可以存放多个具备不同tag的镜像。Docker官方维护了一个公共仓库:https:/hub.docker.com,这里提供了可以满足大部分需求的镜像,用户无需登录即可通过docker search命令来查找镜像并利用docker pull命令来将它下载到本地。我们也可以在 https://hub.docker.com/ 注册一个 Docker 账号免费使用docker仓库,通过docker push命令来将自己的镜像推送到 Docker Hub(操作跟git相似,很容易上手)。
Docker Hub
docker仓库分为公共仓库和私有仓库,公共仓库顾名思义就是一个开放的服务,允许用户通过注册服务进行免费上传、下载公开的镜像。目前Docker官方维护了一个公共仓库 Docker Hub,我们可以通过 https://hub.docker.com 免费注册一个 Docker 账号。这个仓库跟Github等代码托管平台很相似,仓库操作也跟Git很相似(很容易上手)。私有仓库则是不公开的仓库,只有被授权的成员才能访问或者下载该仓库的资源。在本地搭建的一个类似公共仓库,搭建好之后就可以将镜像提交到私有仓库中。这样我们既能使用Docker来运行我们的项目镜像,也可以避免资源被泄露。
配置docker镜像加速器
除了Docker官方提供了 Docker Hub的镜像服务,国内一些云服务商也提供类似于 Docker Hub 的公开服务。如阿里云、腾讯云、网易云、DaoCloul、时速云等镜像服务,这些镜像服务被称为加速器。我们可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器。登录阿里云获取专属的镜像加速器地址,daemon.json文件一般再在/etc/docker目录下,如果没有则新建即可。使用加速器会直接从国内的地址下载 Docker Hub 的镜像,比直接从 Docker Hub下载速度会提高很多。
拉取docker镜像
拉取docker hub的镜像很简单,用户不需要登录就可以通过docker search命令查询Docker Hub官方仓库中的镜像,命令格式为:docker search [options] keyword。同时docker提供了拉取命令:docker pull [options] <origin>/<repository>:<tag>,该命令可以从origin远程仓库(默认Docker Hub )中的repository仓库拉取标签为tag的镜像(如果省略标签则拉取标签为latest的镜像)。
创建docker仓库
上传镜像之前我们需要先登录docker仓库创建一个资源仓库,在Docker Hub通过“Create Repository”按钮来创建一个资源仓库,输入仓库名称和描述并选择公共 public 的仓库或者私有 private 的仓库,输入信息之后点击下方的“Create”按钮就可以完成仓库的创建了。
登录Docker Hub
在仓库中我们可以看到一个“Docker commands”告诉我们如何上传一个新的标签镜像到该仓库,上传仓库指令为:docker push kevinfan2011/docker:tagname。回到docker中我们需要先登录docker hub服务,在docker中通过docker login命令可以输入用户名和密码(密码不显示)即可登录Docker Hub。登录之后会在本地创建一个.docker/config.json文件,该文件保存了用户登录的认证信息。
上传docker镜像
在上传之前先给本地镜像打个tag标签,给镜像打上标签之后才能push。通过docker tag命令将镜像重命名为docker账户名/仓库名称,语法格式为:docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]。其中SOURCE_IMAGE指的是本地镜像,TARGET_IMAGE指的是docker账号/docker仓库。指定标签之后就可以开始上传本地镜像标签到镜像仓库,使用docker指令:docker push docker 账号/仓库名称:tagname即可完成镜像上传到Docker Hub(速度比较慢...)。Push成功之后就可以登录到dockerhub网站查看一下刚才创建的仓库名称,里面应该有一个tag为hello-world的镜像了。
删除tag镜像
通过docker tag命令打上标签之后此时仓库中有两个镜像,镜像id相同只是多了一个tag标签(就是多了一个镜像引用)。用镜像id强制删除会物理性的镜像删除(引用也会同时被删除),如果只要想要删除不需要的引用镜像我们可以通过tag来删除。
搭建本地私有仓库
docker提供了registry镜像来搭建本地私有仓库,通过命令:docker run -d -p 5000:5000 --restart=alwarys registry:2会自动下载并启动一个registry容器来创建本地私有仓库服务。此时会在本地启动一个私有仓库服务,监听端口为5000。--restart=alwarys 表示随docker daemon启动一起启动,该仓库默认创建在/var/lib/registry目录下默认情况下仓库会被创建在容器的 /tmp/registry 下(docker默认安装目录为/var/lib/docker),如果怕镜像丢失也可以通过参数-v来指定存放路径。
总结:
Docker将运行环境打包保存至容器使用时直接启动即可,这样就可以实现跨平台在物理机、虚拟机、公有云等环境的中快速迁移和部署。Docker仓库帮助我们在线存储镜像,到哪都可以一键拉取运行,可以实现快速交付到线上。以上内容是小编给大家分享的【Docker实战007:docker仓库使用详解】。希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。
为了方便学习,下面附上本文用到的源码:
# mkdir -p /etc/docker
# tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xxxxxx.mirror.aliyuncs.com"]
}
EOF
# systemctl daemon-reload
# systemctl restart docker
// 从注册服务器registry.hub.docker.com中的ubuntu仓库下载标记为 12.04 的镜像。
$ docker pull registry.hub.docker.com/ubuntu:12.04
Options:
# -a 拉取所有不同标签的镜像(可选参数)
-a, --all-tags Download all tagged images in the repository
# 忽略镜像校验,默认项
--disable-content-trust Skip image verification (default true)
---------------------------------------------------------------------------------
# docker pull ubuntu:12.04 //默认从docker.io/library/ubuntu:12.04下载
# docker login
# docker tag hello-world kevinfan2011/docker:hello-world
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
kevinfan2011/docker hello-world bf756fb1ae65 9 months ago 13.3kB
hello-world latest bf756fb1ae65 9 months ago 13.3kB
# docker push kevinfan2011/docker:hello-world
The push refers to repository [docker.io/kevinfan2011/docker]
9c27e219663c: Mounted from library/hello-world
hello-world: digest: sha256:90659bf80b44ce6be8234e6ff90a1ac34acbeb826903b02cfa0da11c82cbc042 size: 525
# docker rmi --help
Usage: docker rmi [OPTIONS] IMAGE [IMAGE...]
Remove one or more images
Options:
-f, --force Force removal of the image
--no-prune Do not delete untagged parents
------------------------------------------------------------------
# docker rmi kevinfan2011/docker:hello-world
Untagged: kevinfan2011/docker:hello-world
Untagged: kevinfan2011/docker@sha256:90659bf80b44ce6be8234e6ff90a1ac34acbeb826903b02cfa0da11c82cbc042
Deleted: sha256:bf756fb1ae65adf866bd8c456593cd24beb6a0a061dedf42b26a993176745f6b
Deleted: sha256:9c27e219663c25e0f28493790cc0b88bc973ba3b1686355f221c38a36978ac63
# cat .docker/config.json
{
"auths": {
"https://index.docker.io/v1/": {
"auth": "*****允许用户登录的token信息*****"
}
},
"HttpHeaders": {
"User-Agent": "Docker-Client/19.03.13 (linux)"
}
}
# docker run -d -p 5000:5000 --restart=alwarys registry:2
Unable to find image 'registry:2' locally
2: Pulling from library/registry
cbdbe7a5bc2a: Pull complete
47112e65547d: Pull complete
46bcb632e506: Pull complete
c1cc712bcecd: Pull complete
3db6272dcbfa: Pull complete
Digest: sha256:8be26f81ffea54106bae012c6f349df70f4d5e7e2ec01b143c46e2c03b9e551d
Status: Downloaded newer image for registry:2
78dafde5342f909cc1cd98e5d48c2c671cfae16b82d1c7ced788182a6da4fb48
猜你喜欢
- 2024-09-29 Docker 简介(docker-it)
- 2024-09-29 Docker Hub 遭入侵,19 万帐号被泄露
- 2024-09-29 K8S系列学习之DockerHub自有镜像库搭建和使用
- 2024-09-29 终于有人把Docker讲清楚了,Docker入门教程,原来这么简单...
- 2024-09-29 Docker镜像管理(docker镜像管理PPT)
- 2024-09-29 Docker从入门到精通:Docker pull命令学习
- 2024-09-29 DockerDockerfile深度解析(dockerfile sh)
- 2024-09-29 Docker架构最全详解(图文全面总结)
- 2024-09-29 docker的镜像和仓库(常用docker镜像仓库)
- 2024-09-29 DockerHub 镜像仓库的使用(docker hub 镜像站点)
- 1509℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 530℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 494℃MySQL service启动脚本浅析(r12笔记第59天)
- 473℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 470℃启用MySQL查询缓存(mysql8.0查询缓存)
- 451℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 430℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 427℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- linux删除一个文件夹 (65)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)