금일은 Docker 의 Registry 를 대체할 수 있는 Harbor 를 통해 Private Registry 를 생성하는 방법에 대해 실습 포스팅일 하겠습니다.
harbor 생성에 앞서서 docker-compose 를 이용해서 설치하겠습니다.
helm 을 이용해서 설치할 수도 있지만 k8s cluster 를 구성하지 않은채로 설치를 진행하게 되면 인증부분과 ip address 부분에서 문제가 있기 때문에 docker compose 를 활용하겠습니다.
harbor install
harbor version github
linux 환경에서 진행하기 때문에 현재 windows 10 환경에서 dind_images 를 이용해서 command 를 작성해보겠습니다.
[git bash]
docker run --privileged --name my-harbor -itd -p 10022:22 -p 8082:8080 -p 80:80 -p 443:443 -e container=docker -v //sys/fs/cgroup:/sys/fs/cgroup:rw --cgroupns=host edowon0623/docker:latest /usr/sbin/init
docker exec -it my-harbor bash // harbor main server connect
yum install ncurses // clear command install
설치가 완료 되었으면 아래의 command 를 따라서 인증서를 생성해 보겠습니다.
// 해당 명령어를 입력하게 되면 생성하게 될 self root ca 의 정보를 아래와 같이 임의로 정해주시면 됩니다.
1. CA Certificates
openssl genrsa -out ca.key 4096 // 키생성
openssl req -x509 -new -nodes -sha512 -days 365 -key ca.key -out ca.crt// 공개키 생성
2. make a dir
mkdir certs
mv ca.crt ca.key ./certs/
// 마찬가지로 root key 의 정보와 동일해도 상관없습니다.
3. Server Certificates Generate
openssl genrsa -out server.key 4096
openssl req -new -sha512 -key server
.key -out server.csr
// 해당 server csr 파일은 도메인에 추가해보겠습니다.
// csr 파일을 가지고 crt 파일을 생성합니다.
4.
vi v3ext.cnf
=> subjectAltName = IP:192.xxx.x.xx, IP:127.0.0.1 다음과 같이 hostpc 의 ip address 를 적어주시면 됩니다.
openssl x509 -req -sha512 -days 365 \
-extfile v3ext.cnf -CA ca.crt -CAkey ca.key -CAcreateserial \
-in server.csr -out server.crt
// docker engine 등록을 위해 crt 파일 자체를 cert 파일로 변경이 필요합니다.
openssl x509 -inform PEM -in server.crt -out server.cert
// docker engine 에 위의 정보를 저장합니다.
// 해당 위치는 Docker에서 사용하는 인증서(certificate)를 저장하는 디렉토리입니다.
5. Docker Engine
mkdir -p /etc/docker/certs.d/server
cp server.cert /etc/docker/certs.d/server/
cp server.key /etc/docker/certs.d/server/
cp ca.crt /etc/docker/certs.d/server/
[root ca 정보 입력]

1. Container에서 docker-compose 설치
$ curl -L "https://github.com/docker/compose/releases/download/v2.6.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose
$ docker-compose --version
2. 설치 파일 다운로드
yum install wget -y
wget https://github.com/goharbor/harbor/releases/download/v2.2.2/harbor-offline-installer-
v2.2.2.tgz
tar -xf harbor-offline-installer-v2.2.2.tgz
3. 설정
cd harbor
cp harbor.yml.tmpl harbor.yml
vi harbor.yml
// ip address 변경시 harbor 재설치가 필요합니다.
4. 설치 실행
./prepare // harbor 에 필요한 이미지 가져오기
./install.sh // docker-compose 재기동
docker-compose ps
5. daemon.json 파일 등록 (docker 에서 harbor 에 접근해서 이미지를 가져올 수 있는 파일 생성)
vi /etc/docker/daemon.json
// json 파일에는 ip address + 루프백 ip address 가 들어가면 됩니다.
{
"insecure-registries": ["192.x.x.x", "127.0.0.1"]
}
systemctl restart docker
[docker 재실행중 문제가 발생하게 된다면]
systemctl status docker // process number 확인
journalctl -xa | grep [number] // error cause 확인
harbor.yml 파일에 hostname 에 hostpc ip address 와 certificate, private_key 에 위치를 확인해주어 변경해주시면 됩니다.
해당 yml 파일에서 esc + :shell 로 접근하게되면 yml 파일 종료 없이 밖으로 나갈 수 있습니다. 되돌아 오는 방법은 exit 명령어를 입력해주시면 됩니다.
[docker-compose ps]


docker-compose ps
./install.sh
harbor 의 해당 컨테이너 9개가 전부 실행중인지 확인한 후 실행중이지 않다면 install.sh 명령어를 통해 재실행해주어야 합니다.
harbor 접속은 아래의 url 로 접속 가능합니다.
https://ip address
셀프 인증서를 만들었기 때문에 해당 사이트 접속시 안전하지 않는 페이지 접속을 통해 접속을 하시면 됩니다.
초기사용자 이름과 비밀번호는 vi harbor.yml 에서 찾아볼 수 있습니다.
Username : admin
Password : Harbor12345
harbor test

[harbor bash]
docker login ip address
docker pull edowon0623/catalog-service:1.0 // docker hub 에 등제되어있는 public image 입니다. (안전함)
docker tag edowon0623/catalog-service:1.0 192.xxx.x.x/devops/catalog-service:1.0
docker push 192.xxx.x.x/devops/catalog-service:1.0 // harbor registry 에 푸시, root (admin)
[git bash]
docker run --privileged --name myapp -itd -p 20022:22 -p 8083:8080 -e container=docker -v //sys/fs/cgroup:/sys/fs/cgroup:rw --cgroupns=host edowon0623/docker:latest /usr/sbin/init
docker exec -it myapp bash
systemctl start docker


user1 터미널에서 docker engine 에서 registry 의 정보가 포함되어야 합니다.
user1 터미널에서도 마찬가지로 /etc/docker/daemon.json 해당파일을 생성해주어야 합니다. 위를 참고해 주시기 바랍니다.
json 파일 추가후
systemctl restart docker
docker login -u user1 ip address
권한이 부여 받았기 때문에 user1 도 해당 이미지를 private harbor 로 부터 받을 수 있습니다.
docker pull 192.168.0.5/devops/catalog-service:1.0