Profile picture

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

JaehyoJJAng2023년 07월 11일

개요

Gitlab의 Container registry에 도커 이미지를 배포해보는 과정을 기록해보려고 한다.


사전 준비

  • Gitlab 서버

실습을 위해 깃랩 서버 도커로 구축하기를 참고하여 gitlab을 도커로 배포하고, 내부망에서 도메인 네임으로 쉽게 접근하기 위해 DNS 서버도 따로 구성하였다.


구성된 깃랩 도커는 다음과 같고,
image


DNS는 다음과 같다.

nslookup gitlab.myhome.com

image


docker-compose.yaml 수정

사전 준비의 gitlab 구축 관련 글을 참고하였다면 아래와 같은 docker-compose.yaml 파일이 작성되었을텐데,

services:
  gitlab:
    image: gitlab/gitlab-ce:latest
    container_name: gitlab
    hostname: 'gitlab.waytothem.store'
    restart: always
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://{서버 IP주소}:8080'
        gitlab_rails['gitlab_shell_ssh_port'] = 2422
      GITLAB_TIMEZONE: Asia/Seoul
    ports:
      - "8080:8080"
      - "2422:2422"
    volumes:
      - type: bind
        source: "./gitlab/config"
        target: "/etc/gitlab"
      - type: bind
        source: "./gitlab/logs"
        target: "/var/log/gitlab"
      - type: bind
        source: "./gitlab/data"
        target: "/var/opt/gitlab"
    shm_size: '256m'

여기서 gitlab 컨테이너의 환경 설정 등을 수정하고, registry 컨테이너를 추가로 생성해줘야 한다.

Gitlab에서 Containe Registry를 사용하기 위해서는 외부의 container registry를 gitlab과 연동시켜줘야 한다.

그 외부 container registry를 docker compose에 같이 생성해 동일한 도커 네트워크에 묶이도록 할거다.

아래와 같이 작성해주자.
(환경 설정의 값들은 본인의 환경에 맞게 수정.)

services:
  gitlab:
    image: gitlab/gitlab-ce:latest
    container_name: gitlab
    hostname: 'gitlab.myhome.com'
    restart: always
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://gitlab.myhome.com:8929'
        registry_external_url 'http://gitlab.myhome.com:5001'
        gitlab_rails['gitlab_shell_ssh_port'] = 2424
        gitlab_rails['gitlab_default_projects_features_container_registry'] = true
      GITLAB_TIMEZONE: Asia/Seoul
    ports:
      - "8929:8929"
      - "2424:22"
      - "443:443"
    volumes:
      - type: bind
        source: "./gitlab/config"
        target: "/etc/gitlab"
      - type: bind
        source: "./gitlab/logs"
        target: "/var/log/gitlab"
      - type: bind
        source: "./gitlab/data"
        target: "/var/opt/gitlab"
    shm_size: '256m'
  
  registry:
    image: registry:latest
    restart: always
    ports:
      - "5001:5000"
    volumes:
      - "register-data:/var/lib/registry/docker/registry/v2"
    container_name: registry

volumes:
  register-data: {}

gitlab 컨테이너에 환경 설정 속성에 registry_external_url 'http://gitlab.myhome.com:5001'가 추가 되었고,

registry 컨테이너도 추가로 생성되었다.


Container registry 이미지 배포

  • Gitlab Private container registry에 도커 이미지를 배포하는 방법을 실습해보자.

1. gitlab 로그인

1-1. container registry에 접근하기 위해 gitlab에 로그인을 먼저 해주자.

echo "$GITLAB_PASSWORD" | docker login [서버 IP]:[포트] -u ${GITLAB_USERNAME} --password-stdin

image


1-1. HTTP 접근 오류

도커 레지스트리에 http로 접근하게되면 다음과 같은 에러가 발생한다.

$ docker login http://192.168.219.114:8929 

image


보안을 위해서 도메인에 HTTPS 인증을 처리하는게 좋지만, 실습을 간단하게 할 것이기 때문에 위 오류가 뜨지 않도록 설정을 조금 만져주자.


docker의 JSON 설정 파일을 수정해주면 되는데 경로는 다음과 같다.
/etc/docker/daemon.json

{
    "insecure-registries": ["Registry 서버IP:포트"]
}

image
위 내용을 추가해주자.


추가했다면 변경 내역을 적용하기 위해 다음 명령을 실행해 도커를 재시작하자.

sudo systemctl restart docker

1-2. 프로젝트 생성

성공적으로 로그인이 되었다면 프로젝트 탭에 들어가 새로운 프로젝트를 다음과 같이 생성해주자.
image


그리고 Deploy -> Container Registry 탭으로 가면 다음과 같이 컨테이너 레지스트리에 배포하는 방법이 나온다.
image
자, 배포를 이제부터 시작해보자!


2. container registry에 등록할 이미지 build

컨테이너 레지스트리에 배포할 도커 이미지를 간단하게 생성하고 빌드해주자.

이미지 경로는 gitlab에 /root/test 경로로 지정해줄거다.

docker build --tag [서버 IP]:[포트]/root/test

image


생성된 이미지 이름을 확인해보자.

docker images | grep 'gitlab.myhome.com'

image


3. container registry에 이미지 push

컨테이너 레지스트리에 빌드된 이미지를 push 해주자.

docker push gitlab.myhome.com:5001/root/test

image


4. container regitsry에서 이미지 pull

그럼 이제 반대로 container registry에서 업로드 된 이미지가 정상적으로 pull 되는지 확인해보자.

docker pull gitlab.myhome.com:5001/root/test

image
정상적으로 pull이 되었다!


Loading script...