2026. 6. 12. 18:13ㆍDocker
Ⅰ. Docker 컨테이너 네트워크 관리 & Docker 네트워크 관리
● Docker 컨테이너 네트워크 관리
| Docker 컨테이너 네트워크 관리 |
구분 | 설명 | 관련 요소 | |
| 개념 | 컨테이너가 서로 통신하거나 외부 네트워크 (호스트와 인터넷)와 연결될 수 있도록 하는 관리 방식 |
컨테이너 | ||
| 가상 NIC (veth) | ||||
| Bridge | ||||
| 역할 | 컨테이너 내부의 애플리케이션이 다른 컨테이너 또는 외부와 데이터를 송수신할 수 있게 함 |
HTTP 서버 | ||
| DB | ||||
| API 간 통신 | ||||
| 기본 연결 구조 | 각 컨테이너는 고유한 IP를 가지며, docker0 브리지 (기본 네트워크)와 가상 NIC를 통해 연결됨 |
eth0 (컨테이너 내부 인터페이스) |
||
| 통신 방식 | 동일 네트워크의 컨테이너끼리는 이름 기반 (DNS) 통신 가능 | ex) curl http://app:8080 | ||
| 외부로는 포트 포워딩을 통해 통신 | ||||
| 포트 매핑 관리 | 호스트와 컨테이너 간 특정 포트 연결 설정 (-p 호스트 : 컨테이너) |
ex) 8080 : 80 | ||
| 보안 관리 | 컨테이너별 네트워크 격리와 외부 접근 차단 및 내부만 통신 가능 |
기본 bridge는 외부 접근 불가 | ||
| 특징 | 실행 시 자동 네트워크 연결 | |||
| 다중 네트워크 참여 가능 | ||||
| 컨테이너 삭제 시 자동 해제 | ||||
| 장점 | 서비스 간 의존 관계를 최소화하고 독립 실행 가능 | Microservice 구조에 적합 | ||
| 한계 | 다중 호스트 (서버 간) 통신은 기본 브리지로 불가 | Swarm / Overlay 필요 | ||
● Docker 네트워크 관리
| Docker 네트워크 관리 |
구분 | 설명 | 관련 구성요소 |
| 개념 | Docker 엔진이 컨테이너 통신을 위해 자동으로 생성 및 관리하는 가상 네트워크 인프라 구조 |
docker 0 | |
| bridge | |||
| overlay | |||
| macvlan | |||
| 관리 단위 | 개별 컨테이너가 아닌 네트워크 자체 (그 위에 컨테이너 연결) |
여러 컨테이너 공유 가능 | |
| 기본 네트워크 | 설치 시 자동 생성되는 bridge, host, none | docker network ls로 확인 가능 | |
| 주요 드라이버 | 드라이버 | 설명 | |
| bridge | 단일 호스트 내부 통신 | ||
| host | 호스트와 네트워크 공유 | ||
| none | 네트워크 없음 | ||
| overlay | 다중 호스트 간 통신 | ||
| macvlan | 실제 네트워크 카드와 직접 연결 | ||
| 구성 요소 | 가상 스위치 (bridge) | ||
| veth pair (컨테이너 가상 인터페이스) | |||
| iptables / NAT (외부 통신) | |||
| 관리 방식 | 사용자는 네트워크를 직접 생성 및 삭제하며 컨테이너 연결 | ex) docker network create mynet | |
| 역할 | 컨테이너 간 통신 구조 설계 | ||
| IP / 서브넷 자동 할당 | |||
| NAT 설정 관리 | |||
| 보안 기능 | 각 네트워크는 독립된 IP 서브넷 가짐 (상호 격리) | 네트워크 간 트래픽 차단 | |
| 확장성 | Overlay 네트워크 통해 여러 호스트 간 컨테이너 연결 가능 | Swarm, Kubernetes CNI 기반 | |
| 장점 | 컨테이너 간 통신 구조를 체계적으로 설계 가능 | 복잡한 서비스 네트워크 구성 용이 | |
| 한계 | 네트워크 드라이버별 설정이 다르고, Overlay는 성능 부담 존재 |
성능 / 보안 트레이드오프 | |

# web1 컨테이너 생성 및 실행
docker container run --name web1 nginx 명령을 통해 Nginx 이미지 사용하여 web1 컨테이너 생성 및 실행
-d 옵션을 통해 web1 컨테이너를 백그라운드로 구동
-v /www1:/usr/share/nginx/html 옵션을 통해 /www1 디렉터리와 /usr/share/nginx/html 디렉터리 볼륨 mount
-p 8081:80 옵션을 통해 호스트의 8081번 포트와 컨테이너의 80번 포트 매핑
# web2 컨테이너 생성 및 실행
docker container run --name web2 nginx 명령을 통해 Nginx 이미지 사용하여 web2 컨테이너 생성 및 실행
-d 옵션을 통해 web1 컨테이너를 백그라운드로 구동
-v /www2:/usr/share/nginx/html 옵션을 통해 /www2 디렉터리와 /usr/share/nginx/html 디렉터리 볼륨 mount
-p 8082:80 옵션을 통해 호스트의 8082번 포트와 컨테이너의 80번 포트 매핑
# web3 컨테이너 생성 및 실행
docker container run --name web3 nginx 명령을 통해 Nginx 이미지 사용하여 web3 컨테이너 생성 및 실행
-d 옵션을 통해 web1 컨테이너를 백그라운드로 구동
-v /www3:/usr/share/nginx/html 옵션을 통해 /www3 디렉터리와 /usr/share/nginx/html 디렉터리 볼륨 mount
-p 8083:80 옵션을 통해 호스트의 8083번 포트와 컨테이너의 80번 포트 매핑
docker container ls -a 명령을 통해 컨테이너가 잘 생성되었는지 확인

netstat -ntlp 명령을 통해 현재 서버에서 열려있는 네트워크 포트와 그 상태 확인
echo 명령을 통해 작은 HTML 코드를 해당 파일에 작성하여 저장
ls /www1 /www2 /www3 명령을 통해 /www1, /www2, /www3 디렉터리 내에 있는 파일 목록 확인

# testos 컨테이너 생성 및 실행
docker container run --name testos centos:8 명령을 통해
CentOS:8 이미지 사용하여 testos 컨테이너 생성 및 실행
--rm 옵션을 통해 실행이 종료되면 컨테이너가 자동으로 삭제되도록 설정
-it /bin/bash 옵션을 통해 testos 컨테이너 내부에 직접 접속할 수 있는 bash 쉘 실행
ip address 명령을 통해 현재 컨테이너 내 네트워크 인터페이스들의 주소와 상태 정보 확인
ip route 명령을 통해 현재 컨테이너 내 네트워크 라우팅 테이블 확인

cat /etc/resolv.conf 명령을 통해 /etc/resolv.conf 파일의 내용 확인
=> docker 1의 resolv.conf 파일을 동일하게 사용한다는 것 확인

cat /etc/hosts 명령을 통해 /etc/hosts 파일의 내용 확인

# test 컨테이너 생성 및 실행
docker container run --name test centos:8 명령을 통해 CentOS:8 이미지 사용하여 test 컨테이너 생성 및 실행
-it 옵션을 통해 test 컨테이너 내부에 직접 접속할 수 있는 쉘 실행하도록 설정
--dns 8.8.8.8 옵션을 통해 컨테이너가 사용할 DNS 서버를 8.8.8.8로 지정
--mac-address="00:00:00:11:11:11" 옵션을 통해
컨테이너의 네트워크 인터페이스에 할당할 MAC 주소를 00:00:00:11:11:11로 지정
--add-host docker1:192.168.2.10 옵션을 통해
컨테이너 내 /etc/hosts 파일에 docker1이라는 호스트 이름과 IP 주소 192.168.2.10 추가
--hostname webserver 옵션을 통해 컨테이너 호스트 이름을 webserver로 설정
ip address 옵션을 통해 컨테이너 내 인터페이스들의 IP 주소와 상태 확인
cat /etc/resolv.conf 옵션을 통해 컨테이너 내 DNS 설정 파일 내용 확인
cat /etc/hosts 옵션을 통해 컨테이너 내 호스트 이름과 IP 매핑 정보 확인

docker container ls -a 명령을 통해 생성된 컨테이너 목록 확인
# test 컨테이너 삭제
docker container rm -f db 명령을 통해 test 컨테이너 삭제
docker container ls -a 명령을 통해 컨테이너가 잘 삭제되었는지 확인

ip address show docker0 명령을 통해 도커가 생성하는
기본 브리지 네트워크 인터페이스의 docker 0의 네트워크 상태 확인

# myweb1 컨테이너 생성 및 실행
docker container run --name myweb1 centos:8 명령을 통해
CentOS:8 이미지 사용하여 myweb1 컨테이너 생성 및 실행
-it 옵션을 통해 myweb1 컨테이너 내부에 직접 접속할 수 있는 쉘 실행하도록 설정
-d 옵션을 통해 myweb1 컨테이너를 백그라운드로 구동
-p 8001:80 옵션을 통해 호스트의 8001번 포트와 컨테이너의 80번 포트 매핑
# myweb2 컨테이너 생성 및 실행
docker container run --name myweb2 centos:8 명령을 통해
CentOS:8 이미지 사용하여 myweb2 컨테이너 생성 및 실행
-it 옵션을 통해 myweb2 컨테이너 내부에 직접 접속할 수 있는 쉘 실행하도록 설정
-d 옵션을 통해 myweb2 컨테이너를 백그라운드로 구동
-p 8002:80 옵션을 통해 호스트의 8002번 포트와 컨테이너의 80번 포트 매핑
docker container ls -a 명령을 통해 컨테이너가 잘 생성되었는지 확인

# myweb1 컨테이너 내부 동작
docker container exec myweb1 명령을 통해 myweb1 컨테이너 내부로 접속
-it /bin/bash 옵션을 통해 myweb1 컨테이너 내부에 직접 접근할 수 있는 bash 쉘 실행하도록 설정
ip address 명령을 통해 컨테이너 내 네트워크 인터페이스들의 IP 주소와 상태 정보 확인
ip route 명령을 통해 컨테이너 내 네트워크 라우팅 테이블 확인

# myweb1 컨테이너와 docker1 네트워크 연결 테스트
ping –c 3 172.17.0.1 명령을 통해 docker1로 3번의 네트워크 연결 테스트를 보내고 결과 확인
# myweb1 컨테이너와 외부 IP 주소 네트워크 연결 테스트
ping –c 3 168.126.63.1 명령을 통해 외부 IP 주소로 3번의 네트워크 연결 테스트를 보내고 결과 확인

# myweb1 컨테이너와 myweb2 컨테이너 네트워크 연결 테스트
ping –c 3 172.17.0.3 명령을 통해 myweb2로 3번의 네트워크 연결 테스트를 보내고 결과 확인
exit 명령을 통해 myweb1 컨테이너 내부 bash 쉘에서 나옴

docker container ls -a 명령을 통해 컨테이너 목록 확인
# myweb2 컨테이너 내부 동작
docker container exec myweb2 명령을 통해 myweb2 컨테이너 내부로 접속
-it /bin/bash 옵션을 통해 myweb2 컨테이너 내부에 직접 접근할 수 있는 bash 쉘 실행하도록 설정

ip address 명령을 통해 컨테이너 내 네트워크 인터페이스들의 IP 주소와 상태 정보를 확인
ip route 명령을 통해 컨테이너 내 네트워크 라우팅 테이블 확인

# myweb2 컨테이너와 docker1 네트워크 연결 테스트
ping -c 3 172.17.0.1 명령을 통해 docker1로 3번의 네트워크 연결 테스트를 보내고 결과 확인
# myweb2 컨테이너와 외부 IP 주소 네트워크 연결 테스트
ping –c 3 168.126.63.1 명령을 통해 외부 IP 주소로 3번의 네트워크 연결 테스트를 보내고 결과 확인
# myweb1 컨테이너와 myweb2 컨테이너 네트워크 연결 테스트
ping –c 3 172.17.0.2 명령을 통해 myweb1로 3번의 네트워크 연결 테스트를 보내고 결과 확인

# myweb2 컨테이너와 myweb1 컨테이너 네트워크 연결 테스트
ping –c 3 172.17.0.2 명령을 통해 myweb1로 3번의 네트워크 연결 테스트를 보내고 결과 확인
# myweb2 컨테이너 내에서 네트워크 연결 테스트
ping –c 3 172.17.0.3 명령을 통해 myweb2로 3번의 네트워크 연결 테스트를 보내고 결과 확인
exit 명령을 통해 myweb2 컨테이너 bash 쉘에서 나옴

docker network ls 명령을 통해 현재 도커에 생성되어 있는 네트워크 목록 확인
# testnet 네트워크 생성
docker network create –d bridge testnet 명령을 통해 bridge 드라이버 사용하여 testnet 네트워크 생성
docker network ls 명령을 통해 새로운 네트워크가 잘 생성되었는지 확인

# myweb3 컨테이너 생성 및 실행
docker container run --name myweb3 centos:8 명령을 통해
CentOS:8 이미지 사용하여 myweb3 컨테이너 생성 및 실행
-it 옵션을 통해 myweb3 컨테이너 내부에 직접 접속할 수 있는 쉘 실행하도록 설정
-d 옵션을 통해 myweb3 컨테이너를 백그라운드로 구동
-p 8003:80 옵션을 통해 호스트의 8003번 포트와 컨테이너의 80번 포트 매핑
-network=testnet 옵션을 통해 myweb3 컨테이너 시작할 때 testnet 네트워크 연결하도록 설정

docker container ls -a 명령을 통해 컨테이너 목록 확인
# myweb3 컨테이너 내부 동작
docker container exec myweb3 명령을 통해 myweb3 컨테이너 내부로 접속
-it /bin/bash 옵션을 통해 myweb3 컨테이너 내부에 직접 접근할 수 있는 bash 쉘 실행하도록 설정
ip address 명령을 통해 컨테이너 내 네트워크 인터페이스들의 IP 주소와 상태 정보를 확인
ip route 명령을 통해 컨테이너 내 네트워크 라우팅 테이블 확인

# myweb3 컨테이너와 docker1 네트워크 연결 테스트
ping –c 3 172.18.0.1 명령을 통해 docker1로 3번의 네트워크 연결 테스트를 보내고 결과 확인
# myweb3 컨테이너와 외부 IP 주소 네트워크 연결 테스트
ping –c 3 168.126.63.1 명령을 통해 외부 IP 주소로 3번의 네트워크 연결 테스트를 보내고 결과 확인
# myweb3 컨테이너와 myweb1 컨테이너 네트워크 연결 테스트
ping –c 3 172.17.0.2 명령을 통해 myweb1로 3번의 네트워크 연결 테스트를 보내고 결과 확인
# myweb3 컨테이너와 myweb2 컨테이너 네트워크 연결 테스트
ping –c 3 172.17.0.3 명령을 통해 myweb2로 3번의 네트워크 연결 테스트를 보내고 결과 확인
exit 명령을 통해 myweb3 컨테이너 내부 bash 쉘에서 나옴

docker container ls -a 명령을 통해 생성된 컨테이너 목록 확인
# myweb1, myweb2, myweb3 컨테이너 삭제
docker container rm -f 76 ec 01 명령을 통해 myweb1, myweb2, myweb3 컨테이너 삭제
docker container ls -a 명령을 통해 컨테이너가 잘 삭제되었는지 확인
# testnet 네트워크 삭제
docker network rm testnet 명령을 통해 testnet 네트워크 삭제
docker network ls 명령을 통해 testnet 네트워크가 잘 삭제되었는지 확인

# 컨테이너 생성 및 실행
docker container run centos:8 명령을 통해 CentOS:8 이미지 사용하여 컨테이너 생성 및 실행
--rm 옵션을 통해 실행이 종료되면 컨테이너가 자동으로 삭제되도록 설정
--network=bridge 옵션을 통해 컨테이너를 시작할 때 bridge 네트워크와 연결하도록 설정
ip address 명령을 통해 네트워크 인터페이스 정보 확인
ip address show docker0 명령을 통해 docker0 네트워크 인터페이스 정보 확인

# 컨테이너 생성 및 실행
docker container run centos:8 명령을 통해 CentOS:8 이미지 사용하여 컨테이너 생성 및 실행
--rm 옵션을 통해 실행이 종료되면 자동으로 컨테이너가 삭제되도록 설정
--network=none 옵션을 통해 컨테이너에 네트워크를 아예 연결하지 않도록 설정
(루프백 (lo)만 있고, 외부 / 내부 어떤 네트워크와도 통신 불가)
ip address 명령을 통해 네트워크 인터페이스 정보 확인

docker network ls —no-trunc 명령을 통해 도커에 생성된 모든 네트워크 목록을 축약없이 볼 수 있도록 함
echo 네트워크 ID | wc –c 명령을 통해 특정 네트워크 ID 문자열의 문자 수를 세어 화면에 출력

ip address show docker0 명령을 통해 docker0 네트워크 인터페이스 정보 확인
# br1 네트워크 생성
docker network create –d br1 명령을 통해 bridge 드라이버 사용하여 br1 네트워크 생성
docker network inspect br1 명령을 통해 br1 네트워크의 상세 정보 확인

ip address 명령을 통해 컨테이너 내 네트워크 인터페이스들의 IP 주소와 상태 정보 확인

# br2 네트워크 생성
docker network create –d br2 명령을 통해 bridge 드라이버 사용하여 br2 네트워크 생성
docker network inspect br2 명령을 통해 br2 네트워크의 상세 정보 확인

# br3 네트워크 생성
docker network create –d bridge br3 명령을 통해 bridge 드라이버 사용하여 br3 네트워크 생성
--subnet 192.168.100.0/24 옵션을 통해 네트워크 서브넷 직접 지정
docker network inspect br3 명령을 통해 br3 네트워크의 상세 정보 확인

ip address 명령을 통해 컨테이너 내 네트워크 인터페이스들의 IP 주소와 상태 정보 확인

# br3 네트워크 삭제
docker network rm br3 명령을 통해 br3 네트워크 삭제
# br3 네트워크 생성
docker network create –d bridge br3 명령을 통해 bridge 드라이버 사용하여 br3 네트워크 생성
--subnet 192.168.100.0/24 옵션을 통해 네트워크 서브넷 직접 지정
--gateway 192.168.100.254 옵션을 통해 게이트웨이 직접 지정
docker network inspect br3 명령을 통해 br3 네트워크의 상세 정보를 출력하여 확인

ip address 명령을 통해 컨테이너 내 네트워크 인터페이스들의 IP 주소와 상태 정보 확인

docker network ls 명령을 통해 네트워크 목록 확인
# br1, br2, br3 네트워크 삭제
docker network rm br1 br2 br3 명령을 통해 br1, br2, br3 네트워크 삭제
docker network ls 명령을 통해 잘 삭제되었는지 확인

# br0 네트워크 생성
docker network create -d bridge br0 명령을 통해 bridge 드라이버 사용하여 br0 네트워크 생성
docker network ls 명령을 통해 네트워크가 잘 생성되었는지 확인

ip address 명령을 통해 컨테이너 내 네트워크 인터페이스들의 IP 주소와 상태 정보 확인
docker network inspect br0 명령을 통해 br0 네트워크의 상세 정보 확인

# br1 네트워크 생성
docker network create –d bridge br1 명령을 통해 bridge 드라이버 사용하여 br1 네트워크 생성
--subnet 192.168.100.0/24 옵션을 통해 네트워크 서브넷 직접 지정
docker network inspect br1 명령을 통해 br1 네트워크의 상세 정보 확인

ip address 명령을 통해 컨테이너 내 네트워크 인터페이스들의 IP 주소와 상태 정보 확인

# br1 네트워크 삭제
docker network rm br1 명령을 통해 br1 네트워크 삭제
# br1 네트워크 생성
docker network create -d bridge br1 명령을 통해 bridge 드라이버 사용하여 br1 네트워크 생성
--subnet 192.168.100.0/24 옵션을 통해 네트워크 서브넷 직접 지정
--gateway 192.168.100.254 옵션을 통해 게이트웨이 직접 지정
docker network inspect br1 명령을 통해 br1 네트워크의 상세 정보 확인

docker network ls 명령을 통해 네트워크가 잘 생성되었는지 확인
# testserver 컨테이너 생성 및 실행
docker container run --name testserver centos:8 명령을 통해
CentOS:8 이미지 사용하여 testserver 컨테이너 생성 및 실행
-it 옵션을 통해 testserver 컨테이너 내부에 직접 접근할 수 있는 쉘 실행하도록 설정
--rm 옵션을 통해 실행이 종료되면 컨테이너가 자동으로 삭제되도록 설정
--network=br1 옵션을 통해 컨테이너가 실행될 때 br1 네트워크와 연결되도록 설정

ip address 명령을 통해 컨테이너 내 네트워크 인터페이스들의 IP 주소와 상태 정보 확인
ip route 명령을 통해 컨테이너 내 네트워크 라우팅 테이블 확인
exit 명령을 통해 testserver 컨테이너 내부에서 나옴

docker container ls -a 명령을 통해 컨테이너 목록 확인
# testserver 컨테이너 생성 및 실행
docker container run --name testserver centos:8 명령을 통해
CentOS:8 이미지 사용하여 testserver 컨테이너 생성 및 실행
-it 옵션을 통해 testserver 컨테이너 내부에 직접 접근할 수 있는 쉘 실행하도록 설정
--rm 옵션을 통해 실행이 종료되면 컨테이너가 자동으로 삭제되도록 설정
--network=br1 옵션을 통해 컨테이너가 실행될 때 br1 네트워크와 연결되도록 설정
--ip 192.168.100.101 옵션을 통해 IP 주소를 192.168.100.101로 설정

ip address 명령을 통해 컨테이너 내 네트워크 인터페이스들의 IP 주소와 상태 정보 확인
exit 명령을 통해 testserver 컨테이너 내부에서 나옴

# myweb 컨테이너 생성 및 실행
docker container run --name myweb nginx 명령을 통해 Nginx 이미지 사용하여 myweb 컨테이너 생성 및 실행
-d 옵션을 통해 myweb 컨테이너를 백그라운드에서 구동
--network=br0 옵션을 통해 컨테이너를 실행할 때 br0 네트워크와 연결되도록 설정
docker container inspect myweb 명령을 통해 myweb 컨테이너와 br0 네트워크가 잘 연결되었는지 확인

# br0 네트워크와 myweb 컨테이너 연결 해제
docker network disconnect br0 myweb 명령을 통해 br0 네트워크와 myweb 컨테이너 연결 해제
docker container inspect myweb 명령을 통해 myweb 컨테이너와 br0 네트워크 연결이 잘 해제되었는지 확인

# br1 네트워크와 myweb 컨테이너 연결
docker network connect br1 myweb 명령을 통해 br1 네트워크와 myweb 컨테이너 연결
docker container inspect myweb 명령을 통해 myweb 컨테이너와 br1 네트워크가 잘 연결되었는지 확인

# br0 네트워크와 myweb 컨테이너 연결
docker network connect br0 myweb 명령을 통해 br0 네트워크와 myweb 컨테이너 연결
docker container inspect myweb 명령을 통해 myweb 컨테이너와 br0 네트워크가 잘 연결되었는지 확인

docker network ls 명령을 통해 네트워크 목록 확인
docker container ls -a 명령을 통해 컨테이너 목록 확인
# myweb 컨테이너 삭제
docker container rm -f 90 명령을 통해 myweb 컨테이너 삭제
docker container ls -a 명령을 통해 컨테이너가 잘 삭제되었는지 확인
# br0 네트워크 삭제
docker network rm br0 명령을 통해 br0 네트워크 삭제
docker network ls 명령을 통해 br0 네트워크가 잘 삭제되었는지 확인
# br1 네트워크 삭제
docker network rm br1 명령을 통해 br1 네트워크 삭제
docker network ls 명령을 통해 br1 네트워크가 잘 삭제되었는지 확인

# alpine1 컨테이너 생성 및 실행
docker container run --name alpine1 alpine 명령을 통해 alpine 이미지 사용하여 alpine1 컨테이너 생성 및 실행
-it ash 옵션을 통해 alpine1 컨테이너 내부에 직접 접속할 수 있는 ash 쉘 실행하도록 설정
-d 옵션을 통해 alpine1 컨테이너를 백그라운드로 구동
--network=bridge 옵션을 통해 alpine1 컨테이너를 시작할 때 bridge 네트워크와 연결되도록 설정
# alpine2 컨테이너 생성 및 실행
docker container run --name alpine2 alpine 명령을 통해 alpine 이미지 사용하여 alpine2 컨테이너 생성 및 실행
-it ash 옵션을 통해 alpine2 컨테이너 내부에 직접 접속할 수 있는 ash 쉘 실행하도록 설정
-d 옵션을 통해 alpine2 컨테이너를 백그라운드로 구동
--network=bridge 옵션을 통해 alpine2 컨테이너를 시작할 때 bridge 네트워크와 연결되도록 설정
docker network ls 명령을 통해 네트워크 목록 확인
docker network inspect bridge 명령을 통해 bridge 네트워크의 상세 정보 확인

docker container ls 명령을 통해 생성된 컨테이너 목록 확인
# alpine1 컨테이너 접속
docker container attach alpine1 명령을 통해 alpine1 컨테이너에 접속
ip address 명령을 통해 컨테이너 내부에서 네트워크 인터페이스의 IP 주소와 상태 확인
ip route 명령을 통해 네트워크 라우팅 테이블 확인
# alpine1 컨테이너와 docker0 브리지 네트워크 연결 테스트
ping –c 3 172.17.0.1 명령을 통해 172.17.0.1로 3번의 네트워크 연결 테스트를 보내고 결과 확인
# alpine1 컨테이너와 외부 IP 주소 네트워크 연결 테스트
ping –c 3 168.126.63.1 명령을 통해 외부 IP 주소로 3번의 네트워크 연결 테스트를 보내고 결과 확인
# alpine1 컨테이너와 alpine2 컨테이너 네트워크 연결 테스트
ping –c 3172.17.0.3 명령을 통해 172.17.0.3으로 3번의 네트워크 연결 테스트를 보내고 결과 확인
ctrl + p + q 입력하여 alpine1 컨테이너에서 나옴

# alpine2 컨테이너 접속
docker container attach alpine2 명령을 통해 alpine2 컨테이너 접속
ip address 명령을 통해 컨테이너 내부에서 네트워크 인터페이스의 IP 주소와 상태 확인
ip route 명령을 통해 네트워크 라우팅 테이블 확인
# alpine2 컨테이너와 docker0 브리지 네트워크 연결 테스트
ping –c 3 172.17.0.1 명령을 통해 172.17.0.1로 3번의 네트워크 연결 테스트를 보내고 결과 확인
# alpine2 컨테이너와 외부 IP 주소 네트워크 연결 테스트
ping –c 3 168.126.63.1 명령을 통해 외부 IP 주소로 3번의 네트워크 연결 테스트를 보내고 결과 확인
# alpine2 컨테이너와 alpine1 컨테이너 네트워크 연결 테스트
ping –c 3172.17.0.2 명령을 통해 172.17.0.2로 3번의 네트워크 연결 테스트를 보내고 결과 확인
ctrl + p + q 입력하여 alpine2 컨테이너에서 나옴

docker container ls -a 명령을 통해 생성된 컨테이너 목록 확인
# alpine1, alpine2 컨테이너 삭제
docker container rm -f alpine1 alpine2 명령을 통해 alpine1, alpine2 컨테이너 삭제
docker container ls -a 명령을 통해 잘 삭제되었는지 확인

docker network ls 명령을 통해 네트워크 목록 확인
# alpinenet bridge 네트워크 생성
docker network create -d bridge alpinenet 명령을 통해 alpinenet bridge 네트워크 생성
docker network ls 명령을 통해 네트워크가 잘 생성되었는지 확인
docker network inspect alpinenet 명령을 통해 alpinenet 네트워크의 상세 정보 확인

# alpine1 컨테이너 생성 및 실행
docker container run --name alpine1 alpine 명령을 통해 alpine 이미지 사용하여 alpine1 컨테이너 생성 및 실행
--it ash 옵션을 통해 alpine1 컨테이너 내부에 직접 접근할 수 있는 ash 쉘 실행하도록 설정
-d 옵션을 통해 alpine1 컨테이너를 백그라운드로 구동
--network=alpinenet 옵션을 통해 alpine1 컨테이너 실행할 때 alpinenet 네트워크와 연결되도록 설정
--privileged 옵션을 통해 컨테이너에 더 높은 권한 부여
# alpine2 컨테이너 생성 및 실행
docker container run --name alpine2 alpine 명령을 통해 alpine 이미지 사용하여 alpine2 컨테이너 생성 및 실행
--it ash 옵션을 통해 alpine2 컨테이너 내부에 직접 접근할 수 있는 ash 쉘 실행하도록 설정
-d 옵션을 통해 alpine2 컨테이너를 백그라운드로 구동
--network=alpinenet 옵션을 통해 alpine2 컨테이너 실행할 때 alpinenet 네트워크와 연결되도록 설정
--privileged 옵션을 통해 컨테이너에 더 높은 권한 부여
# alpine3 컨테이너 생성 및 실행
docker container run --name alpine3 alpine 명령을 통해 alpine 이미지 사용하여 alpine3 컨테이너 생성 및 실행
--it ash 옵션을 통해 alpine3 컨테이너 내부에 직접 접근할 수 있는 ash 쉘 실행하도록 설정
-d 옵션을 통해 alpine3 컨테이너를 백그라운드로 구동
--privileged 옵션을 통해 컨테이너에 더 높은 권한 부여
docker network connect alpinenet alpine3 명령을 통해 alpine3 컨테이너 실행할 때
alpinenet 네트워크와 연결되도록 설정
# alpine4 컨테이너 생성 및 실행
docker container run --name alpine4 alpine 명령을 통해 alpine 이미지 사용하여 alpine4 컨테이너 생성 및 실행
--it ash 옵션을 통해 alpine4 컨테이너 내부에 직접 접근할 수 있는 ash 쉘 실행하도록 설정
-d 옵션을 통해 alpine4 컨테이너를 백그라운드로 구동
--privileged 옵션을 통해 컨테이너에 더 높은 권한 부여
docker network inspect alpinenet 명령을 통해 alpinenet 네트워크의 상세 정보 확인

docker network inspect bridge 명령을 통해 bridge 네트워크의 상세 정보 확인

# alpine1 컨테이너 접속
docker container attach alpine1 명령을 통해 alpine1 컨테이너 접속
ip address 명령을 통해 컨테이너 내부에서 네트워크 인터페이스의 상태와 IP 주소 확인
ip route 명령을 통해 네트워크 라우팅 테이블 확인
# alpine1 컨테이너와 alpine2 컨테이너 네트워크 연결 테스트
ping –c 3 172.18.0.3 명령을 통해 alpine2의 eth0으로 3번의 네트워크 연결 테스트를 보내고 결과 확인
# alpine1 컨테이너와 alpine3 컨테이너 네트워크 연결 테스트
ping –c 3 172.18.0.4 명령을 통해 alpine3의 eth1로 3번의 네트워크 연결 테스트를 보내고 결과 확인
# alpine1 컨테이너와 alpine4 컨테이너 네트워크 연결 테스트
ping –c 3 172.17.0.3 명령을 통해 alpine4의 eth0으로 3번의 네트워크 연결 테스트를 보내고 결과 확인
ctrl + p + q 입력하여 alpine1 컨테이너에서 나옴

# alpine2 컨테이너 접속
docker container attach alpine2 명령을 통해 alpine2 컨테이너 접속
ip address 명령을 통해 컨테이너 내부에서 네트워크 인터페이스의 상태와 IP 주소 확인
ip route 명령을 통해 네트워크 라우팅 테이블 확인
# alpine2 컨테이너와 alpine1 컨테이너 네트워크 연결 테스트
ping –c 3 172.18.0.2 명령을 통해 alpine1의 eth0로 3번의 네트워크 연결 테스트를 보내고 결과 확인
# alpine2 컨테이너와 alpine3 컨테이너 네트워크 연결 테스트
ping –c 3 172.18.0.4 명령을 통해 alpine3의 eth1로 3번의 네트워크 연결 테스트를 보내고 결과 확인
# alpine2 컨테이너와 alpine4 컨테이너 네트워크 연결 테스트
ping –c 3 172.17.0.3 명령을 통해 alpine4의 eth0으로 3번의 네트워크 연결 테스트 보내고 결과 확인
ctrl + p + q 입력하여 alpine2 컨테이너에서 나옴

# alpine3 컨테이너 접속
docker container attach alpine3 명령을 통해
ip address 명령을 통해 컨테이너 내부에서 네트워크 인터페이스의 상태와 IP 주소 확인
ip route 명령을 통해 네트워크 라우팅 테이블 확인
# alpine3 컨테이너와 alpine1 컨테이너 네트워크 연결 테스트
ping –c 1 172.18.0.2 명령을 통해 alpine1의 eth0로 1번의 네트워크 연결 테스트를 보내고 결과 확인
# alpine3 컨테이너와 alpine2 컨테이너 네트워크 연결 테스트
ping –c 1 172.18.0.3 명령을 통해 alpine2의 eth0으로 1번의 네트워크 연결 테스트를 보내고 결과 확인
# alpine3 컨테이너와 alpine4 컨테이너 네트워크 연결 테스트
ping –c 1 172.17.0.3 명령을 통해 alpine4의 eth0으로 1번의 네트워크 연결 테스트를 보내고 결과 확인
ctrl + p + q 입력하여 alpine3 컨테이너에서 나옴

# alpine4 컨테이너 접속
docker container attach alpine4 명령을 통해 alpine4 컨테이너 접속
ip address 명령을 통해 컨테이너 내부에서 네트워크 인터페이스의 상태와 IP 주소 확인
ip route 명령을 통해 네트워크 라우팅 테이블 확인
# alpine4 컨테이너와 docker0 네트워크 연결 테스트
ping 172.17.0.2 명령을 통해 docker0으로 네트워크 연결 테스트를 보내고 결과 확인
# alpine4 컨테이너와 alpine1 컨테이너 네트워크 연결 테스트
ping –c 1 172.18.0.2 명령을 통해 alpine1의 eth0으로 1번의 네트워크 연결 테스트를 보내고 결과 확인
# alpine4 컨테이너와 alpine2 컨테이너 네트워크 연결 테스트
ping –c 1 172.18.0.3 명령을 통해 alpine2의 eth0으로 1번의 네트워크 연결 테스트를 보내고 결과 확인
# alpine4 컨테이너와 외부 IP 주소 네트워크 연결 테스트
ping –c 1 168.126.63.1 명령을 통해 외부 IP 주소로 1번의 네트워크 연결 테스트를 보내고 결과 확인
ctrl + p + q 입력하여 alpine4 컨테이너에서 나옴

# alpine1 컨테이너 접속
docker container attach alpine1 명령을 통해 alpine1 컨테이너 접속
route add –net 172.17.0.0 netmask 255.255.0.0 gw 172.18.0.4 명령을 통해
172.17.0.0/16 네트워크로 가는 경로를 172.18.0.4 게이트웨이를 통해 추가
이를 통해 컨테이너가 다른 도커 네트워크인 172.17.0.0/16와 통신할 수 있도록 라우팅 경로 설정
ip route 명령을 통해 네트워크 라우팅 테이블 확인
ctrl + p + q 명령을 통해 alpine1 컨테이너에서 나옴

# alpine2 컨테이너 접속
docker container attach alpine2 명령을 통해 alpine2 컨테이너 접속
route add –net 172.17.0.0 netmask 255.255.0.0 gw 172.18.0.4 명령을 통해
172.17.0.0/16 네트워크로 가는 경로를 172.18.0.4 게이트웨이를 통해 추가
이를 통해 컨테이너가 다른 도커 네트워크인 172.17.0.0/16와 통신할 수 있도록 라우팅 경로 설정
ip route 명령을 통해 네트워크 라우팅 테이블 확인
ctrl + p + q 명령을 통해 alpine2 컨테이너에서 나옴

# alpine4 컨테이너 접속
docker container attach alpine4 명령을 통해 alpine4 컨테이너 접속
route add –net 172.18.0.0 netmask 255.255.0.0 gw 172.17.0.2 명령을 통해
172.18.0.0 네트워크로 가는 경로를 172.17.0.2 게이트웨이를 통해 추가
이를 통해 컨테이너가 다른 도커 네트워크인 172.18.0.0과 통신할 수 있도록 라우팅 경로 설정
ip route 명령을 통해 네트워크 라우팅 테이블 확인
# alpine4 컨테이너와 alpine1 컨테이너 네트워크 연결 테스트
ping –c 1 172.18.0.2 명령을 통해 alpine1의 eth0으로 1번의 네트워크 연결 테스트를 보내고 결과 확인
# alpine4 컨테이너와 alpine2 컨테이너 네트워크 연결 테스트
ping –c 1 172.18.0.3 명령을 통해 alpine2의 eth0으로 1번의 네트워크 연결 테스트를 보내고 결과 확인
ctrl + p + q 명령을 통해 alpine4 컨테이너에서 나옴

# alpine1 컨테이너 접속
docker container attach alpine1 명령을 통해 alpine1 컨테이너 접속
ip route 명령을 통해 네트워크 라우팅 테이블 확인
# alpine1 컨테이너와 docker0 네트워크 연결 테스트
ping –c 1 172.17.0.2 명령을 통해 docker0으로 1번의 네트워크 연결 테스트를 보내고 결과 확인
ctrl + p + q 명령을 통해 alpine1 컨테이너에서 나옴

# alpine2 컨테이너 접속
docker container attach alpine2 명령을 통해 alpine2 컨테이너 접속
ip route 명령을 통해 네트워크 라우팅 테이블 확인
# alpine2 컨테이너와 docker0 네트워크 연결 테스트
ping –c 1 172.17.0.2 명령을 통해 docker0으로 1번의 네트워크 연결 테스트를 보내고 결과 확인
ctrl + p + q 명령을 통해 alpine2 컨테이너에서 나옴

docker container ls -a 명령을 통해 컨테이너 목록 확인
# alpine1, alpine2, alpine3, alpine4 컨테이너 삭제
docker container rm -f alpine1 alpine2 alpine3 alpine4 명령을 통해
alpine1, alpine2, alpine3, alpine4 컨테이너 삭제
docker container ls -a 명령을 통해 컨테이너가 잘 삭제되었는지 확인

docker network ls 명령을 통해 네트워크 목록 확인
# alpinenet 네트워크 삭제
docker network rm alpinenet 명령을 통해 alpinenet 네트워크 삭제
docker network ls 명령을 통해 네트워크가 잘 삭제되었는지 확인

# mysql 컨테이너 생성 및 실행
docker container run --name mysql mysql:5.7 명령을 통해
Mysql:5.7 이미지 사용하여 mysql 컨테이너 생성 및 실행
-d 옵션을 통해 mysql 컨테이너를 백그라운드로 구동
-v /dbdata:/var/lib/mysql 옵션을 통해 /dbdata 디렉터리와 /var/lib/mysql 볼륨 mount
=> 호스트의 /dbdata 디렉터리를 컨테이너의 MYSQL 데이터 디렉터리인
/var/lib/mysql에 연결하여 데이터 영속성 보장
-e MYSQL_ROOT_PASSWORD=wordpress 옵션을 통해 MYSQL root 계정 비밀번호 설정
# wordpress 컨테이너 생성 및 실행
docker container run --name wordpress wordpress:5 명령을 통해
wordpress:5 이미지 사용하여 wordpress 컨테이너 생성 및 실행
-d 옵션을 통해 wordpress 컨테이너를 백그라운드로 구동
--link mysql 옵션을 통해 mysql 컨테이너와 연결해 데이터베이스 접근이 가능하도록 허용
-e WORDPRESS_WORD_DB_USER=root 옵션을 통해 워드프레스 DB 사용자 설정
-e WORDPRESS_WORD_DB_PASSWORD=wordpress 옵션을 통해 워드프레스 DB 패스워드 설정
-p 80:80 wordpress:5 옵션을 통해 호스트의 80번 포트와 컨테이너의 80번 포트 매핑
( 웹 서비스가 외부에 노출되도록 설정)
docker container ls –a 명령을 통해 컨테이너가 잘 생성되었는지 확인

# wordpress 내부 동작
docker container exec wordpress 명령을 통해 wordpress 컨테이너 내부 진입
-it /bin/bash 옵션을 통해 wordpress 컨테이너 내부에 직접 접근할 수 있는 bash 쉘 실행하도록 설정
cat /etc/hosts 명령을 통해 /etc/hosts 파일 내용 확인

ping –c 3 mysql 명령을 통해 mysql 컨테이너에 3번의 네트워크 연결 테스트를 보내고 결과 확인

# mysql, wordpress 컨테이너 삭제
docker container rm -f 43 a4 명령을 통해 mysql, wordpress 컨테이너 삭제
docker container ls -a 명령을 통해 컨테이너가 잘 삭제되었는지 확인
'Docker' 카테고리의 다른 글
| Docker 리소스 제한 및 모니터링 (0) | 2026.06.12 |
|---|---|
| Docker 컨테이너 운용 (0) | 2026.06.12 |
| Docker 컨테이너 관리 & Docker 볼륨 관리 (0) | 2026.06.12 |
| Docker 이미지 관리 & Docker 이미지 업로드 (0) | 2026.06.12 |
| Docker의 기본 동작 확인 (0) | 2026.06.12 |