개요
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/<그룹명>/<프로젝트명>
- 예:
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 탭에서 푸시한 이미지 태그를 확인할 수 있을거다.