Profile picture

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

JaehyoJJAng2023년 07월 11일

개요

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


Loading script...