madebychung

did(docker in docker) 사설 레지스트리 본문

registry

did(docker in docker) 사설 레지스트리

mdchung 2024. 10. 23. 15:00

**Docker-in-Docker(DID)**는 하나의 Docker 컨테이너 안에서 또 다른 Docker 데몬을 실행하는 방식으로, 주로 테스트 및 CI/CD 환경에서 사용됩니다. 이 환경에서 사설 Docker 레지스트리를 설정하면 내부적으로 Docker 이미지를 저장하고 배포할 수 있습니다. 하지만 네트워크 및 자원 격리 문제가 발생할 수 있으므로 주의가 필요합니다. 이 글에서는 Docker-in-Docker 환경에서 사설 레지스트리를 구성하는 방법을 설명합니다.

1. Docker-in-Docker 환경 설정

Docker-in-Docker 환경에서는 컨테이너 내에서 Docker 데몬을 실행해야 합니다. 다음과 같은 방식으로 Docker 컨테이너를 실행할 수 있습니다.

실행 명령:

 
docker run --privileged -d --name test -p 2020:2020 -v /home/rocky/test:/home/rocky/test rockylinux:latest sleep infinity

여기서 --privileged 플래그는 컨테이너가 호스트의 커널 리소스에 접근할 수 있도록 합니다. 이 컨테이너 내에서 Docker 데몬을 실행할 수 있으며, 이를 기반으로 사설 레지스트리를 설정하게 됩니다.

컨테이너 내부 접속:

 
docker exec -it test bash

위 명령을 통해 컨테이너 내부로 접속하여 레지스트리 설정을 시작할 수 있습니다.


2. 사설 Docker 레지스트리 설정

사설 Docker 레지스트리는 내부적으로 Docker 이미지를 저장하고 배포하는 역할을 합니다. 이를 위해 Docker 레지스트리 이미지를 사용하여 설정할 수 있습니다.

2.1. 필수 패키지 설치

먼저, 레지스트리를 실행하기 위해 필요한 패키지를 설치합니다.

패키지 설치 명령:

 
dnf install openssl -y
dnf install iproute -y
dnf install docker -y
nohup dockerd > /var/log/dockerd.log 2>&1 &

이 명령어들은 레지스트리 설정에 필요한 도구와 Docker 데몬을 백그라운드에서 실행시킵니다.

2.2. 레지스트리 컨테이너 실행

사설 레지스트리 컨테이너를 다음 명령어로 실행합니다:

bash
코드 복사
docker run -d -p 2020:2020 --name registry registry:2
  • -p 2020:2020: 호스트의 포트 2020을 컨테이너의 2020번 포트로 매핑합니다.
  • --name registry: 레지스트리 컨테이너의 이름을 registry로 지정합니다.

이로써 레지스트리 컨테이너가 실행되며, 내부적으로 Docker 이미지를 저장할 수 있는 사설 레지스트리가 설정됩니다.


3. 사설 레지스트리 연결 테스트

컨테이너 내부와 호스트에서 레지스트리가 제대로 동작하는지 확인하기 위해 curl 명령을 사용하여 레지스트리 상태를 확인할 수 있습니다.

3.1. 컨테이너 내부에서 연결 테스트

 
curl -k -u test:test! https://10.88.0.1:2020/v2/_catalog

위 명령을 통해 사설 레지스트리에서 저장된 이미지 목록을 가져올 수 있습니다. 성공 시 아래와 같은 출력이 나타납니다:

 
{"repositories":[""]}

3.2. 호스트에서 연결 테스트

호스트 시스템에서도 레지스트리가 정상적으로 동작하는지 확인합니다.

 
curl -k -u test:test! https://<호스트_IP>:2020/v2/_catalog

여기서 <호스트_IP>는 호스트의 실제 IP 주소로 변경해야 합니다. 출력 결과는 다음과 같아야 합니다:

 
{"repositories":[""]}

이로써 사설 Docker 레지스트리가 호스트와 컨테이너 모두에서 정상적으로 동작하는 것을 확인할 수 있습니다.


결론

Docker-in-Docker 환경에서 사설 레지스트리를 구성하는 방법은 내부적으로 Docker 이미지를 저장하고 관리하는 데 매우 유용합니다. 네트워크 설정 및 필요한 패키지를 설치한 후 레지스트리를 실행하고, 호스트와 컨테이너 간에 정상적으로 연결되었는지 확인하는 과정이 포함됩니다. 이 구성을 통해 CI/CD 환경에서 효율적인 이미지 관리가 가능해집니다.

 

 

인증서 관련해서 하면 빡세짐 

'registry' 카테고리의 다른 글

Helm Chart Repository  (0) 2024.07.08
USED HARBOR  (0) 2024.07.08
Habor (Docker)  (0) 2024.07.08