TIL docker volume

sundays·2022년 10월 4일
0

Docker Volume

  • 데이터베이스, 웹 프로그램 등 업무에 사용하는 application에서 발생하는 데이터에 접근하고 이것을 공유하기 위해 Docker Volume 사용
  • Docker Volume을 사용하면 container가 삭제되어도 Volume은 독립적으로 운영되기 때문에 함께 삭제되지 않는 특징

종류

volume

  • docker volume create - volume 생성
  • docker volume inspect - volume 상세 정보
  • docker volume ls - volume 목록
  • docker volume rm - volume 삭제
  • docker volume prune - volume 삭제

실습

컨테이너가 삭제 되더라도 볼륨이 유지된다

bind mount

  • volume에 비해 사용이 제한적
  • host 파일 시스템 절대경로:container 내부 경로 를 직접 mount하여 사용 -> container 생성시

tmpfs mount

  • host 또는 container 쓰기 가능 계층에서 지속하지 않지만 중요한 파일을 임시로 사용하는 방법에 유용
  • tmpfs mount 방법은 임시적이며 host 메모리에서만 지속되므로 container가 중지되면 tmpfs mount가 제거되고 내부에 기록된 내용은 삭제된다.

nginx container volume

  • webapp-log 디렉토리는 webservice container에 log정보를 저장하는 목적을 bind-mount
  • calc-web 디렉토리는 webservice container의 web application 저장하는 목적으로 bind-mount

Docker Network

  • 별도 브리지 네트워크를 생성하여 연결값으로 설정하지 않는 한 실행되는 모든 container는 docker0 브리지에 연결하여 172.17.0.0/16 CIDR 범위로 IP 주소 할당 (/16 - 65,536개 IP 주소 범위)

Inteface

  • docker0

    • Docker 설치 시 기본적으로 제공되는 브리지 네트워크
    • 172.17.0.1 주소
    • docker0 브리지는 소프트웨어적인 스위치 방식으로 동작
    • DHCP로 연결된 container에 사전에 정의된 IP pool 할당
  • vethxxxxxx

    • OSI 7 계층 서비스 모델의 2계층 서비스로 container 내부에 제공되는 network interface eth0와 한 쌍으로 제공되어 docker0와 가상의 터널링 네트워크 제공
  • eth0

    • Docker container에 생성되는 기본 network interface 명으로 docker0를 게이트웨이로 사용
    • 순차적으로 IP address를 할당받거나 사용자가 동일 대역의 IP address를 지정 할 수 있다.

    종류

  • Bridge network( default )

    • 아무 설정 없이 사용했을 때 기본으로 사용하는 network
    • 예시) docker run -d -p 80:80 --name webserver2 nginx
  • Host network

    • container의 network 환경을 host의 network 환경과 동일하게 사용
    • 예시) docker run -d --net host --name webserver2 nginx
  • None network

    • network를 사용하지 않고 local network만 사용

    Docker Network Command Line

  • docker network ls -> Docker Network 목록 출력

  • docker network create [ 옵션 ] <네트워크 이름> -> Docker Network 생성

    • -d <driver 명> - driver 지정
      • 생략하면 default 는 bridge
  • docker network rm <네트워크 이름> -> Docker Network 삭제

  • docker network inspect <네트워크 이름> -> Docker Network 상세 정보

  • container에 할당된 IP Address 확인 방법

    • container에 대한 inspect 명령 결과에 grep 명령으로 확인
    • container의 application에 대하여 network 명령으로 확인
  • docker info | grep Network

Compose

  • 서로 연관된 container에 의해서 서비스를 제공하는 경우에는 연관된 container의 생성 순서나 연관 관계를 CLI 상에서 명령으로 처리하기에는 명령 입력에 대한 복잡성이 증가한다.
  • 여러 container 생성을 통한 배포 과정을 일괄적으로 관리할 수 있도 도구가 필요해졌다. - container orchestration 도구
  • 공통의 목적을 갖는 application stack을 Docker Compose YAML 코드로 정의해서 한 번에 서비스를 올리고 관리할 수 있는 도구
  • Docker Compose는 test, development, operation의 모든 환경에서 구성이 가능한 orchestration 도구 중 하나
  • 다양한 관리 기능을 가지고 있지 않기 때문에 test와 development 환경 구성에 적합
  • 실제 운영 환경은 많은 관리적 요소가 필요하므로 Docker Swarm이나 Kubernetes와 같은 orchestration 도구 사용

command line

  • docker compose version : Docker Compose version 확인
  • docker compose up : YAML 파일에 기술된 내용을 참조하여 container service 생성
  • docker compose down : docker compose up에 의해 생성된 container service 삭제
  • docker compose ps : docker compose로 생성된 container 목록 출력

container registry

  • public registry

    • hub.docker.com
      • 업로드 예시
      • 다운로드 예시
  • private registry

  • Amazon ECR

    • sudo apt install -y awscli 설치
    • Amazon ECR 에 registry 생성
    • ECR에 생성된 registry에 Docker image push / pull
      $ aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin <ECR repository URI>
    • docker image 생성
    • docker image push
    • docker image 다운로드

Reference

profile
develop life

0개의 댓글