text/common

Docker Registry를 이용해 사설 private image서버 설정

hoonzii 2025. 1. 11. 15:41
반응형

개발 서버에 Docker를 설치하고, Jenkins에서 Docker를 제어하기 위해 Registry 설정이 필요하다는 지시를 받았습니다.

이를 통해 CI/CD 파이프라인을 구축하며, 구성시 예상 시나리오는 다음과 같습니다.

  1. 회사 GitHub에 프로젝트 파일과 Dockerfile 업로드
  2. Jenkins가 이를 가져와 Dockerfile을 이용해 이미지를 생성
  3. 생성된 이미지를 Registry에 등록
  4. Jenkins에서 원격으로 컨테이너를 제어
    1) stop 기존 container (존재 시)
    2) rm 기존 container (존재 시)
    3) private registry 서버에서 pull image
    4) 받은 image run container

그림으로 대충 그리면 이리 되는거

 

 

오늘은 이 과정 중에서 Docker Registry가 무엇인지 간략하게 알아보고, 제가 한 설정을 정리하겠습니다.

+원격으로 서버 docker에 명령을 내리는 법까지 같이 정리!

 

Docker Registry란 무엇인가?

Docker Registry는 Docker 이미지를 저장하고 관리하는 중앙 저장소 역할을 합니다. 이를 통해 여러 개발 환경(개발, 스테이징, 프로덕션)에서 동일한 이미지를 공유할 수 있습니다. Registry는 크게 두 가지 형태로 나뉩니다:

  • Public Registry: Docker Hub와 같은 공용 저장소로, 전 세계 개발자들이 이미지를 공유하고 사용할 수 있습니다.
  • Private Registry: 조직 내부에서만 사용 가능한 비공개 저장소로, 보안과 데이터 관리를 강화할 수 있습니다.

Registry는 다음과 같은 이점을 제공합니다:

  • 이미지 버전 관리
  • 빠르고 효율적인 배포
  • 중앙 집중식 관리
  • Jenkins와 같은 CI/CD 도구와의 연동

registry를 이용하면 회사 내에서만 가용하는 image를 생성하고,

이 image를 올리고 내리고, 실행시키게끔 jenkins와 연동하면 배포를 좀 더 편리하게 구성할 수 있게 되겠죠?

 

서버 설정

1. Docker 설치

먼저 개발 서버에 Docker를 설치합니다. 설치 과정은 아래 링크를 참고했습니다:

 

CentOS 7 도커 설치하기 (도커 사용법)

Overview컨테이너 기반 가상화 도구로 CI/CD의 중추이자 컨테이너 이미지의 비공식 표준이기도 한 도커의 설치법 및 간단한 사용법에 대해 알아보겠습니다.- 설치환경 : Linux/CentOS 71. 도커란 무언인

deoking.tistory.com

# yum update
sudo yum update
sudo yum install -y yum-utils

# docker repo 추가
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 최신버전 docker 설치
sudo yum install docker-ce docker-ce-cli containerd.io -y

# 버전확인
docker -v

# 서비스 시작.
sudo systemctl start docker

 

2. Docker Registry 구성

Docker 이미지를 관리하기 위해 Private Registry를 설정합니다. 아래는 설정 과정입니다:

2.1. Registry Container 구성

 

[Docker Registry] Docker Image를 활용한 Local Registry 구축

이번 포스팅에서는 간단하게 Docker Registry를 구축하는 방법에 대해 살펴보겠습니다. 지난 여러번의 포스팅을 통해 Nexus를 활용한 Docker Private Registry를 구축하는 과정에 대해 살펴보았는데요. 사실

waspro.tistory.com

# registry image 가져오기
sudo docker pull registry

# registry container run
sudo docker run -d --name dev_docker_registry -p 5000:5000 --restart=always \
    -e REGISTRY_HTTP_ADDR=0.0.0.0:5000 \
    -e REGISTRY_HTTP_TLS_CERTIFICATE= \
    -e REGISTRY_HTTP_TLS_KEY= \
    registry:latest

2.2. Insecure Registry 옵션 설정

Private Registry는 기본적으로 보안 연결(HTTPS)을 요구합니다. 그러나 내부 테스트 환경에서는 Insecure Registry 설정을 통해 HTTP 연결을 허용할 수 있습니다. 이를 설정하는 방법은 다음과 같습니다.

# daemon.json 수정
sudo vi /etc/docker/daemon.json

# 아래내용을 추가
{
    "insecure-registries": ["{private-registry}:5000"]
}

# 설정 확인
sudo docker info

 

참고로 Registry 호스트와 이미지를 전송하려는 클라이언트 서버 모두에 설정해야 합니다.

 

 

3. Registry 및 원격 테스트

설정을 완료한 후, Push와 Pull이 정상적으로 동작하는지 확인합니다:

3.1. 클라이언트에서 테스트

# 테스트 이미지를 Pull
docker pull hello-world

# 이미지를 태그하여 Registry에 Push
docker --tag {registry_host}:5000/hello-world:1.0 .
docker push {registry_host}:5000/hello-world:1.0

3.2. 원격 서버에서 테스트

# Registry에 pull 가능한 이미지 목록 확인
curl http://{registry_host}:5000/v2/_catalog

# Registry에서 이미지 Pull
docker pull {registry_host}:5000/hello-world:1.0

 

4. Docker-Client 설정 (원격 제어)

원격 서버에서 Docker를 제어하기 위해 Docker-Client 설정이 필요합니다.

아래는 참고 자료입니다:

 

원격 접속 가능한 도커 서비스 만들기

유튜브 영상 바로가기 https://youtu.be/54lwC8K4WB0 이번 시간은 아주 간단하게 도커를 원격으로 사용...

blog.naver.com

 

Docker Remote API를 사용하여 원격 Docker 정보 얻어오기

'docker ps' 라는 Docker 명령은 Local에 존재하는 Docker System에서만 유효한 명령어이다. 오늘의 도전 과제 원격지의 'docker ps' 결과 얻어오기 우선 docker service 를 설치하면 기본적으로 unix socket 을 통해

tifferent.tistory.com

 

docker.service 파일에 다음 내용을 추가합니다

# docker.service 파일 수정
sudo vi /usr/lib/systemd/system/docker.service

# 아래 내용으로 ExecStart 수정
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H 0.0.0.0:2375

 

4.1. 원격 서버에서 run

# 원격 서버에서 docker server로 명령
docker -H {registry_host}:2375 run {registry_host}:5000/hello-world:1.0

 

 

이번엔 Docker와 Registry 설정을 구성하고, 원격으로 명령어를 날리는 것을 정리했습니다.

반응형