registry kvm: 192.168.122.99
proxy kvm: 192.168.122.98
client kvm: 192.168.122.97
1. registry 용 vm 생성
host $ sudo virt-install --name registry --os-variant ubuntu22.04 --vcpus 1 --ram 2048 \ --network network:default --cdrom /path/to/ubuntu-22.04.1-live-server-amd64.iso \ --disk size=10 |
2. (공통) 도커 설치
host $ virsh start registry host $ ssh registry registry $ echo "$USER ALL=(ALL:ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers registry $ sudo apt update registry $ sudo apt install vim iptables registry $ wget https://download.docker.com/linux/ubuntu/dists/jammy/pool/stable/amd64/containerd.io_1.6.21-1_amd64.deb registry $ wget https://download.docker.com/linux/ubuntu/dists/jammy/pool/stable/amd64/docker-buildx-plugin_0.11.1-1~ubuntu.22.04~jammy_amd64.deb registry $ wget https://download.docker.com/linux/ubuntu/dists/jammy/pool/stable/amd64/docker-ce-cli_24.0.4-1~ubuntu.22.04~jammy_amd64.deb registry $ wget https://download.docker.com/linux/ubuntu/dists/jammy/pool/stable/amd64/docker-ce_24.0.4-1~ubuntu.22.04~jammy_amd64.deb registry $ wget https://download.docker.com/linux/ubuntu/dists/jammy/pool/stable/amd64/docker-compose-plugin_2.19.1-1~ubuntu.22.04~jammy_amd64.deb registry $ sudo dpkg -i *.deb registry $ rm -rf * registry $ sudo usermod -aG docker $USER registry $ sudo shutdown 0 |
3. registry vm 을 proxy vm(과 client vm)으로 복사
host $ virt-clone --original registry --name proxy --file /var/lib/libvirt/images/proxy.qcow2 host $ virsh dumpxml proxy | grep '<mac' <mac address='52:54:00:ce:18:74'/> host $ virsh net-edit default <ip address='192.168.122.1' netmask='255.255.255.0'> <dhcp> <range start='192.168.122.100' end='192.168.122.254'/> <host mac='52:54:00:a9:5f:97' name='registry' ip='192.168.122.99'/> <host mac='52:54:00:ce:18:74' name='proxy' ip='192.168.122.98'/> <host mac='52:54:00:22:dd:40' name='client' ip='192.168.122.97'/> |
4. proxy vm(과 client vm)의 hostname 변경
host $ virsh start proxy host $ ssh proxy proxy $ sudo hostnamectl set-hostname proxy proxy $ sudo sed -i 's/registry/proxy/' /etc/hosts proxy $ sudo reboot |
5. registry 설정
5.1. 사설 repository 사용 설정
host $ ssh registry registry $ sudo vi /etc/docker/daemon.json { "insecure-registries": ["192.168.122.99:5000"] } registry $ sudo systemctl restart docker |
5.2. registry 실행
registry $ mkdir -p workspace/registry registry $ cd workspace registry $ vi docker-compose.yml version: "3" services: registry: image: registry:2.8.2 container_name: registry volumes: - ./registry:/var/lib/registry ports: - 5000:5000 restart: always registry $ docker compose up -d |
5.3. 테스트용 도커 이미지 생성
registry $ mkdir ~/test registry $ cd ~/test registry $ vi Dockerfile FROM alpine CMD echo 'hello registry 1.0' registry $ docker build -t 192.168.122.99:5000/test/hello:1.0 . registry $ docker push 192.168.122.99:5000/test/hello:1.0 registry $ curl http://192.168.122.99:5000/v2/_catalog {"repositories":["test/hello"]} registry $ curl http://192.168.122.99:5000/v2/test/hello/tags/list {"name":"test/hello","tags":["1.0"]} |
6. proxy 설정
host $ ssh proxy proxy $ mkdir -p workspace/registry proxy $ cd workspace proxy $ vi docker-compose.yml version: "3" services: proxy: image: registry:2.8.2 container_name: proxy environment: - REGISTRY_PROXY_REMOTEURL="http://192.168.122.99:5000" volumes: - ./registry:/var/lib/registry ports: - 5000:5000 restart: always proxy $ docker compose up -d |
7. client 설정
host $ ssh client client $ sudo vi /etc/docker/daemon.json { "insecure-registries": ["192.168.122.98:5000"] } client $ sudo systemctl restart docker client $ curl http://192.168.122.98:5000/v2/_catalog {"repositories":[]} client $ docker run --rm -it 192.168.122.98:5000/test/hello:1.0 hello registry 1.0 client $ curl http://192.168.122.98:5000/v2/_catalog {"repositories":["test/hello"]} |
참고:
https://waspro.tistory.com/532
https://bobcares.com/blog/docker-registry-mirroring/
https://docs.docker.com/registry/spec/api/
https://docs.docker.com/registry/spec/api/