728x90
반응형
SMALL
🚀 강의 목표
- Docker 네트워크의 개념과 종류를 이해합니다.
- Docker 컨테이너 간 통신 설정 및 사용자 정의 네트워크를 생성합니다.
- 외부 접속(포트 포워딩) 설정과 네트워크 실습을 진행합니다.
- 네트워크 구성 중 발생할 수 있는 문제를 해결합니다.
🧐 Docker 네트워킹이란?
Docker 네트워킹은 컨테이너 간 또는 컨테이너와 외부 시스템 간의 통신을 설정하는 기능입니다. 컨테이너는 독립적인 환경에서 실행되지만, 네트워크를 통해 서로 데이터를 주고받거나 외부와 연결될 수 있습니다.
1. Docker 네트워크의 종류
Docker는 기본적으로 아래와 같은 네트워크 드라이버를 제공합니다:
네트워크 종류 설명
| bridge | 기본 네트워크로, 컨테이너 간 통신이 가능하고 외부에서는 접근 불가. |
| host | 호스트 네트워크를 공유하며, 성능은 좋지만 격리가 없음. |
| none | 네트워크를 사용하지 않는 격리 상태. |
| overlay | Docker Swarm 또는 Kubernetes에서 클러스터 간 네트워크 통신. |
| macvlan | 컨테이너에 고유한 MAC 주소를 부여하여 물리 네트워크와 연결. |
Tip: 대부분의 개발 환경에서는 bridge 네트워크를 주로 사용하며, 복잡한 환경에서는 overlay 네트워크를 활용합니다.
2. 기본 네트워크 확인
현재 Docker의 기본 네트워크를 확인하려면 다음 명령어를 사용하세요:
docker network ls
출력 예시:
NETWORK ID NAME DRIVER SCOPE
abcd1234 bridge bridge local
efgh5678 host host local
ijkl9012 none null local
🖥️ 실습: 네트워크 설정과 컨테이너 간 통신
1. 컨테이너 간 통신 (Bridge 네트워크)
1.1 컨테이너 생성
- redis와 busybox 컨테이너 생성:
- docker run -d --name redis-container redis docker run -it --name busybox-container busybox
- busybox 컨테이너 내부에서 redis 컨테이너로 접근:내부에서:
- ping redis-container
- docker exec -it busybox-container sh
1.2 결과
- 동일한 네트워크(bridge)에 속한 컨테이너는 컨테이너 이름을 사용해 통신 가능합니다.
- ping redis-container 명령어가 성공적으로 응답하면 통신이 설정된 것입니다. 🎉
2. 사용자 정의 네트워크 생성
2.1 네트워크 생성
사용자 정의 네트워크를 생성하여 컨테이너 간 통신을 설정합니다:
docker network create my-network
- my-network이라는 이름의 네트워크가 생성됩니다.
2.2 네트워크에 컨테이너 연결
my-network를 사용해 컨테이너를 실행합니다:
docker run -d --name redis-container --network my-network redis
docker run -it --name busybox-container --network my-network busybox
2.3 네트워크 내 통신 확인
- busybox-container에서 redis-container로 ping을 시도합니다:
- docker exec -it busybox-container sh ping redis-container
- 결과: 사용자 정의 네트워크에서도 컨테이너 이름을 통해 통신 가능!
3. 외부 접속 설정 (포트 포워딩)
3.1 포트 매핑으로 외부 접속 설정
컨테이너 외부에서 Nginx 웹 서버에 접속 가능한 환경을 구성합니다:
docker run -d --name nginx-container -p 8080:80 nginx
- 호스트의 8080번 포트를 컨테이너의 80번 포트와 연결합니다.
3.2 브라우저에서 확인
- 브라우저에서 **http://localhost:8080**으로 접속합니다.
- Nginx의 기본 페이지가 보이면 성공입니다! 🎉
4. Docker Compose를 활용한 네트워크 구성
4.1 Docker Compose 파일 작성
docker-compose.yml 파일:
version: "3.8"
services:
web:
image: nginx
ports:
- "8080:80"
networks:
- my-network
app:
image: busybox
command: sleep 3600
networks:
- my-network
networks:
my-network:
driver: bridge
4.2 Docker Compose 실행
docker-compose up -d
- web 서비스와 app 서비스가 my-network라는 사용자 정의 네트워크에서 실행됩니다.
4.3 네트워크 상태 확인
- Docker Compose로 생성된 네트워크 확인:
docker network ls - my-network가 생성되어 있는 것을 확인할 수 있습니다.
❗ 실습 중 발생할 수 있는 오류와 해결 방법
1. 컨테이너 이름으로 통신 실패
- 문제: ping redis-container 실행 시 "unknown host" 오류 발생.
- 원인: 컨테이너들이 동일 네트워크에 속하지 않았거나, 네트워크 드라이버가 bridge가 아님.
- 해결:
- 컨테이너가 동일한 네트워크에 속했는지 확인:
docker network inspect bridge - 필요한 경우 컨테이너를 특정 네트워크에 연결:
docker network connect <네트워크 이름> <컨테이너 이름>
- 컨테이너가 동일한 네트워크에 속했는지 확인:
2. 포트 충돌
- 문제: 컨테이너 실행 시 "port is already allocated" 오류 발생.
- 해결:
- 다른 포트를 사용해 컨테이너 실행:
docker run -d -p 9090:80 nginx - 기존 컨테이너 중지:
docker stop <컨테이너_ID>
- 다른 포트를 사용해 컨테이너 실행:
3. 사용자 정의 네트워크 생성 실패
- 문제: docker network create 실행 시 "driver not found" 오류 발생.
- 해결: Docker 데몬이 제대로 실행되고 있는지 확인하고, 네트워크 드라이버를 명시적으로 지정:
docker network create --driver bridge my-network
📝 정리 및 다음 강의 예고
1. 정리
- Docker 네트워킹은 컨테이너 간 통신 및 외부 접속 설정을 가능하게 합니다.
- 기본 네트워크(bridge)와 사용자 정의 네트워크를 활용해 환경을 구성할 수 있습니다.
- 포트 매핑을 통해 컨테이너를 외부에서 접근 가능하게 만들 수 있습니다.
- 실습 중 발생하는 오류를 해결하며 Docker 네트워킹을 완벽히 이해할 수 있습니다.
2. 다음 강의 예고
다음 강의에서는 Docker 볼륨과 데이터 관리를 다룹니다.
- 데이터 영속성을 위한 볼륨 사용법
- 컨테이너 재시작 후 데이터 유지 방법
- 볼륨 백업 및 복구
컨테이너 환경에서 데이터 관리를 효율적으로 하는 방법을 알아봅시다! 😊
더 알아보기: Docker 공식 문서
728x90
반응형
LIST
'소프트웨어 개발 > Docker' 카테고리의 다른 글
| 🐳 Docker 강의 5강: Docker 볼륨과 데이터 관리 (0) | 2025.01.27 |
|---|---|
| 🐳 Docker 강의 6강: Docker Compose를 활용한 멀티 컨테이너 환경 구성 (0) | 2025.01.27 |
| 🐳 Docker 강의 2강: Docker 이미지와 컨테이너 기본 사용법 (0) | 2025.01.27 |
| 🐳 Docker 강의 3강: Dockerfile을 이용한 커스텀 이미지 생성 (0) | 2025.01.27 |
| 🐳 Docker 강의 1강: Docker 기본 개념과 설치 (0) | 2025.01.27 |