
여러 개발자가 동일한 개발 환경을 구축하고 공유하려면, 각자 필요한 서비스를 쉽게 가져와서 사용할 수 있어야 한다. 예를 들어, Redis, MySQL, MongoDB와 같은 데이터베이스는 개발 시 필수적인 서비스이다. 도커를 사용하면 이 환경을 컨테이너로 쉽게 만들고 공유할 수 있다.
vm2에서 vm1의 로컬 레지스트리로 접근할 수 없는 경우가 있을 수 있다. 이 경우, vm1과 vm2에서 각각 필요한 설정을 추가해줘야 한다.
먼저, vm1(192.168.2.10)에 개발 환경을 설정한다. 필요한 이미지를 다운받고, 이를 로컬 레지스트리에 푸시한다.
vm1에서 도커 레지스트리를 실행한다. 이는 이미지를 저장하고 다른 VM들이 접근할 수 있게 하는 저장소 역할을 한다.
docker run -d -p 5000:5000 --name local-registry registry:2
5000번 포트에서 로컬 레지스트리가 실행된다.개발에 필요한 이미지들(예: Redis, MySQL, MongoDB)을 도커 허브에서 다운로드하여 사용한다.
docker pull redis
docker pull mysql
docker pull mongo
다운받은 이미지를 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
이제, vm2(192.168.2.20)에서 vm1의 로컬 레지스트리로부터 이미지를 풀 받아 실행한다.
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
풀 받은 이미지를 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
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
vm2에서 vm1의 로컬 레지스트리에 HTTP로 접근하려면, docker에서 insecure-registries 설정을 추가해야 한다. /etc/docker/daemon.json 파일을 수정하여 HTTP로 접근할 수 있게 한다.
{
"insecure-registries" : ["192.168.2.10:5000"]
}
그 후, vm2에서 도커를 재시작한다.
sudo systemctl restart docker
도커 허브를 사용하면 이미지를 쉽게 공유할 수 있지만, 로컬 레지스트리가 필요한 이유는 보안 때문이다.