docker network
docker network를 통해서 container끼리 통신하게 만들 수 있다!!
flask서버는 host에서 db는 컨테이너에서 실행시킨다고 가정해보자.
기본적으로 컨테이너를 생성하면 docker는 bridge라는 기본 네트워크로 설정이 된다.
하지만 이 네트워크는 독립적이라서 다른 기본 bridge네트워크와는 통신을 할 수 없다.
db는 27017:27017로 이어두었다.
따라서 flask에서 db에 접속을 하기 위해선 MongoClient('localhost', 27017)이라고 적어두면
host의 27017포트를 따라들어가고 mongo db 컨테이너의 27017포트로 연결이 되는 로직이다.
이번엔 flask서버도 컨테이너로 만들어보자 이 경우에 코드를 변경하지 않으면 어떻게 될까?
이 경우 ws에서 localhost는 ws를 의미한다. 따라서 27017포트에는 아무것도 존재하지 않으므로 연결이 되지 않는 상태이다. 따라서 컨테이너에 넣은 경우 하나의 네트워크로 묶어주어야 한다.
이 경우 test라는 network로 2개의 컨테이너를 묶고 flask안에서 MongoClient('mongo' < network alias , 27017) 이렇게 적어주면 같은 네트워크 안에서 alias로 적어둔 녀석을 찾아간다. 따라서 db를 만들 때 꼭 network alias를 적어주어야 한다.
같은 네트워크 안의 27107포트로 연결이 되어 접근이 가능해지는 것이다. 따라서 db 컨테이너를 생성할 때
굳이 27017:27017로 열어주지 않아도 실행은 가능하다!!
1. docker network 생성하기
docker network create test
# 기본적으로 bridge driver로 생성이 됨,
# 같은 브릿지 안의 컨테이너들 끼리만 통신이 가능
2. docker network 연결해서 container 실행하기
docker run -d -p 24017:24017 --network test -- network-alias mongo --name mongo_db mongo
docker run -d -p 80:5000 --network test --name ws memo:v1
# 같은 네트워크로 묶음
mongoclient와 연결할 때 mongo라고 적은 부분 --network-alias mongo < 이 거와 똑같이 적어야함
--network-alias abcd라고 적었으면 저 부분도 abcd라고 적어주어야함