[Docker] 깃랩(Gitlab) container registry에 도커 이미지 배포하기

개요

GitLab은 자체 Container Registry 기능을 제공하여 프로젝트별로 Docker 이미지를 쉽게 저장하고 배포할 수 있다.


도커로 설치한 Gitlab을 기준으로 Container Registry를 활성화하고,

도커 이미지도 배포해보는 실습을 진행해보자.


1. 사전 준비

  • GitLab Docker 컨테이너 구동 중
  • GitLab에 접근 가능한 포트 열기
    • HTTP(80), HTTPS(443), SSH(22) 외에 Container Registry는 5050 포트(기본값)

2. Docker Compose 예시

docker-compose.yaml

version: '3.7'
services:
  gitlab:
    image: gitlab/gitlab-ce:latest
    container_name: gitlab
    restart: always
    hostname: 'gitlab.example.com'
    ports:
      - '80:80'       # HTTP
      - '443:443'     # HTTPS
      - '22:22'       # SSH
      - '5050:5050'   # Container Registry
    volumes:
      - ./config:/etc/gitlab
      - ./logs:/var/log/gitlab
      - ./data:/var/opt/gitlab
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://gitlab.example.com'
        registry_external_url 'http://gitlab.example.com:5050'
        
        # (필수) 레지스트리 활성화 설정
        gitlab_rails['registry_enabled'] = true
        
        # (권장) Container Registry 호스트 및 포트 설정
        gitlab_rails['registry_host'] = "gitlab.example.com"
        gitlab_rails['registry_port'] = "5050"
        
        # (권장) GitLab 내부에서 레지스트리로 접근 시 사용하는 내부 URL
        gitlab_rails['registry_api_url'] = "http://localhost:5050"

        # (HTTPS를 사용할 경우)
        # registry_nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab.example.com.crt"
        # registry_nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab.example.com.key"
        # registry_nginx['listen_https'] = true
        # registry_nginx['listen_port'] = 5050
        
        # 추가로 HTTPS 설정 시 gitlab.rb(또는 여기)에서 설정 필요
  • registry_external_url은 external_url과 마찬가지로 HTTP/HTTPS 프로토콜과 포트를 포함해야 한다.
  • SSL을 사용할 경우 registry_external_url 'https://gitlab.example.com:5050'처럼 변경하고, SSL 인증서를 설정해야 한다.
  • Docker Compose로 볼륨을 마운트해서 gitlab.rb를 직접 수정할 수도 있지만, Omnibus 이미지는 일반적으로 GITLAB_OMNIBUS_CONFIG 환경 변수로 설정하는 방식을 권장하고 있다.

설정 적용하기

docker-compose up -d
  • 재생성 시 시간이 꽤 걸릴 수 있으니 잠시 대기.
  • 성공적으로 기동되면, 웹 브라우저를 통해 http://gitlab.example.com (또는 설정한 도메인/IP)로 접속해보자.

3. GitLab에서 Container Registry 확인하기

  • 1. GitLab 관리자 계정으로 로그인
  • 2. GitLab 웹 UI > Admin Area(관리자 페이지) > Settings > Registry 항목이 보이거나, 프로젝트 진입 후 좌측 메뉴에 Registry(혹은 “Packages & Registries” > “Container Registry”)가 나타남.
  • 3. 설정이 제대로 되어 있다면, 해당 프로젝트의 Registry 탭에서 이미지를 푸시할 수 있는 주소(URL)가 표시됨.
    • 예: gitlab.example.com:5050/<그룹명>/<프로젝트명>

Image


4. 도커 이미지를 GitLab Container Registry에 배포하기

4-1. 도커 로그인

로컬 환경에서 다음 명령어로 Registry에 로그인하자.

docker login gitlab.example.com:5050
  • Username: GitLab 사용자명 또는 이메일
  • Password: GitLab 웹에서 사용하는 비밀번호 or Personal Access Token

주의 사항

  • 2FA가 활성화되어 있으면, Personal Access Token(레지스트리 권한 포함)으로 로그인해야 한다.
  • HTTPS 설정이 올바르지 않은 경우, docker login에서 인증서 관련 오류가 발생할 수 있다.

4-2. 이미지 빌드 및 태깅

테스트용 Dockerfile이 있다고 가정하고, 이미지 빌드 후 레지스트리 URL로 태깅해주자.

docker build -t myapp:latest .
docker tag myapp:latest gitlab.example.com:5050/<그룹>/<프로젝트>/myapp:latest

4-3. 이미지 푸시

docker push gitlab.example.com:5050/<그룹>/<프로젝트>/myapp:latest

푸시가 완료되면 GitLab의 해당 프로젝트 > Registry 탭에서 푸시한 이미지 태그를 확인할 수 있을거다.
Image

관련 글

지식 공유2분 읽기

[Docker] 컨테이너(Container)에 할당되는 CPU 제한하기

개요 이번 게시글에서는 도커 컨테이너에서 CPU를 최적으로 활용하는 방법에 대해서 기록해보려고 한다. 호스트 CPU Core 정보 확인 먼저 컨테이너에 CPU를 최적으로 할당하기 위해서는, 현재 호스트 시스템의 CPU 정보에 대해서...

도커
지식 공유1분 읽기

[Docker] 배그 최고급 꾸러기 시뮬레이터 배포

개요 최고급 꾸러미에 대한 확률 체감을 위한 시뮬레이터 프로그램을 구현하고 도커로 배포하였음. 배포 로직은 AWS EC2 인스턴스에 도커를 사용하여 nginx proxy manager를 배포하고 리버스 프록시로 홈 서버에 있는 시뮬레...

도커