Docker 패키지 및 Docker Private Registry 설치

본 문서는 Ubuntu 환경에서 Docker 패키지를 설치 후, Docker Private Registry를 만들어 운용하는 방법을 설명한다.

Docker 패키지 및 Docker Private Registry 설치
Photo by Rubaitul Azad / Unsplash

🗺️ 개요

본 문서는 우분투 리눅스 환경에서 docker 패키지를 설치 한 후, Docker Registry 이미지를 이용하여 Docker Private Registry 설정하여 운용하는 환경 구성에 대해서 설명합니다.

설정 시 사용한 환경은 아래와 같습니다.

  • 우분투: 20.04
  • Docker: 25.0.1
  • Docker-Compose: 1.25.0

🐳 Docker 패키지 설치

우분투 리눅스 콘솔에서 아래 명령을 입력하여 Docker 패키지 설치를 진행합니다. 각종 패키지 설치 시 sudo 권한이 필요합니다. 설치 완료 후 개인 사용자에게 docker 사용 권한을 부여하여 개인 사용자가 docker 이용 시 sudo 권한 없이 이용할 수 있도록 설정합니다.

# 도커 사용 모듈 설치
sudo apt update
sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common

# 도커 설치 준비
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update

# 도커 설치
sudo apt install docker-ce docker-ce-cli docker-compose containerd.io

# 도커 설치 확인
sudo systemctl status docker
sudo docker run hello-world

# 유저가 도커 사용할 수 있도록 그룹에 추가
sudo usermod -aG docker $USER
sudo chmod 666 /var/run/docker.sock

# Docker Daemon 연결 설정 
sudo vi /etc/docker/daemon.json 

# daemon.json 파일에 아래 내용 기입
# 192.168.X.X에 자신에게 맞는 IP 정보를 기입합니다.
# 예) ["192.168.1.1:5000"]
{
    "insecure-registries": ["192.168.X.X:5000"]
}

# Docker 재시작
sudo systemctl restart docker

📝 Docker Private Registry 설정

Docker Registry는 docker-compose를 사용하여 설치합니다. docker registry와 web-registry를 설치하여 사용 편의성을 개선합니다. docker-compose.yaml에 docker registry와 web-registry 설치에 필요한 설정을 작성합니다.

volume 경로를 따로 설정하지 않으면 /var/lib/docker/volumes 에 볼륨 파일이 생성됩니다. 하지만, 저는 기본 경로가 아닌 제가 원하는 경로로 볼륨 파일의 경로를 설정하여 사용합니다.

registry의 파일 볼륨 경로와 registry의 환경 설정 볼륨 경로를 설정하면, 이미지 재기동 시 이전 사용과 동일한 상태로 Docker registry를 구동할 수 있습니다. 물론 안전한 사용을 위해 해당 경로를 주기적으로 백업해두면 좋습니다!

  • [registry의 파일 볼륨 경로]는 docker image 등록 시 관련 파일이 저장되는 경로입니다.
  • [registry의 환경 설정 볼륨 경로]는 docker registry 환경 설정 파일이 저장되는 볼륨 경로입니다. 딱히 설정을 수정할 일은 없으나 혹시 몰라 설정하는 항목입니다.
  • [web-registry의 환경 설정 볼륨 경로]는 docker web-registry 환경 설정 파일이 저장되는 볼륨 경로입니다.
version: '3'
services:
    docker-registry:
        image: registry:latest
        container_name: registry
        ports:
            - 48800:5000
        volumes:
            - registry_volume:/var/lib/registry/docker
            - registry_conf:/etc/docker/
            - /var/run/docker.sock:/var/run/docker.sock
    web-registry:
        image: hyper/docker-registry-web
        container_name: web-registry
        ports:
            - 48880:8080
        volumes:
            - web_conf:/conf
volumes:
    registry_volume:
        driver: local
        driver_opts:
            type: none
            o: bind
            device: [registry의 파일 볼륨 경로]
    registry_conf:
        driver: local
        driver_opts:
            type: none
            o: bind
            device: [registry의 환경 설정 볼륨 경로]
    web_conf:
        driver: local
        driver_opts:
            type: none
            o: bind
            device: [web-registry의 환경 설정 볼륨 경로]
            
version: '3'
services:
    docker-registry:
        image: registry:latest
        container_name: registry
        ports:
            - 48800:5000
        volumes:
            - registry_volume:/var/lib/registry
            - /var/run/docker.sock:/var/run/docker.sock
    web-registry:
        image: hyper/docker-registry-web
        container_name: web-registry
        ports:
            - 48880:8080
        volumes:
            - registry_conf_volume:/conf

위의 파일을 작성 후 아래 명령으로 이미지를 실행합니다.

# 아래 명령은 docker-compose.yaml 파일이 존재하는 디렉토리 내에서 수행해야 합니다.
docker compose up -d

웹브라우저를 열어 우분투 리눅스 PC의 IP주소와 포트 48800/v2/_catalog, 48880에 접속해봅니다. 예) http://192.168.1.1:48800/v2/_catalog, http://192.168.1.1:48800/

48800v2/_catalog 접속 시 "repositories"란 문자열이 출력되면 정상입니다. 48880 접속 시 화면 좌측 상단에 Web Registry란 문구가 있으면 정상입니다.

Web Registry 설정이 필요합니다.

# web-registry sh 진입
docker exec -it web-registry bash

# 환경 설정 파일 수정
vi /conf/config.yml

# url, name 항목을 자신에 맞게 변경
url: 'http://192.168.1.1:48800/v2'
name: '192.168.1.1:48800'

# web-registry sh 종료
exit

# docker 재기동
# 아래 명령은 docker-compose.yaml 파일이 존재하는 디렉토리 내에서 수행해야 합니다
docker compose down
docker compose up -d

재기동 후 웹브라우저로 다시 Web Registry 접속 시 에러 문구가 나타나면 안됩니다!

docker-registry 설정이 끝났으면, 임시로 이미지를 만들어 등록 확인을 수행합니다.

# 기본 hello-world 이미지를 이용해 private registry용 tag 생성
docker tag hello-world 192.168.1.1:48800/test/hello

# private registry에 이미지 push
docker push 192.168.1.1:48800/test/hello

Using default tag: latest
The push refers to repository [192.168.1.4:48800/test/hello]
*******: Pushed 
latest: digest: sha256:*********** size: 524

위와 같이 push가 정상적으로 완료되면 docker-registry는 정상적으로 설정되었습니다. 이미지 push 후 web-registry를 웹 브라우저로 방문해보면 방금 push 한 이미지를 확인할 수 있습니다.