소프트웨어 개발/Docker

🐳 Docker 강의 4강: Docker 네트워킹

브라더댄 2025. 1. 27. 01:16
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 컨테이너 생성

  1. redis와 busybox 컨테이너 생성:
  2. docker run -d --name redis-container redis docker run -it --name busybox-container busybox
  3. busybox 컨테이너 내부에서 redis 컨테이너로 접근:내부에서:
  4. ping redis-container
  5. 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 브라우저에서 확인


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가 아님.
  • 해결:
    1. 컨테이너가 동일한 네트워크에 속했는지 확인:
      docker network inspect bridge
      
    2. 필요한 경우 컨테이너를 특정 네트워크에 연결:
      docker network connect <네트워크 이름> <컨테이너 이름>
      

2. 포트 충돌

  • 문제: 컨테이너 실행 시 "port is already allocated" 오류 발생.
  • 해결:
    1. 다른 포트를 사용해 컨테이너 실행:
      docker run -d -p 9090:80 nginx
      
    2. 기존 컨테이너 중지:
      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