Docker Network를 설명하는 글이다.
Window에서 Ubuntu를 사용한다.
Docker Network란 도커 컨테이너끼리 통신할 수 있게 해주는 가상 네트워크다. 컨테이너는 각각 독립된 공간에서 돌아가지만 여러 컨테이너가 서로 통신해야 되는 경우가 생길 수 있다. 이 경우 도커 네트워크를 통해 연결해주면 된다. 컨테이너끼리 서로를 이름으로 인식하고 통신할 수 있게 된다. 도커 네트워크를 설정할 수 있는 방법은 6가지가 있다. Bridge, None, Host, IPvlan, Macvlan, Overlay가 있다.
sudo docker network ls
설치되어 있는 도커 네트워크를 보여준다. bridge, host, none이 기본적으로 설치되어 있다.
ip addr
네트워크 인터페이스를 확인할 수 있다. docker0의 inet 172.17.0.1/16를 보자. 기본적으로 설치되어 있는 가상의 네트워크이다. 해당 대역에서 컨테이너의 네트워크가 할당된다. 여러 개의 컨테이너가 172.17.0.1의 가상 스위치에 연결되어 있는 것이다.
이제 도커 네트워크에 대해 알아보자. 첫 번째 Bridge이다. bridge는 기본 네트워크로 컨테이너끼리만 통신이 가능한 네트워크이다.
sudo docker network create --driver bridge 이름
브릿지 네트워크를 생성한다. sudo docker network ls를 치면 우리가 만든 브릿지 네트워크가 보일 것이다. ip addr을 치면 우리가 만든 네트워크의 대역을 볼 수 있다. 해당 네트워크 대역을 보면 기본적으로 제공되는 docker0과 다른 아이피를 가지고 있다는 것을 볼 수 있다. 즉, docker0 네트워크를 사용해서 만든 컨테이너와 우리가 지금 만든 브릿지 네트워크를 사용해서 만든 컨테이너가 서로 통신할 수 없다는 뜻이다.
우리가 만든 브릿지 네트워크를 통해서 컨테이너를 만들어보자.
sudo docker run -it --name 이름 --network 방금만든네트워크이름 ubuntu
--network를 통해 명시해주지 않으면 기본 네트워크인 docker0를 사용하게 된다.
두 번째 host 네트워크이다. 컨테이너가 호스트(본인 컴퓨터)와 네트워크를 공유한다.
sudo docker run -it --name 이름 --network host ubuntu
기본적으로 제공하는 host 네트워크를 사용하는 컨테이너를 생성한다. 이렇게 생성하게 되면 컨테이너와 호스트의 네트워크 환경이 완전히 똑같게 된다. 그렇기 때문에 컨테이너를 하나만 올릴 때 사용한다.
세 번째 overlay 네트워크이다. 물리적인 네트워크에 논리적인 네트워크를 구성하는 것이다. 여러 도커 호스트에 걸쳐 있는 컨테이너끼리 서로 통신할 수 있게 해주는 네트워크이다. 즉, 하나의 컴퓨터 안에서가 아니라 서버 A와 서버 B에 잇는 컨테이너끼리도 통신이 가능하도록 만들어주는 가상 네트워크인 것이다. 예를 들어 서버 A에서 a 컨테이너를 만들고 서버 B에서 b 컨테이너를 만들었다고 하자. 만약 둘 다 overlay 네트워크에 연결되어 있으면 a 컨테이너에서 b 컨테이너로 직접 접속이 가능해진다.
이를 위해서는 두 개의 서버가 필요하다. EC2를 열거나 하면 된다. A, B가 있다고 하자.
A에서 해당 명령어를 수행한다.
docker swarm init
도커의 swarm 모드 (클러스터 모드)를 초기화한다. 도커 swarm이란 도커 컨테이너를 여러 서버에서 하나의 클러스터처럼 관리할 수 있게 해주는 기능이다. 즉, 여러 대의 서버를 묶어서 하나의 큰 도커 시스템처럼 만들 수 있다.
이를 치면 docker swam join ~~ 이렇게 나오게 된다. 해당 명령어를 복사하여 B에 넣어 실행시키자.
sudo docker network create -d overlay --attachable 이름
A에서 오버레이 네트워크를 생성한다.
sudo docker run -it --name 이름 --network 오버레이네트워크이름 ubuntu
아까 만든 오버레이 네트워크를 사용하는 컨테이너를 만든다. A와 B에 컨테이너 이름만 다르게 해서 모두 만들어주자.
이렇게 되면 같은 overlay 네트워크를 사용하고 있으므로 서로의 컨테이너에 접속할 수 있게 된다.
'공부 > Linux' 카테고리의 다른 글
[Linux] 3. Docker Volume (0) | 2025.04.15 |
---|---|
[Linux] 2. Docker 컨테이너에 Apache 서버를 설치하기 (0) | 2025.04.15 |
[Linux] 1. Docker 기본 명령어 (0) | 2025.04.15 |
[Linux] 셸 스크립트 작성하기 (1) | 2025.03.30 |
[Linux] 리눅스 환경에서 c 파일 컴파일 후 실행하기 (0) | 2025.03.29 |