[Docker] 도커 네트워크의 이해를 위한 실습과 이어지는 내용
apt-get install -y docker.io
도커 네트워크를 확인하기 위해서는 우선 도커 설치가 필요하다.
위의 명령어로 도커를 설치한 다음 실행한다.
docker run -d --name test ubuntu sleep infinity
| 옵션/명령어 | 설명 |
|---|---|
| docker run | 새로운 컨테이너를 생성하고 실행 |
| -d | Detached 모드로 실행. 터미널에 붙어있지 않고 백그라운드에서 컨테이너를 실행 |
| --name test | 생성할 컨테이너의 이름을 test로 지정. 이름을 지정하지 않으면 Docker가 임의로 이름을 생성 |
| ubuntu | 사용할 Docker 이미지. 여기서는 ubuntu 이미지를 기반으로 컨테이너를 만듦 |
| sleep infinity | 컨테이너 안에서 실행할 명령어. sleep infinity는 무한정 대기 상태를 유지하기 때문에 컨테이너가 계속 실행됨 |
docker ps

현재 실행중인 도커 확인
docker exec -it test /bin/bash
| 옵션/명령어 | 설명 |
|---|---|
| docker exec | 실행 중인 컨테이너 안에서 새로운 명령어를 실행 |
| -i | interactive 모드로, 표준 입력을 계속 열어둠 |
| -t | pseudo-TTY(터미널)를 할당하여 터미널 환경을 제공 |
| test | 명령어를 실행할 대상 컨테이너의 이름. 위에서 생성한 test 컨테이너 |
| /bin/bash | 컨테이너 안에서 bash 쉘을 실행하여 터미널처럼 사용할 수 있도록 함 |
-it[option] : 터미널에서 명령을 할 수 있도록 대화형으로 실행하는 옵션
위의 방법대로 Linux server에서 아무 docker container를 실행시키고 ip를 확인해보면 아래와 같이 나온다.


앞선 네트워크 네임스페이스 실습에서는 각 네임스페이스(ns)마다 직접 브리지와 연결된 링크를 생성하고, 링크 상태를 up시키며, 라우팅 및 포트포워딩을 수동으로 설정해야 했다.
그러나 Docker는 이러한 네임스페이스와 브리지 연결, veth 페어 생성, 링크 활성화, 기본 라우팅, 그리고 NAT 및 포트포워딩까지 모든 과정을 자동으로 처리한다.
사용자는 docker run 명령어만으로 별도의 네트워크 설정 없이 손쉽게 컨테이너를 외부 네트워크와 연결할 수 있다.
| 수동 네임스페이스 실습 | Docker |
|---|---|
| ip netns add로 네임스페이스 직접 생성 | Docker가 컨테이너 실행 시 네임스페이스 자동 생성 |
| ip link add로 veth 페어 연결 | Docker가 컨테이너와 브리지를 veth로 자동 연결 |
| ip link set ... up으로 링크 상태 활성화 | Docker가 자동으로 인터페이스 활성화 |
| ip addr add로 IP 할당 및 라우팅 수동 설정 | Docker가 IP 할당 및 기본 라우팅 자동 설정 |
| iptables로 NAT 및 포트포워딩 수동 설정 | Docker가 기본 NAT 및 포트포워딩 자동 구성 |
docker network ls

기본은 bridge 타입으로 만들어진다.
docker network create my_network --driver [driver type]

다른 타입을 원할 경우 다음의 명령어로 지정할 수 있다.

이를 이용해 docker-compose.yml 내에서도 network 종류를 지정하고 어디에 연결할지도 설정할 수 있다.