Container Image Registry 개요
Image Registry는 컨테이너 이미지를 저장하는 공간이다. 모두에게 공개된 공간에 구성된 퍼블릭 이미지 저장소가 있고, 특정 사용자에게만 공개하는 프라이빗 이미지 저장소로 구분된다. 기업이 애플리케이션 개발 과정에 사용할 이미지 저장소는 보통 프라이빗 이미지 저장소를 사용한다. Docker Hub, AWS Elastic Container Registry, Google Container Registry와 같은 퍼블릭하게 사용하는 이미지 저장소에서도 프라이빗 이미지 저장소를 지원한다.
구축형 이미지 저장소
가능하다면 클라우드 사업자가 제공해주는 퍼블릭/프라이빗 컨테이너 이미지 저장소를 사용하는 것이 가장 좋다. 이미지 저장소를 직접 구축하게 되면 호스트 서버를 구성하고 운영 관리를 위한 비용이 발생한다. 그에 비해 클라우드 사업자가 제공해주는 이미지 저장소를 사용하면 보안, 성능, 운영과리를 서비스로 더욱 저렴한 비용으로 제공 받을 수 있다. 하지만 온프레미스 환경을 사용하거나 클라우드 사업자가 제공해주는 이미지 저장소를 사용할 수 없는 상황이라면 Nexus, Harbor와 같은 도구를 이용해서 이미지 저장소를 직접 구축할 수 있다.
- Harbor는 VMware에서 개발한 오픈소스 컨테이너 이미지 저장소다. RBAC, 이미지 스캐닝, 복제 등 보안 기능이 강화되어 있다.
- Nexus는 Sonatype에서 개발한 다목적 저장소다. 컨테이너 이미지 외에도 Maven, npm 등 다양한 아티팩트를 지원한다.
Nexus 설치
① 도커 설치
sudo yum update -y
sudo yum install docker -y
sudo service docker start
sudo usermod -a -G docker ec2-user
sudo setfacl -m user:ec2-user:rw /var/run/docker.sock
② 넥서스에서 사용할 폴더 생성
cd ~
mkdir nexus-directory
sudo chown -R 200 nexus-directory
③ 넥서스 컨테이너 실행
sudo docker run -d -p 8081:8081 -p 8082:8082 --name nexus -v ~/nexus-directory:/nexus-data sonatype/nexus3:latest
④ 넥서스 컨테이너 접근 후 초기 패스워드 확인
docker exec -it nexus /bin/bash
cat /nexus-data/admin.password
넥서스 저장소 구성
① 웹 브라우저에서 http://<REGISTRY_SERVER_IP>:8081 접속 후 로그인 (로그인 후 관리자 패스워드 재설정)
② 설정 화면 → Repositories → Create repository 클릭
③ 화면에서 docker(hosted) 클릭
④ 저장소 설정 정보 입력
• Name 입력
• HTTP 체크박스 체크 → 8082 입력
• 'Enable Docker V1 API' 체크 (호환성을 위해)
• Storage는 Default 유지
• 화면 하단으로 내려가 'Create repositry' 버튼 클릭
⑤ Security - Realms 화면 이동 → Docker Bearer Token Realm 추가 → 저장 버튼 클릭
넥서스 접속 테스트
① 도커에서 이미지 저장소 접근 시 https → http 접속 설정
# sudo vim /etc/docker/daemon.json
{
"insecure-registries" : [ "<REGISTRY_SERVER_IP>:8082" ]
}
② 도커 프로세스 재기동
sudo systemctl restart docker
③ 넥서스 로그인
$ docker login -u admin <REGISTRY_SERVER_IP>:8082
Password:
WARNING! Your password will be stored unencrypted in /home/ec2-user/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
④ 이미지 업로드 테스트
docker pull postgres
docker tag postgres <REGISTRY_SERVER_IP>:8082/database:1.0.0
docker push <REGISTRY_SERVER_IP>:8082/database:1.0.0
⑤ 넥서스에 업로드된 이미지 확인
'Infrastructure & Systems > Docker' 카테고리의 다른 글
[Docker] Dockerfile (0) | 2025.04.09 |
---|---|
[Docker] 자주 사용하는 명령어 정리 (1) | 2024.12.09 |