728x90
1. Docker Network
1-2. Docker Network - 네트워크 유형 7가지
컨테이너를 위한 추가 네트워크를 만들 때 선택하는 드라이버(-d) 종류다.
| 1. Bridge | -d bridge | 기본값, 172.17.x IP 자동 | 일반 단일 호스트 |
| 2. Host-Only | -d null | 네트워크 없음(none) | 격리/보안 |
| 3. Container 공유 | -d container:이름 | IP·MAC 공유 | 컨테이너 짝 통신 |
| 4. Host 공유 | -d host | 호스트 네트워크 직접 사용 | 성능 극대화 |
| 5. Macvlan | -d macvlan | 물리망과 연동 | 컨테이너에 실제 IP |
| 6. Overlay | -d overlay | 여러 호스트 연결 | Swarm 클러스터 |
| 7. 3rd party | weave/flannel 등 | 외부 솔루션 | 대규모 K8s |
1. Bridge (기본, 가장 많이 씀)
컨테이너 --172.17.x.x--> docker0 브리지 --> 외부
오늘 계속 쓴 그 네트워크 (컨테이너 IP가 172.17.0.x였던 것)
- 같은 브리지 컨테이너끼리 통신 가능
- 외부 접속은 -p 포트 매핑 필요 (오늘 계속 한 것)
2. Host-Only (-d null)
= none 네트워크. 컨테이너에 네트워크 인터페이스 없음
→ 완전 격리 (외부와 아무 통신 안 함)
- 보안이 극도로 중요하거나, 네트워크 필요 없는 작업용
3. Container 공유 (-d container:이름)
컨테이너 B가 컨테이너 A의 네트워크를 그대로 씀
→ IP와 MAC 주소를 공유 (같은 네트워크 이름공간)
→ localhost로 서로 통신
- 사이드카 패턴(로그 수집기 등)에서 사용
4. Host 공유 (-d host)
컨테이너가 호스트 네트워크를 직접 사용
→ 포트 매핑(-p) 불필요, 호스트 포트 그대로 씀
→ 네트워크 격리 없음 (가장 빠름)
- 성능이 중요하고 격리가 덜 중요할 때
5. Macvlan (-d macvlan)
컨테이너가 물리 네트워크에서 진짜 IP를 받음
→ 물리망의 다른 장비들이 컨테이너를 실제 기기처럼 인식
- 컨테이너를 물리 네트워크에 직접 노출할 때
6. Overlay (-d overlay)
여러 Docker 호스트를 하나의 네트워크로 묶음
→ 호스트 A의 컨테이너 ↔ 호스트 B의 컨테이너 통신
→ Docker Swarm 클러스터 모드에서 사용
- 여러 서버에 컨테이너를 분산할 때 (앞의 클라우드 네이티브, MSA와 연결)
7. Third-party (weave/flannel/openswitch)
Docker 기본 대신 외부 네트워크 솔루션 사용
→ Kubernetes에서 flannel/calico 등 많이 씀
- 대규모 컨테이너 오케스트레이션 환경
1-2. 네트워크 추가하고 사용하기
네트워크 유형으로 실제 네트워크를 만들고 컨테이너에 연결하는 명령이다.
네트워크 만들기
docker network create -d [TYPE] \
--subnet=172.31.0.0/16 \
--ip-range=172.31.0.0/24 \
--gateway=172.31.0.1 \
net_name
| -d [TYPE] | 드라이버 유형 (bridge 등) | -d bridge |
| --subnet | 전체 IP 대역 | 172.31.0.0/16 (6만여 개) |
| --ip-range | 실제 할당할 범위 | 172.31.0.0/24 (254개) |
| --gateway | 게이트웨이 IP | 172.31.0.1 |
| net_name | 네트워크 이름 | 원하는 이름 |
subnet vs ip-range 차이
--subnet 172.31.0.0/16 → 전체 주소 공간 (172.31.0.0 ~ 172.31.255.255)
--ip-range 172.31.0.0/24 → 그중 실제 나눠줄 범위 (172.31.0.0 ~ 172.31.0.255)
큰 땅(subnet)을 정하고, 그중 일부(ip-range)만 컨테이너에 실제 배정
→ subnet은 이 네트워크가 쓸 전체 대역, ip-range는 그중 컨테이너에 실제로 줄 부분 이다.
ip-range를 좁히면 나머지는 예약해두고 특정 범위만 자동 할당하게 된다.
gateway란
--gateway=172.31.0.1
↑
이 네트워크에서 외부로 나가는 출입구 IP
(컨테이너들이 밖으로 나갈 때 거치는 문)
네트워크 사용하기
docker run -d --net net_name image
↑
만든 네트워크에 컨테이너 연결
--net(=--network) 옵션으로 컨테이너를 특정 네트워크에 붙임
→ 안 쓰면 기본 bridge에 연결됨 (172.17.x)
→ 쓰면 내가 만든 net_name(172.31.x)에 연결됨
기본 bridge: 컨테이너끼리 IP로만 통신 (이름 못 씀)
커스텀 net : 컨테이너 이름으로 통신 가능 (DNS 자동 제공)
docker network create -d bridge mynet
docker run -d --net mynet --name web nginx
docker run -d --net mynet --name db mysql
# web에서 "db"라는 이름으로 바로 접속 가능 (IP 불필요)
전체 흐름
# 1. 네트워크 생성
docker network create -d bridge --subnet=172.31.0.0/16 mynet
# 2. 확인
docker network ls
docker network inspect mynet
# 3. 컨테이너를 그 네트워크에 연결
docker run -d --net mynet --name web nginx
# 4. 확인 (컨테이너가 172.31.x IP 받았나)
docker inspect web | grep IPAddress
실습 정리


d run --net=net3 --rm --link web:nginx alpine ping -c2 nginx
↑ ↑ ↑ ↑ ↑
net3에서 자동삭제 별칭연결 alpine nginx라는 이름으로 ping
| --net=net3 | net3 네트워크에서 실행 |
| --rm | 끝나면 컨테이너 자동 삭제 |
| --link web:nginx | web 컨테이너를 "nginx"라는 별칭으로 연결 |
| alpine ping -c2 nginx | alpine으로 nginx에 ping 2번 |

d run --net=container:web -it alpine
↑
web 컨테이너의 네트워크를 "공유"
2. Docker Compose
여러 컨테이너를 YAML 파일 하나로 묶어서 관리하는 도구다. 지금까지 docker run을 옵션 잔뜩 붙여 하나씩 실행했는데, Compose는 그걸 파일에 적어두고 한 번에 띄운다.
| 여러 컨테이너를 한 Project로 | 관련 컨테이너를 묶어 통합 관리 |
| run 옵션을 파일로 정의 | network, volume, 의존성을 YAML에 명시 |
| Scale out 지원 | 컨테이너를 여러 개로 복제 (수평 확장) |
| Service Discovery | 컨테이너끼리 이름으로 자동 발견 |
| YAML 스크립팅 | 인프라를 코드로 자동 구성 (IaC) |
| Docker 플러그인 내장 | 별도 설치 없이 docker compose로 사용 |
지금까지 (docker run):
docker run -d --net=net3 --name web nginx
docker run -d --net=net3 --name db mysql
docker run -d --net=net3 --name cache redis
...컨테이너마다 긴 명령 반복, 순서 신경, 옵션 외우기
Compose (docker-compose.yml 하나):
파일에 다 적어두고 → docker compose up 한 방
docker-compose.yml 예시
version: "3"
services:
web:
image: nginx
ports:
- "80:80" # -p 80:80
networks:
- net3
volumes:
- /share:/usr/share/nginx/html # -v
db:
image: mysql
networks:
- net3
depends_on:
- web # web 먼저 뜬 후 db (의존성)
networks:
net3: # 커스텀 네트워크도 자동 생성
Service Discovery (오늘 배운 그것)
Compose가 서비스 이름으로 자동 통신 지원
→ web 컨테이너에서 "db"라는 이름으로 바로 접속
→ 앞에서 커스텀 네트워크로 이름 통신했던 것과 같은 원리
Scale out (수평 확장)
docker compose up --scale web=3
→ web 컨테이너를 3개로 복제 (부하 분산)
IaC (인프라를 코드로)
YAML 파일 = 인프라 설계도
→ 파일만 있으면 어디서든 동일한 환경 재현
→ 클라우드 네이티브의 IaC 개념 (Ansible/Terraform과 같은 맥락)
기본 명령어
docker compose up -d # 파일대로 전체 실행 (백그라운드)
docker compose down # 전체 정지 + 삭제
docker compose ps # 상태 확인
docker compose logs # 로그 확인
docker compose up --scale web=3 # 특정 서비스 복제
실습
mkdir wp;cd wp
vi docker-compose.yaml
services:
wordpress:
image: wordpress
restart: always
ports:
- 8080:80
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: exampleuser
WORDPRESS_DB_PASSWORD: examplepass
WORDPRESS_DB_NAME: exampledb
db:
image: mysql:5.7
restart: always
environment:
MYSQL_DATABASE: exampledb
MYSQL_USER: exampleuser
MYSQL_PASSWORD: examplepass
MYSQL_RANDOM_ROOT_PASSWORD: '1'






728x90
'{Bootcamp} > KT Cloud Tech up 클라우드 인프라' 카테고리의 다른 글
| [kt cloud] 쿠버네티스 실습 (2) (0) | 2026.09.18 |
|---|---|
| [kt cloud] 쿠버네티스 실습 (1) (0) | 2026.09.17 |
| [kt cloud] 도커 실습 (2) (0) | 2026.09.16 |
| [kt cloud] 도커 실습 (1) (0) | 2026.09.15 |
| [kt cloud] 리눅스 관리자 실습 (6) (0) | 2026.09.11 |