Docker搭建私有仓库(三)

本文详细介绍如何使用Docker在两台服务器上搭建并测试私有仓库,包括镜像的下载、上传及从私有仓库下载镜像的过程。

Docker搭建私有仓库(三)

转载自https://blog.youkuaiyun.com/qq_32523587/article/details/82879015
一、环境
准备两台安装好docker的服务器:
服务端机器 (主机1名为docker私有仓库):docker私有仓库服务器,运行registry容器;
测试端机器 (主机2名为docker):普通的docker服务器,在这台服务器上下载一个测试镜像busybox,然后上传到registry服务器进行测试
二、主机1配置镜像仓库

  1. 下载镜像

    [root@localhost ~]# docker pull registry
    Using default tag: latest
    latest: Pulling from library/registry
    c87736221ed0: Pull complete 
    1cc8e0bb44df: Pull complete 
    54d33bcb37f5: Pull complete 
    e8afc091c171: Pull complete 
    b4541f6d3db6: Pull complete 
    Digest: sha256:8004747f1e8cd820a148fb7499d71a76d45ff66bac6a29129bfdbfdc0154d146
    Status: Downloaded newer image for registry:latest
    [root@localhost ~]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    registry            latest              f32a97de94e1        3 months ago        25.8MB
    
  2. 运行registry容器

    在/opt/目录下创建registry目录

    [root@localhost ~]# docker run -itd -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always --name test_registry registry:latest
    014bc49e8e1e6a8f6e489ed4e80b3d16b94c320a4f75e449bda8651516ac144f
    [root@localhost ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
    014bc49e8e1e        registry:latest     "/entrypoint.sh /etc…"   7 seconds ago       Up 5 seconds        0.0.0.0:5000->5000/tcp   test_registry
    

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

  3. 查看仓库中所有镜像

    [root@localhost ~]# curl http://127.0.0.1:5000/v2/_catalog
    {"repositories":[]}
    

    现在是空的,因为才刚运行,里面没有任何镜像内容。

三、使用主机2测试镜像仓库

  1. 下载busybox镜像

    [root@localhost ~]# docker pull busybox
    Using default tag: latest
    latest: Pulling from library/busybox
    8e674ad76dce: Pull complete 
    Digest: sha256:c94cf1b87ccb80f2e6414ef913c748b105060debda482058d2b8d0fce39f11b9
    Status: Downloaded newer image for busybox:latest
    [root@localhost ~]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    busybox             latest              e4db68de4ff2        2 weeks ago         1.22MB
    
  2. 为镜像打标签

    [root@localhost ~]# docker tag busybox:latest  192.168.1.40:5000/busybox:v1
    [root@localhost ~]# docker images
    REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
    192.168.1.40:5000/busybox   v1                  e4db68de4ff2        2 weeks ago         1.22MB
    busybox                     latest              e4db68de4ff2        2 weeks ago         1.22MB
    

    格式说明:Usage: docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
    busybox:lastest 这是源镜像,也是刚才pull下来的镜像文件;
    192.168.1.40:5000/busybox:v1:这是目标镜像,也是registry私有镜像服务器的IP地址和端口;

  3. 上传到镜像服务器

    [root@localhost ~]# docker push 192.168.1.40:5000/busybox:v1
    The push refers to repository [192.168.1.40:5000/busybox]
    Get https://192.168.1.40:5000/v2/: http: server gave HTTP response to HTTPS client
    

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

    [root@node ~]# vi /etc/docker/daemon.json 
    {
      "registry-mirrors": [ "https://registry.docker-cn.com"],
      "insecure-registries": [ "192.168.1.40:5000"]
    }
    systemctl restart docker
    

    添加私有镜像服务器的地址,注意书写格式为json,有严格的书写要求。
    再一次上传镜像文件:

    [root@localhost ~]# docker push 192.168.1.40:5000/busybox:v1
    The push refers to repository [192.168.1.40:5000/busybox]
    6194458b07fc: Layer already exists 
    v1: digest: sha256:bf510723d2cd2d4e3f5ce7e93bf1e52c8fd76831995ac3bd3f90ecc866643aff size: 527
    
  4. 查看主机1镜像服务器仓库

    [root@localhost ~]# curl http://127.0.0.1:5000/v2/_catalog
    {"repositories":["busybox"]}
    

四、测试从registry服务器私有仓库中下载镜像

  1. 先删除测试主机2上的所有镜像
    [root@localhost ~]# docker images
    REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
    192.168.1.40:5000/busybox   v1                  e4db68de4ff2        2 weeks ago         1.22MB
    busybox                     latest              e4db68de4ff2        2 weeks ago         1.22MB
    [root@localhost ~]# docker rmi -f $(docker images -aq)
    Untagged: 192.168.1.40:5000/busybox:v1
    Untagged: 192.168.1.40:5000/busybox@sha256:bf510723d2cd2d4e3f5ce7e93bf1e52c8fd76831995ac3bd3f90ecc866643aff
    Untagged: busybox:latest
    Untagged: busybox@sha256:c94cf1b87ccb80f2e6414ef913c748b105060debda482058d2b8d0fce39f11b9
    Deleted: sha256:e4db68de4ff27c2adfea0c54bbb73a61a42f5b667c326de4d7d5b19ab71c6a3b
    Deleted: sha256:6194458b07fcf01f1483d96cd6c34302ffff7f382bb151a6d023c4e80ba3050a
    Error: No such image: e4db68de4ff2
    [root@localhost ~]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    
  2. 从主机2的registry服务器上下载busybox镜像
    [root@localhost ~]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    [root@localhost ~]# docker pull 192.168.1.40:5000/busybox:v1
    v1: Pulling from busybox
    8e674ad76dce: Pull complete 
    Digest: sha256:bf510723d2cd2d4e3f5ce7e93bf1e52c8fd76831995ac3bd3f90ecc866643aff
    Status: Downloaded newer image for 192.168.1.40:5000/busybox:v1
    [root@localhost ~]# docker images
    REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
    192.168.1.40:5000/busybox   v1                  e4db68de4ff2        2 weeks ago         1.22MB
    

五、检查主机1的仓库

  1. 列出私有仓库中所有镜像

    [root@localhost ~]# curl http://192.168.1.40:5000/v2/_catalog
    {"repositories":["busybox"]}
    
  2. 列出busybox镜像有哪些tag

    [root@localhost ~]# curl http://192.168.1.40:5000/v2/busybox/tags/list
    {"name":"busybox","tags":["v1"]}
    
  3. 可以在主机2的cd /opt/registry/docker/registry/v2/repositories目录下

    找到主机1push的镜像

    [root@localhost repositories]# pwd
    /opt/registry/docker/registry/v2/repositories
    [root@localhost repositories]# ll
    总用量 0
    drwxr-xr-x. 5 root root 55 6月  23 11:15 busybox
    
<think>好的,我需要帮助用户在WSL环境中使用Docker搭建Harbor私有仓库。首先,我应该回顾用户提供的引用内容,看看有哪些相关的步骤可以参考。 用户提到在引用[3]中,有人成功在Windows 11上通过WSL搭建了Harbor。因此,我需要确保步骤适用于WSL的Ubuntu环境。同时,引用[2]提到了docker-compose的安装方法,而Harbor依赖于docker-compose,所以安装这个工具是必要的。 首先,我需要确认用户已经安装了Docker。根据引用[1]和[4],用户可能已经在WSL的Ubuntu中部署了Docker,但可能需要验证安装。接下来,安装docker-compose,按照引用[2]的方法,使用curl下载并配置权限。 然后,下载Harbor的离线安装包,解压后进行配置。用户需要修改harbor.yml文件,设置hostname和端口,可能还要调整数据持久化路径。这里需要注意WSL的文件系统是否支持持久化存储,可能需要指定到用户目录下。 配置完成后,运行安装脚本,启动Harbor容器。之后,用户需要通过浏览器访问Harbor的界面,可能需要处理WSL和Windows主机之间的网络连接,比如使用localhost或WSL的IP地址。此外,配置Docker信任私有仓库,修改daemon.json文件,并重启Docker服务,这部分在引用[1]和[3]中都有涉及。 最后,验证Harbor是否正常工作,比如登录、推送和拉取镜像。可能需要提醒用户注意权限和项目创建的问题。用户可能遇到防火墙或端口冲突的问题,需要检查端口是否被占用,如80或443端口是否已经被其他服务占用。 另外,用户可能在HTTPS配置上有疑问,特别是如果使用自签名证书,需要指导如何正确配置Docker以信任这些证书。如果用户不需要HTTPS,可能需要调整harbor.yml中的相关设置。 总结步骤:安装依赖工具、下载Harbor、配置YML文件、安装并启动、访问和配置Docker客户端、测试。需要确保每一步都清晰,并给出可能的问题解决方案。</think>以下是在WSL中通过Docker部署Harbor私有仓库的完整步骤: ### 一、环境准备 1. 更新系统包 ```bash sudo apt update && sudo apt upgrade -y ``` 2. 安装docker-compose ```bash sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose ``` ### 二、Harbor部署流程 1. 下载Harbor离线包(v2.8.2) ```bash wget https://github.com/goharbor/harbor/releases/download/v2.8.2/harbor-offline-installer-v2.8.2.tgz tar xzvf harbor-offline-installer-*.tgz cd harbor ``` 2. 配置harbor.yml ```yaml hostname: localhost # 若需外部访问改为0.0.0.0 http: port: 8080 # 避免WSL端口冲突 data_volume: /home/${USER}/harbor-data # WSL持久化存储路径 ``` 3. 执行安装脚本 ```bash sudo ./install.sh ``` ### 、访问验证 1. 浏览器访问 ``` http://localhost:8080 # 默认账号admin/Harbor12345 ``` 2. 配置Docker信任私有仓库 ```bash echo '{ "insecure-registries":["localhost:8080"] }' | sudo tee /etc/docker/daemon.json sudo systemctl restart docker ``` ### 四、镜像操作示例 ```bash docker login localhost:8080 docker tag nginx:latest localhost:8080/library/nginx:test docker push localhost:8080/library/nginx:test ``` ### 常见问题解决 1. **端口冲突**:若80/443端口被占用,可在harbor.yml修改为未使用端口 2. **存储权限**:若出现文件权限错误,执行`sudo chown -R 10000:10000 /home/${USER}/harbor-data` 3. **WSL2网络限制**:需在Windows防火墙放行对应端口[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值