본문 바로가기
DevOps

[Docker] 네트워크 사용법

by UnoCode 2020. 8. 26.

Docker 컨테이너는 독립된 환경에서 돌아간다는 사실을 다들 알고 계실겁니다.

독립적인 화경에는 기본적으로 다른 컨테이너와의 통신은 불가능하지만 여러 개의 컨테이너를 하나의 Docker 네트워크에

연결시키면 서로 통신이 가능합니다

 

How to Network search

Docker 네트워크의 기본은 내 컴퓨터에서 어떤 네트워크가 생성되어 있는지 아는 것입니다. ㅇㅈ 하시나요?

 

이를 docker network ls 커맨드를 사용하면 현재 생성되어 있는 Docker 네트워크 목록을 조회할 수 있습니다.

 

cicd-default는 실험적으로 만든것이므로 여러분은 없을 겁니다.

 

bridge, host, none은 Docker 데몬(daemon)이 실행되면서 디폴트로 생성되는 네트워크입니다. 대부분의 경우에는 이러한 디폴트 네트워크를 이용하는 것 보다는 사용자가 직접 네트워크를 생성해서 사용하는 것이 권장됩니다.

 

Kind of Network

Docker 네트워크는 bridge, host, overlay 등 목적에 따라 다양한 종류의 네트워크 드라이버(driver)를 지원하는데요.

  • bridge 네트워크는 하나의 호스트 컴퓨터 내에서 여러 컨테이너들이 서로 소통할 수 있도록 해줍니다.
  • host 네트워크는 컨터이너를 호스트 컴퓨터와 동일한 네트워크에서 컨테이너를 돌리기 위해서 사용됩니다.
  • overlay 네트워크는 여러 호스트에 분산되어 돌아가는 컨테이너들 간에 네트워킹을 위해서 사용됩니다.

기본적으로  컨테이너에는 eth0와 lo 네트워크가 있습니다.

 

이중 가장 많이 사용하는 bridge만 다루어 보겠습니다. 

Create Network

docker network create our-net

 

docker network ls 명령어를 통해 확인 결과 our-net이 추가된걸 볼 수 있습니다.

 

네트워크 옵션에 -d 옵션을 사용하지 않았기 떄문에 기본 값인 brige 네트워크로 생성된 것을 볼 수 있습니다.

 

Network detail information

추가한 네트워크의 상세 정보를 docker network inspect 커맨드로 확인하겠습니다

 

docker network inspect our-net

 

위 구문중 "Containers" 항목을 보면 이 네트워크에 아무 컨테이너도 아직 연결되지 않은 것을 볼 수 있습니다.

 

Network interlink to containers

먼저 컨테이너 하나를 one 이라는 이름으로 실행해 보도록 하겠습니다.

 

그전에 아무거나 이미지를 하나 만드시기 바랍니다.(구글링 하시면 이미지 만드는 방법 있습니다.)

 

docker run -itd --name one 192.168.0.61:5000/ubuntu

 

저는 ubuntu라는걸 실험적으로 만들었습니다.

 

bridge network 확인 

 

docker network inspect bridge

 

해당 "one" 컨테이너를 아까 생성한 our-net 네트워크에 연결 해보도록 하죠 ~~

 

docker network connect our-net one

 

다들 조회 하는 명령어 알고 계시죠??

 

docker network inspect our-net

 

정상적으로 연결된 것을 볼수 있습니다. 

 

Network에서 컨테이너 해제

docker network disconnect bridge one

실습을 조금더 하기위해 저는 연결을 해제 하지 않겠으나 혹시나 필요하신 분은 해지 하시기 바랍니다.

 

Second Network Connect

네트워크에 홀로 있는 컨테이너는 큰 의미가 없을 것입니다. 하나의 컨테이너를 더 our-net 네트워크에 연결해보도록 하겠습니다.

이번에는 --network 옵션을 사용해서 컨테이너를 실행하면서 바로 연결할 네트워크를 지정해주도록 하겠습니다.

 

docker run -itd --name two --network our-net 192.168.0.61:5000/ubuntu

 

이미지를 다른걸 하면 좋으나 귀찮은 관계로 같은 이미지로 컨테이너를 2개 만들어서 서로 네트워크를 연결하겠습니다.

 

docker network inspect our-net

our-net 네트워크의 상세 정보를 확인해보면 two 컨테이너에 IP가 할당되어 연결되어 있는 것을 확인할 수 있습니다.

 

컨테이너 간의 네트워크 소통

docker exec jenkins ping gitlab

 

해당 내용은 개인 프로젝트인 docker registry와 gitlab을 연결 해놓은 자료 입니다, 오해하지 말아 주세요

Network Remove

$ docker stop one two

$ docker network rm our-net

 

해당 명령어로 제거 하시면 됩니다. 

 

How to Network Clean

 

$ docker network prune

 

호스트 네트워크 

네트워크를 호스트로 설정하면 호스트의 네트워크 환경을 그대로 사용할 수 있습니다.

(windows를 사용하면 windows의 네트워크를 그대로 사용할 수 있다는 의미입니다.)

 

또한 컨테이너의 네트워크를 호스트 모드로 설정하면 컨테이너 내부의 어플리케이션을 별도의 포트 포워딩 없이 바로 서비스 할 수 있습니다.

 

 

None 네트워크

 

none은 말 그대로 네트워크를 사용하지 않는 것을 의미합니다. none 네트워크로 설정을 하면 네트워크 인터페이스는 lo 인터페이스만 나타납니다. 이렇게 설정된 컨테이너는 외부와 단절 됩니다.

 

root@a64390b51af9:/# ifconfig
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

'DevOps' 카테고리의 다른 글

[Docker] Docker-Compose  (0) 2020.08.27
[Docker] 기본 명령어  (0) 2020.08.25
[Docker] 기본 개념  (0) 2020.08.22

댓글