공부/기타

도커 컨테이너의 아이피 고정(docker network) 1부

민수 2023. 4. 4. 21:42

1부 - 도커 네트워크 생성

 

개발한 딥러닝 모델을 남들이 잘 쓸 수 있도록 배포하는 것은 모델을 만드는 과정만큼 까다롭다.   

 

딥러닝 모델은 무겁고, 연산량이 많기 때문에 모델을 많은 사람이 동시에 사용하는 환경에서는 여러 장비로 분산 처리 하는 것이 좋다.  

 

우리는 GPU가 4장씩 내장된 서버 2개를 제공받았고, 딥러닝 추론을 하는 8개의 도커 컨테이너, 요청 분산을 위한 NGINX컨테이너 2개를 만들어서 요청을 처리했다.  

 

NGINX는 웹 서버 프로그램으로 백엔드 서버로 들어오는 요청을 총 8개 컨테이너에 골고루 분산시켜 주는 역할을 한다. 

그런데 가끔 서버를 리부팅 한 후에 백엔드서버 - NGINX - 딥러닝추론 컨테이너의 통신이 종종 먹통이 되는 사례가 발생했다.  

 

원인을 분석해보니 각 도커 컨테이너의 IP가 바뀌었던 것이다. 10개의 컨테이너 아이피가 하나하나 확인하고, 수작업으로 바뀐 아이피를 여간 번거로운 일이 아니었다.  

 

따라서 이 문제를 해결하기 위해 도커 컨테이너의 IP를 바뀌지 않도록 고정해 주는 작업이 필요했다.  

 

구글링 해 본 결과 컨테이너 생성시 IP를 고정해줘야 한다는데 아무 설정 없이 IP를 고정하는 것은 실패했고 별도의 네트워크를 생성해서 해당 네트워크와 원하는 IP를 함께 매핑해서 컨테이너를 생성함으로써 성공했다.  

 

아래와 같은 명령어를 이용해서 도커 네트워크를 생성하는데 명령어 및 설명은 다음과 같다. 

 

docker network create --gateway 172.19.0.1 --subnet 172.19.0.0/21 customnet 

docker network create : 도커 네트워크 생성 명령어

--gateway : gateway 주소 지정 

-- subnet : 아이피의 규칙을 명시하는 부분이다. 

customnet : 네트워크 이름. 아무거나 하고싶은걸로 바꿔도 된다. 

 

우선 위 명령어가 에러가 안나려면 ip에 아무 숫자나 집어넣으면 안 되고, 그 규칙을 이해해야 한다.  

우선 subnet 부분에서 정의한 규칙을 gateway 주소가 준수해야하고, 향후 도커 컨테이너에 지정해 줄 ip도 그 규칙을 반드시 준수해야 에러가 안 생긴다.

 

위 예시에서는 172.19.0.0/21 이라고 되어있는데 이는 CIDR 표기법이라고 부르고 이진법과 관련이 있다. 

CIDR 표기법을 이해하기 전에 IP주소의 규칙을 먼저 살펴보자. 

IP는 a.b.c.d 의 형식을 가지고 있는데 각 알파벳은 0부터 255까지의 범위를 가진다. 예를 들어 0.0.0.0 ~ 255.255.255.255     

아이피 마지막에 있는 /21의 의미가 여기에서 나온다.

0부터 255까지의 숫자는 이진법 표기로 8자리면 충분히 표현가능하다. 따라서 아이피의 4개 숫자는 총 32개의 이진법으로 표기가 가능하다. 21의 의미는 21번째부터 사용하라는 뜻이다. 

 

좀 더 자세히 설명하면 다음과 같다. 172.19.0.0는 이진법으로 그대로 표현하면 10101100.00010011.00000000.00000000 이다. 여기서 21번째부터 사용하라고 하면 사용가능한 범위는 다음과 같다. 

10101100.00010011.00000xxx.xxxxxxxx 

 

21번째부터 끝까지 전부 x표시를 해놨는데, 이부분을 자유롭게 사용할 수 있다는 뜻으로 

10101100.00010011.00000000.00000000
~

10101100.00010011.00000111.11111111 까지 사용이 가능하고 이는 다시 십진법으로 변환하면 

172.19.0.0 ~ 172.19.7.255 이다. (255 미만으로 172.19.7.254까지임) 

이 범위에는 약 2048개의 아이피가 존재한다.  

 

자신이 제대로 이해했는지 확인하려면 https://ko.rakko.tools/tools/27/ 여기서 테스트해보면 된다.   

 

이렇게 서브넷 주소를 형성하고, 그 주소 안에 포함되는 ip로 게이트웨이 주소를 지정하면 도커 네트워크가 생성된다.