ecs 다중 컨테이너 배포

wangjh789·2022년 8월 27일
0

docker

목록 보기
22/25

하나의 머신에서 다중 컨테이너를 docker-compose를 이용해 진행했다. 도커 컴포즈를 이용하면 컨테이너들이 하나의 도커네트워크 내에 속해 같은 네트워크 내의 통신이 편하다는 장점이 있었다.
하지만 ecs로 여러 머신에 컨테이너를 나눠 실행한다면 더 이상 컨테이너 이름이 IP로 변환되지 않는다. 컨테이너의 인스턴스들은 각각 클라우드 프로바이더에 의해 실행되고 관리된다.
aws에는 거대한 데이터 센터가 있는데 수만대의 머신과 서버를 관리하므로 항상 동일한 머신에서 실행될 가능성이 없다.(IP가 동일하다는 보장이 없다.)
하지만 동일한 태스크에 컨테이너를 추가하면 동일한 머신에서의 실행이 보장된다. 도커 네트워크를 형성해주진 않지만 localhost를 컨테이너 애플리케이션 코드 내부의 주소로 사용할 수 있게 해준다.
mongodb://${process.env.MONGODB_USERNAME}:${process.env.MONGODB_PASSWORD}@localhost:27017/course-goals?authSource=admin
ecs는 localhost주소를 통해 그 머신의 네트워크의 엑세스와 태스크 일부인 다른 컨테이너에 대한 액세스를 제공한다. (이렇게 하면 개발환경과 배포환경의 코드가 달라진다는 중대한 오류가 발생한다.그렇기에 환경변수로 환경을 동일하게 만든다.)
mongodb://${process.env.MONGODB_USERNAME}:${process.env.MONGODB_PASSWORD}@${process.env.MONGODB_URL}:27017/course-goals?authSource=admin

실제 주소를 가져오기 위해 환경 변수를 사용하고, 그 주소값은 이 컨테이너를 실행하는 환경에 따라 달라진다.
-> 컨테이너에 있는 내용이 고정되며, 모든 환경에서 동일하게 작동한다.

로컬과 리모트에서 MONGODB_URL 값은 다르게 변환지만 코드는 변하지 않는다.
실헹하려는 동일한 태스크에 다중 컨테이너를 추가할 때, 이들 컨테이너는 localhost키 하에서 서로 통신할 수 있다.
-> 모든 컨테이너가 동일한 호스트에 있는 로컬 시스템을 에뮬레이트 해준다.

profile
기록

0개의 댓글