目录
1、背景介绍
2、环境
3、部署(服务端操作)
4、测试镜像仓库(测试端操作)
查看远程仓库镜像
首页 运维 Docker 搭建docker私有仓库的方法

搭建docker私有仓库的方法

Nov 10, 2020 pm 04:28 PM
docker

搭建docker私有仓库的方法

1、背景介绍

在 Docker 中,当我们执行 docker pull xxx 命令的时候,可能会比较好奇,docker 会去哪儿查找并下载镜像呢?

相关推荐:docker教程

疑问回答:

它实际上是从 registry.hub.docker.com 这个地址去查找,这就是Docker公司为我们提供的公共仓库,上面的镜像,大家都可以到,也可以使用。所以,我们也可以带上仓库地址去拉取镜像,如:docker pull registry.hub.docker.com/library/alpine,不过要注意,这种方式下载的镜像的默认名称就会长一些。

如果要在公司中使用 Docker,我们基本不可能把商业项目上传到公共仓库中,那如果要多个机器共享,又能怎么办呢?

正因为这种需要,所以私有仓库也就有用武之地了。

所谓私有仓库,也就是在本地(局域网)搭建的一个类似公共仓库的东西,搭建好之后,我们可以将镜像提交到私有仓库中。这样我们既能使用 Docker 来运行我们的项目镜像,也避免了商业项目暴露出去的风险。

下面我们用官方提供的registry镜像来搭建私有镜像仓库,当然还有其它很多方法。

2、环境

准备两台安装好docker的服务器: 服务端机器 (主机名为registry):docker私有仓库服务器,运行registry容器; 测试端机器 (主机名为node):普通的docker服务器,在这台服务器上下载一个测试镜像nginx,然后上传到registry服务器进行测试;

3、部署(服务端操作)

  1. 下载镜像registry

    # docker pull registryUsing default tag: latest
    latest: Pulling from library/registry
    81033e7c1d6a: Pull complete 
    b235084c2315: Pull complete 
    c692f3a6894b: Pull complete 
    ba2177f3a70e: Pull complete 
    a8d793620947: Pull complete 
    Digest: sha256:672d519d7fd7bbc7a448d17956ebeefe225d5eb27509d8dc5ce67ecb4a0bce54
    Status: Downloaded newer image for registry:latest复制代码
    登录后复制
  2. 查看镜像

    # docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    registry            latest              f32a97de94e1        3 months ago        25.8 MB复制代码
    登录后复制
  3. 运行registry容器

    # docker run -itd -v /data/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest

    06a972de6218b1f1c3bf9b53eb9068dc66d147d14e18a89ab51db13e339d3dc9

    参数说明 -itd:在容器中打开一个伪终端进行交互操作,并在后台运行; -v:把宿主机的/data/registry目录绑定 到 容器/var/lib/registry目录(这个目录是registry容器中存放镜像文件的目录),来实现数据的持久化; -p:映射端口;访问宿主机的5000端口就访问到registry容器的服务了; --restart=always:这是重启的策略,假如这个容器异常退出会自动重启容器; --name registry:创建容器命名为registry,你可以随便命名; registry:latest:这个是刚才pull下来的镜像;

  4. 测试镜像仓库中所有的镜像

    # curl http://127.0.0.1:5000/v2/_catalog
    {"repositories":[]}
    现在是空的,因为才刚运行,里面没有任何镜像内容。

4、测试镜像仓库(测试端操作)

  1. 修改源和镜像仓库

    # vim /etc/docker/daemon.json{"registry-mirrors": [ "https://registry.docker-cn.com"]
    }# systemctl restart docker复制代码
    登录后复制
  2. 下载nginx镜像

    # docker pull nginx# docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    nginx               latest              719cd2e3ed04        2 weeks ago         109MB复制代码
    登录后复制
  3. 为镜像打标签

    # docker tag nginx:latest registry服务器:5000/nginx:kurisu复制代码
    登录后复制

    格式说明:Usage: docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

    nginx:lastest 这是源镜像,也是刚才pull下来的镜像文件;
    registry服务器:5000/nginx:kurisu 这是目标镜像,也是registry私有镜像服务器的IP地址和端口;

    查看效果

     # docker images
      
     REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
     registry服务器:5000/nginx   kurisu              719cd2e3ed04        2 weeks ago         109MB
     nginx                      latest              719cd2e3ed04        2 weeks ago         109MB复制代码
    登录后复制
  4. 上传到镜像服务器

    # docker push registry服务器:5000/nginxThe push refers to repository [registry服务器:5000/nginx]
    Get https://registry服务器:5000/v2/: http: server gave HTTP response to HTTPS client复制代码
    登录后复制

    这是报错了,需要https的方法才能上传,我们可以修改下daemon.json来解决:

    [root@node ~]# vim /etc/docker/daemon.json {  "registry-mirrors": [ "https://registry.docker-cn.com"],  "insecure-registries": [ "registry服务器:5000"]
    }复制代码
    登录后复制

    添加私有镜像服务器的地址,注意书写格式为json,有严格的书写要求,然后重启docker服务:
    # systemctl restart docker
    再次上传:

    # docker push registry服务器:5000/nginxThe push refers to repository [registry服务器:5000/nginx]
    d7acf794921f: Pushed
    d9569ca04881: Pushed
    cf5b3c6798f7: Pushed
    kurisu: digest: sha256:079aa93463d2566b7a81cbdf856afc6d4d2a6f9100ca3bcbecf24ade92c9a7fe size: 948复制代码
    登录后复制
  5. 测试下载镜像
    上传测试没问题了,我们接下来测试一下从registry服务器上下载刚才上传的busybox镜像,先删除node主机上的镜像:

    # docker rmi -f $(docker images -aq)Untagged: registry服务器:5000/nginx:kurisu
    Untagged: registry服务器:5000/nginx@sha256:079aa93463d2566b7a81cbdf856afc6d4d2a6f9100ca3bcbecf24ade92c9a7fe
    Untagged: nginx:latest
    Untagged: nginx@sha256:bdbf36b7f1f77ffe7bd2a32e59235dff6ecf131e3b6b5b96061c652f30685f3a
    Deleted: sha256:719cd2e3ed04781b11ed372ec8d712fac66d5b60a6fb6190bf76b7d18cb50105
    Deleted: sha256:e9b6506fb887de50972aefd99d7c5eb56b1a8e757ed953cdfecb86b5359bcb22
    Deleted: sha256:55d9d9692a9615a28d183a42bc3881a72a39393feba3664e669e7affb78daa76
    Deleted: sha256:cf5b3c6798f77b1f78bf4e297b27cfa5b6caa982f04caeb5de7d13c255fd7a1e复制代码
    登录后复制

    查看一下node主机上的镜像全部删除了:

    # docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZE复制代码
    登录后复制

    然后,从registry服务器上下载nginx镜像:

    # docker pull registry服务器:5000/nginx:kurisukurisu: Pulling from nginxfc7181108d40: Pull complete
    c4277fc40ec2: Pull complete
    780053e98559: Pull complete
    Digest: sha256:079aa93463d2566b7a81cbdf856afc6d4d2a6f9100ca3bcbecf24ade92c9a7fe
    Status: Downloaded newer image for registry服务器:5000/nginx:kurisu复制代码
    登录后复制

    查看node主机上的镜像:

    # docker imagesREPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
    registry服务器:5000/nginx   kurisu              719cd2e3ed04        2 weeks ago         109MB复制代码
    登录后复制

查看远程仓库镜像

  • 列出所有镜像:
# curl http://registry服务器:5000/v2/_catalog{"repositories":["nginx"]}复制代码
登录后复制
  • 列出nginx镜像有哪些tag:
# curl http://registry服务器:5000/v2/nginx/tags/list{"name":"nginx","tags":["kurisu"]}复制代码
登录后复制

以上是搭建docker私有仓库的方法的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

docker怎么更新镜像 docker怎么更新镜像 Apr 15, 2025 pm 12:03 PM

更新 Docker 镜像的步骤如下:拉取最新镜像标记新镜像为特定标签删除旧镜像(可选)重新启动容器(如果需要)

docker怎么退出容器 docker怎么退出容器 Apr 15, 2025 pm 12:15 PM

退出 Docker 容器的四种方法:容器终端中使用 Ctrl D 快捷键容器终端中输入 exit 命令宿主机终端中使用 docker stop <container_name> 命令宿主机终端中使用 docker kill <container_name> 命令(强制退出)

docker内的文件怎么拷贝到外面 docker内的文件怎么拷贝到外面 Apr 15, 2025 pm 12:12 PM

Docker 中将文件拷贝到外部主机的方法:使用 docker cp 命令:执行 docker cp [选项] <容器路径> <主机路径>。使用数据卷:在主机上创建目录,在创建容器时使用 -v 参数挂载该目录到容器内,实现文件双向同步。

docker怎么重启 docker怎么重启 Apr 15, 2025 pm 12:06 PM

重启 Docker 容器的方法:获取容器 ID(docker ps);停止容器(docker stop <container_id>);启动容器(docker start <container_id>);验证重启成功(docker ps)。其他方法:Docker Compose(docker-compose restart)或 Docker API(参考 Docker 文档)。

docker desktop怎么用 docker desktop怎么用 Apr 15, 2025 am 11:45 AM

如何使用 Docker Desktop?Docker Desktop 是一款工具,用于在本地机器上运行 Docker 容器。其使用步骤包括:1. 安装 Docker Desktop;2. 启动 Docker Desktop;3. 创建 Docker 镜像(使用 Dockerfile);4. 构建 Docker 镜像(使用 docker build);5. 运行 Docker 容器(使用 docker run)。

怎么看docker进程 怎么看docker进程 Apr 15, 2025 am 11:48 AM

Docker 进程查看方法:1. Docker CLI 命令:docker ps;2. Systemd CLI 命令:systemctl status docker;3. Docker Compose CLI 命令:docker-compose ps;4. Process Explorer(Windows);5. /proc 目录(Linux)。

docker容器名称怎么查 docker容器名称怎么查 Apr 15, 2025 pm 12:21 PM

可以通过以下步骤查询 Docker 容器名称:列出所有容器(docker ps)。筛选容器列表(使用 grep 命令)。获取容器名称(位于 "NAMES" 列中)。

docker镜像失败怎么办 docker镜像失败怎么办 Apr 15, 2025 am 11:21 AM

Docker镜像构建失败的故障排除步骤:检查Dockerfile语法和依赖项版本。检查构建上下文中是否包含所需源代码和依赖项。查看构建日志以获取错误详细信息。使用--target选项构建分层阶段以识别失败点。确保使用最新版本的Docker引擎。使用--t [image-name]:debug模式构建镜像以调试问题。检查磁盘空间并确保足够。禁用SELinux以防止干扰构建过程。向社区平台寻求帮助,提供Dockerfile和构建日志描述以获得更具体的建议。

See all articles