개인 공부하는 관점에서 사용하는 것을 정리한 내용이기 때문에 실무랑 상관없는 내용입니다.
Docker network 소개
Docker를 설치하면 host의 network interface에 docker0이 추가된다. (리눅스는 ifconfig로 확인, 윈도우는 ipconfig로 확인)
docker0은 컨테이너와 통신하기 위한 가상 ethernet bridge이고 L2 통신 기반이라고 한다.
컨테이너를 만들면 컨테이너 내부에 eth0이란 이름으로 pair interface가 생성이 되고 host의 docker0에 vethX~ 이름의 bridge가 생성이 되어 연결된다.
우분투의 경우 brctl 명령어로 bridge를 확인할 수 있다.
brctl show docker0
또는 ip 명령어로도 확인할 수 있다.
ip link
도커의 network 확인은 다음과 같다.
docker network ls
도커는 여러 종류의 네트워크 드라이버를 제공하고 plugable 하며 버전이 올라가면서 점점 늘어나고 있다. (https://docs.docker.com/network/)
- bridge : 기본 네트워크 드라이버. 따로 지정하지 않으면 기본 설정됩니다. 대개 응용 프로그램이 통신해야하는 독립형 컨테이너에서 실행될 때 사용
- host : 독립 실행형 컨테이너의 경우 컨테이너와 Docker 호스트 간의 네트워크 격리를 제거하고 호스트의 네트워킹을 직접 사용
- overlay : 여러 Docker 데몬을 함께 연결하고 swarm 서비스가 서로 통신할 수 있게 함.또한 overlay 네트워크를 사용하여 swarm 서비스와 독립 실행형 컨테이너 간 또는 서로 다른 docker 데몬에 있는 두 개의 독립 실행형 컨테이너 간 통신을 용이하게 함.
- macvlan : Macvlan 네트워크를 사용하면 MAC 주소를 컨테이너에 할당하여 네트워크의 물리적 장치로 표시 할 수 있음. Docker 데몬은 트래픽을 컨테이너의 MAC 주소로 라우팅함.
- none : 모든 네트워킹을 해제. 일반적으로 사용자 정의 네트워크 드라이버와 함께 사용
- Network plugins : 타사 네트워크 플러그인을 설치하고 사용도 가능
어떤 네트워크 드라이버를 써야하는지에 대해서 다음과 같이 안내하고 있다. - 동일한 Docker 호스트에서 통신하기 위해 여러 컨테이너가 필요할 경우 사용자 정의 브리지 네트워크(User-defined bridge networks)가 가장 좋음
- host 네트워크는 DOcker 호스트에서 네트워크 스택을 격리하면 안되지만 컨테이너의 다른 측면을 격리하고자 할 때 가장 좋음
- overlay 네트워크는 서로 다른 Docker 호스트에서 실행되는 컨테이너가 통신할 필요가 있거나 여러 응용 프로그램이 swarm 서비스를 사용하여 함께 작동할 때 가장 좋음
- Macvlan 네트워크는 VM 설정에서 마이그레이션하거나 컨테이너가 고유한 MAC 주소를 가진 네트워크 상의 물리적 호스트처럼 보이도록 할 때 사용
- 타사 네트워크 플러그인을 사용하면 Docker를 특수 네트워크 스택과 통합할 수 있음
이 중 개인적으로 공부하면서 각 컨테이너간 연결을 하려는 경우 사용자 정의 브리지 네트워크를 사용하는 것이 좋다.
Docker network를 쓰는 이유는 docker container는 매번 실행될 때마다 변동되는 vip를 사용한다.
처음 설정한 vip가 다음 번 생성된 container를 호출한다는 보장이 없다.
여러 Docker container간 연결을 매번 새로 실행되더라도 유지하게 하려면 같은 네트워크에 묶어주어 서로의 container 이름만으로 호출할 수 있게 하는것이 좋다.
예전엔 --link 옵션을 제공하여 이런 부분에 대해 해결을 하려고 하였는데 link 옵션은 연결해야할 container를 일일이 지정해야 해서 연결할 container의 수가 많아질 수록 복잡도가 증가하는 단점이 있어 현재 쓰이지 않는다.
sonatype nexus container를 띄우고 jenkins에서 빌드한 결과를 업로드 한 후 sonarqube container에서 실행한다던가 또는 spring cloud netflix eureka server container를 띄우고 spring cloud config server, spring cloud amdin server, spring cloud neflix zuul container를 띄우면서 eureka server container에 등록한다던가 하는 식으로 여러 container를 띄우고 연결하기 위해 docker network를 사용하게 된다.
docker network 사용하기 (User-defined bridge networks 사용하기)
https://docs.docker.com/network/bridge/ 참고
네트워크 생성
docker network create bluesky-network
생성된 네트워크로 container를 실행 (nexus를 실행할 경우 예)
docker run -d -p 8081:8081 --name nexus --network bluesky-network sonatype/nexus3
기타 다른 이미지들도 위처럼 --network 옵션으로 해당 network를 지정하여 실행하면 된다.
각 실행된 container 내에서는 컨테이너이름과 port로 호출하면 된다.
위의 경우 http://nexus:8081 로 호출하면 호출이 된다.
'Study > Docker & Kubernetes' 카테고리의 다른 글
로컬 docker-desktop의 kubernetes (k8s)에 elasticsearch, kibana 설치해보기 (0) | 2022.10.08 |
---|---|
Window에서 Docker Desktop 없이 docker, kubernetes 사용하기 (Rancher Desktop 사용하기) (0) | 2021.12.01 |
kubernetes kubectl 명령어 모음 (0) | 2021.08.13 |
Dockerfile 명령어 (0) | 2021.07.02 |
개인 공부용 Docker Desktop kubernetes 설정 모음 (0) | 2021.06.02 |
Docker Desktop Community 2.3.0.2 이후 Windows 10 Home 지원 시작 (0) | 2020.05.17 |
window docker desktop 2.3.0.2에서 kubernetes volume mount가 되지 않는 현상 (0) | 2020.05.12 |
자주 쓰는 Docker 명령어 (0) | 2020.03.14 |
Docker compose 사용하기 (0) | 2019.08.01 |
Docker 에 설치한 Jenkins container 에서 java 11 과 Docker 사용하기 (0) | 2019.02.24 |