CodeGym /행동 /Docker SELF /볼륨과 네트워크 마운트하기

볼륨과 네트워크 마운트하기

Docker SELF
레벨 16 , 레슨 1
사용 가능

7.1 볼륨 마운트

Docker Compose에서 볼륨과 네트워크를 마운트하면 유연하고 효율적인 멀티컨테이너 애플리케이션을 만들 수 있어. 볼륨(volumes)은 컨테이너 외부에 데이터를 저장해야 하는 경우에 사용되고, 네트워크(networks)는 컨테이너 간 상호작용을 가능하게 해. 이번 강의에서는 Docker Compose에서 볼륨과 네트워크를 사용하는 방법에 대해 자세히 알아볼게.

Docker의 볼륨은 컨테이너 외부에 데이터를 저장할 수 있게 해줘서 컨테이너가 중지되거나 삭제된 후에도 데이터를 유지할 수 있어. 데이터베이스 데이터, 로그 파일 및 지속적으로 유지해야 하는 기타 데이터를 저장하는 데 특히 유용해.

볼륨 유형:

  • 이름이 지정된 볼륨(Named Volumes): Docker에 의해 관리되며 호스트의 특정 디렉토리에 저장돼.
  • 바인드 마운트(Bind Mounts): 호스트의 지정된 디렉토리에서 컨테이너로 마운트돼.

Docker Compose에서 볼륨 설정

이름이 지정된 볼륨 예제

이 예제에서는 postgres-data라는 이름 지정 볼륨이 생성되고, 컨테이너 db 내부의 /var/lib/postgresql/data 디렉토리에 마운트돼.

Yaml

version: '3.8'

services:
  db:
    image: postgres:latest
    volumes:
      - postgres-data:/var/lib/postgresql/data

volumes:
  postgres-data:

바인드 마운트 예제

이 예제에서는 로컬 디렉토리와 파일 nginx.confhtml이 컨테이너 web에 바인드 마운트로 마운트돼.

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./html:/usr/share/nginx/html
<

7.2 네트워크 마운트

Docker Compose에서 네트워크는 컨테이너들이 서로 상호작용할 수 있게 해줘. 각 컨테이너는 하나 이상의 네트워크에 연결될 수 있어서, 격리와 트래픽 관리를 가능하게 해줘.

네트워크 타입:

  • 브릿지 네트워크 (Bridge): 기본적으로 컨테이너들은 같은 호스트 내에서 상호작용할 수 있는 브릿지 네트워크에 연결돼.
  • 오버레이 네트워크 (Overlay): Docker Swarm 클러스터에서 다른 호스트에서 실행 중인 컨테이너 간 상호작용을 위해 사용돼.
  • 네트워크 플러그인 (Network Plugins): 제3자 네트워크 드라이버를 사용해서 더 복잡한 설정을 가능하게 해줘.

사용자 정의 네트워크 생성 및 사용 예시

이 예시에선 두 개의 사용자 정의 네트워크 front-endback-end를 생성해. app 서비스는 두 네트워크 모두에 연결되고, web 서비스는 front-end에만, db 서비스는 back-end에만 연결돼.

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    networks:
      - front-end

  app:
    image: myapp:latest
    networks:
      - front-end
      - back-end

  db:
    image: postgres:latest
    networks:
      - back-end

networks:
  front-end:
  back-end:

실용적인 조언:

  1. 이름 있는 볼륨 사용: 이름 있는 볼륨은 Docker가 관리하며 데이터 사용 및 관리를 단순화해. 이름 있는 볼륨은 여러 서비스에서 동시에 연결될 수 있어. 예를 들어, 백엔드 서비스는 로그를 기록하고 모니터링 서비스는 그 로그를 분석한 뒤 error 수준 에러를 발견하면 알림을 보내줘.
  2. 네트워크 분리: 여러 네트워크를 사용하면 애플리케이션의 다양한 부분을 격리하고 그 상호작용을 제어할 수 있어.
  3. 구성 파일 저장: 구성 파일을 마운트하기 위해 바인드된 볼륨을 사용하면 이미지 재구성 없이 설정을 쉽게 변경할 수 있어.
  4. 네트워크 보안: 필요한 컨테이너만 상호작용할 수 있도록 네트워크 접근을 제한하면 애플리케이션 보안이 높아져.

7.3 볼륨과 네트워크 사용 예제

Docker Compose에서 볼륨과 네트워크 사용 예:

예제 1: 웹 서버와 데이터베이스가 있는 애플리케이션

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./html:/usr/share/nginx/html
    networks:
      - webnet

  db:
    image: postgres:latest
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
      POSTGRES_DB: mydb
    volumes:
      - db-data:/var/lib/postgresql/data
    networks:
      - webnet

volumes:
  db-data:

networks:
  webnet:

이 예제에서는:

  • 웹 서버 nginx와 데이터베이스 PostgreSQL은 동일한 네트워크 webnet에 연결되어 있어 상호 작용이 가능합니다. 네트워크가 하나뿐인 경우 명시하지 않아도 됩니다. 기본 네트워크가 생성됩니다.
  • 데이터베이스 데이터는 이름이 지정된 볼륨 db-data에 저장되어 컨테이너를 재시작해도 데이터가 유지됩니다.

예제 2: 다중 계층 애플리케이션

Yaml

version: '3.8'

services:
  frontend:
    image: myfrontend:latest
    networks:
      - front-tier
      - back-tier

  backend:
    image: mybackend:latest
    networks:
      - back-tier
    volumes:
      - backend-data:/var/lib/backend

  database:
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: example
    volumes:
      - db-data:/var/lib/mysql
    networks:
      - back-tier

volumes:
  backend-data:
  db-data:

networks:
  front-tier:
  back-tier:

이 예제에서는:

  • 두 개의 네트워크 front-tierback-tier가 생성되었습니다.
  • 서비스 frontend는 두 네트워크 모두에 연결되어 backend 및 외부 클라이언트와 상호 작용할 수 있습니다.
  • 서비스 backenddatabaseback-tier 네트워크에만 연결되어 격리와 상호 작용을 보장합니다.
  • 서비스 backenddatabase의 데이터는 각각 별도의 이름이 지정된 볼륨 backend-datadb-data에 저장됩니다.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION