Harbor란
Harbor는 Private Docker Registry로, 오픈소스이다.
내부적으로 Docker Registry를 사용하고 있으며, 여기에 RBAC, 웹 콘솔, Image scan 등의 편리한 기능이 추가되었다.
2020년 11월부터 Docker Hub의 image pull rate에 대한 limit이 걸렸는데, 관련된 내용은 아래와 같다.
- anonymous: 100 pulls per 6 hours per IP
- authenticated: 200 pulls per 6 hour
- subscription: no limits
사내에선 보통 forward proxy를 이용하니, Image Registry를 사용하면서 image pull rate을 초과할 일이 발생할 수 있다.
이러한 상황을 대비하여 Harbor와 같은 Private Docker Registry를 구축하여 사용하면 큰 도움이 될 것이다.
설치 방법
- Docker 설치
- Docker-compose 설치
- Harbor 설치
(원활한 실습 진행을 위해 root 사용자로 모든 작업을 진행했음.)
Docker 설치
먼저 Docker를 설치해준다.
EC2에 접속하여 아래 명령어를 통해 docker를 설치해주자.
[root@ip-10-0-0-82 ~]# sudo yum -y update
[root@ip-10-0-0-82 ~]# sudo amazon-linux-extras install -y docker
설치가 완료되면 docker service를 시작해주고, 동작 상태를 확인한다.
[root@ip-10-0-0-82 ~]# service docker start
Redirecting to /bin/systemctl start docker.service
[root@ip-10-0-0-82 ~]# systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
Active: active (running) since Mon 2022-05-02 05:02:03 UTC; 4s ago
ec2-user 사용자에 docker 명령어 실행 권한을 부여하려면 아래 명령어를 사용한다.
[root@ip-10-0-0-82 ~]# usermod -aG docker ec2-user
Docker-compose 설치
다음으로 docker-compose를 설치해준다.
Docker Compose는 다중 컨테이너 Application을 정의할 수 있도록 개발된 도구로,
단일 명령을 통해 한 번에 실행/종료가 가능하다.
설치 방법은 아래와 같다.
[root@ip-10-0-0-82 bin]# curl -L https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-${uname -s}-${uname -m} -o /usr/local/bin/docker-compose
[root@ip-10-0-0-82 bin]# chmod +x docker-compose
ln 명령어를 통해 링크 파일을 생성해준다.
[root@ip-10-0-0-82 bin]# sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
*링크 파일을 생성해주는 이유
먼저 /bin, /usr/local/bin, /usr/bin 디렉토리의 차이점에 대해 알 필요가 있다.
man hier를 통해 각각의 명령어에 대한 설명을 살펴보자.
/bin
This directory contains executable programs which are needed in single user mode and to bring the system up
/usr/bin
This is the primary directory for executable programs. Most programs executed by normal users which are
not needed for booting or for repairing the system and which are not installed locally should be placed in
this directory.
/usr/local/bin
Binaries for programs local to the site.
/bin은 Linux의 기본 명령어가 등록되어 있으며, 배포판에 따라 차이가 있지만 대체로 비슷한 명령어가 이 디렉토리에 위치한다.
/usr/bin은 /bin과 유사한 역할을 하며, 콘솔에서 확장된 프로그램이 들어간다.
가장 큰 차이점은 general-system-wide 범위에서 사용가능하다는 점이며, 이에 속하는 바이너리 파일로는 sudo, vi 명령어 등이 있다.
/usr/local/bin은 스스로 설치한 명령어를 사용할 수 있도록 하는 디렉토리이다.
Linux 저장소에 있는 것 이외의 것을 설치했을 때나, 자작 명령어를 보관할 때 유용하다.
예를 들어, 사용자 본인이 직접 로컬에서 compile한 프로그램이라면, /usr/bin에 위치시켜선 안된다.
아무런 경고 없이 업그레이드가 되거나, 삭제될 수 있기 때문에 이런 프로그램들은 반드시 /usr/local/bin 디렉토리에 위치시킨다.
만약 동일한 실행 파일이 여러 경로에 존재하는 경우 아래와 같이 PATH 환경변수가 등록되어 있다면,
출력된 왼쪽부터 명령어가 실행된다.
(1순위 /usr/local/sbin ..... 5순위 /root/bin)
[root@ip-10-0-0-82 bin]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
명령어의 우선순위는 위와 같지만, docker-compose 명령어를 참조하는 프로세스가 동작하는 경우와 같이
/usr/bin 혹은 /bin 디렉토리의 파일을 검사하는 경우 '명령어를 실행할 수 없다'는 오류가 발생할 수 있다.
그러므로 이러한 오류를 방지하기 위해서 /usr/bin/ 디렉토리로 symbolic link를 걸어준다.
docker compose 버전을 확인한다.
[root@ip-10-0-0-82 ~]# docker-compose version
Docker Compose version v2.5.0
Harbor 설치
이제 harbor를 설치해보자.
먼저 github에서 압축파일을 설치한다.
wget https://github.com/goharbor/harbor/releases/download/v2.5.0/harbor-offline-installer-v2.5.0.tgz
다운로드 후에는 압축을 해제한다.
[root@ip-10-0-0-82 tmp]# tar xvzf harbor-offline-installer-v2.5.0.tgz
harbor/harbor.v2.5.0.tar.gz
harbor/prepare
harbor/LICENSE
harbor/install.sh
harbor/common.sh
harbor/harbor.yml.tmpl
설치경로에서 tmpl 파일을 활용하여 필요한 설정값을 변경해준다.
(웹 콘솔의 admin password 값 또한 이 파일에서 수정이 가능하다.)
[root@ip-10-0-0-82 tmp]# cd harbor/
[root@ip-10-0-0-82 harbor]# ls
common.sh harbor.v2.5.0.tar.gz harbor.yml.tmpl install.sh LICENSE prepare
[root@ip-10-0-0-82 harbor]# cp harbor.yml.tmpl harbor.yml
hostname 부분을 ec2 instance의 Public IP로 수정해주고, 아래 https와 관련된 라인은 주석처리 해준다.
[root@ip-10-0-0-82 harbor]# cat harbor.yml
# Configuration file of Harbor
# The IP address or hostname to access admin UI and registry service.
# DO NOT use localhost or 127.0.0.1, because Harbor needs to be accessed by external clients.
hostname: 13.209.126.247
# http related config
http:
# port for http, default is 80. If https enabled, this port will redirect to https port
port: 80
# https related config
#https:
# https port for harbor, default is 443
# port: 443
# The path of cert and key files for nginx
#certificate: /your/certificate/path
#private_key: /your/private/key/path
prepare 파일을 실행시켜 준다.
[root@ip-10-0-0-82 harbor]# ./prepare
install.sh 파일을 실행시켜 준다.
[root@ip-10-0-0-82 harbor]# ./install.sh
이제 대부분의 설치과정이 완료되었다.
system이 재부팅되면 docker와 docker-compose가 뜨지 않기 때문에 서비스를 하나 추가해준다.
(harbor를 설치한 경로가 /root/라면 WorkingDirectory를 /root/harbor로 변경해준다.)
[root@ip-10-0-0-82 harbor]# cat /etc/systemd/system/docker-compose.service
[Unit]
Description=Docker Compose Application Service
Requires=docker.service
After=docker.service
[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/root/tmp/harbor
ExecStart=/usr/local/bin/docker-compose up -d
ExecStop=/usr/local/bin/docker-compose down
TimeoutStartSec=0
[Install]
WantedBy=multi-user.target
서비스 enable을 통해 최초 구동 시 서비스를 자동실행 시켜준다.
[root@ip-10-0-0-82 harbor]# systemctl enable docker-compose.service
Created symlink from /etc/systemd/system/multi-user.target.wants/docker-compose.service to /etc/systemd/system/docker-compose.service.
이제 system reboot 후 harbor 관리 콘솔로 접속해보자.
ec2의 public ip로 접속 시 아래와 같은 페이지가 표시되면 구축이 모두 완료된 것이다.
ID: harbor
PWD: Harbor12345
계정정보는 위와 같으며, 이는 harbor.yml 파일에서 변경이 가능하다.
이것으로 Harbor 설치가 완료되었다.
'AWS' 카테고리의 다른 글
Openswan을 활용한 AWS Site-to-Site VPN 구성하기 (0) | 2022.08.02 |
---|---|
EC2에 Jenkins 구축하기 (0) | 2022.05.03 |
EC2에 MySQL 설치하기 (0) | 2021.12.13 |
리전 별 가용영역 (0) | 2021.12.02 |
예약 인스턴스 vs Savings Plans (0) | 2021.11.30 |