专业的编程技术博客社区

网站首页 > 博客文章 正文

Docker实战007:docker仓库使用详解

baijin 2024-11-06 09:34:33 博客文章 5 ℃ 0 评论

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

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表