Local Docker Registry 실습: 개발 환경 공유와 관리

y001·2025년 2월 23일
0
post-thumbnail

시나리오


여러 개발자가 동일한 개발 환경을 구축하고 공유하려면, 각자 필요한 서비스를 쉽게 가져와서 사용할 수 있어야 한다. 예를 들어, Redis, MySQL, MongoDB와 같은 데이터베이스는 개발 시 필수적인 서비스이다. 도커를 사용하면 이 환경을 컨테이너로 쉽게 만들고 공유할 수 있다.

시나리오 설명

  • vm1(192.168.2.10): 개발 환경을 먼저 구축한다. 필요한 이미지들을 로컬 레지스트리에 푸시한다.
  • vm2(192.168.2.20): 다른 개발자가 vm1에서 공유한 이미지를 가져오려고 한다. vm2에서 vm1의 로컬 레지스트리에 접근하여 이미지를 풀받고 실행한다.

주의사항

vm2에서 vm1의 로컬 레지스트리로 접근할 수 없는 경우가 있을 수 있다. 이 경우, vm1vm2에서 각각 필요한 설정을 추가해줘야 한다.


1. vm1에서 개발 환경 구축

먼저, vm1(192.168.2.10)에 개발 환경을 설정한다. 필요한 이미지를 다운받고, 이를 로컬 레지스트리에 푸시한다.

1.1. 도커 레지스트리 실행

vm1에서 도커 레지스트리를 실행한다. 이는 이미지를 저장하고 다른 VM들이 접근할 수 있게 하는 저장소 역할을 한다.

docker run -d -p 5000:5000 --name local-registry registry:2
  • 5000번 포트에서 로컬 레지스트리가 실행된다.

1.2. 필요한 이미지 다운로드

개발에 필요한 이미지들(예: Redis, MySQL, MongoDB)을 도커 허브에서 다운로드하여 사용한다.

docker pull redis
docker pull mysql
docker pull mongo

1.3. 이미지를 로컬 레지스트리에 푸시

다운받은 이미지를 vm1의 로컬 레지스트리로 푸시한다.

docker tag redis localhost:5000/redis-image
docker tag mysql localhost:5000/mysql-image
docker tag mongo localhost:5000/mongo-image

docker push localhost:5000/redis-image
docker push localhost:5000/mysql-image
docker push localhost:5000/mongo-image

2. vm2에서 이미지 풀 및 실행

이제, vm2(192.168.2.20)에서 vm1의 로컬 레지스트리로부터 이미지를 풀 받아 실행한다.

2.1. vm2에서 레지스트리로부터 이미지 풀

vm2에서 vm1의 로컬 레지스트리로부터 이미지를 풀(pull)한다.

docker pull 192.168.2.10:5000/redis-image
docker pull 192.168.2.10:5000/mysql-image
docker pull 192.168.2.10:5000/mongo-image

2.2. 이미지를 실행

풀 받은 이미지를 vm2에서 실행한다.

docker run -d --name redis-container -p 6379:6379 192.168.2.10:5000/redis-image
docker run -d --name mysql-container -p 3306:3306 192.168.2.10:5000/mysql-image
docker run -d --name mongo-container -p 27017:27017 192.168.2.10:5000/mongo-image

3. 문제 해결: vm2에서 vm1에 접속할 수 없는 경우

3.1. 방화벽 설정 (vm1)

vm2에서 vm1의 IP로 접근할 수 없는 경우, vm1에서 방화벽 설정을 확인하고, 포트 5000과 ICMP(ping)를 허용해야 한다.

sudo firewall-cmd --zone=public --add-port=5000/tcp --permanent
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.2.20" accept' --permanent
sudo firewall-cmd --reload

3.2. HTTP/HTTPS 설정 (vm2)

vm2에서 vm1의 로컬 레지스트리에 HTTP로 접근하려면, docker에서 insecure-registries 설정을 추가해야 한다. /etc/docker/daemon.json 파일을 수정하여 HTTP로 접근할 수 있게 한다.

{
  "insecure-registries" : ["192.168.2.10:5000"]
}

그 후, vm2에서 도커를 재시작한다.

sudo systemctl restart docker

4. 도커 허브 vs 로컬 레지스트리: 왜 로컬 레지스트리를 사용해야 하는가?

도커 허브를 사용하면 이미지를 쉽게 공유할 수 있지만, 로컬 레지스트리가 필요한 이유는 보안 때문이다.

  • 도커 허브: 공개된 이미지를 쉽게 공유하고 배포할 수 있지만, 민감한 데이터를 다룰 때 보안 위험이 있을 수 있다.
  • 로컬 레지스트리: 내부 네트워크에서만 이미지를 관리하고 공유할 수 있기 때문에 외부에 노출되지 않는다. 보안이 중요한 환경에서 로컬 레지스트리는 매우 유용하다.

0개의 댓글