Docker

이한결·2024년 6월 11일

Software

목록 보기
2/5

VM vs Container

VM과 비교한 Container의 장점

  • 낮은 메모리 점유
  • 높은 효율성

Container: App과 app 실행에 필요한 모든 dependency를 묶은 패키지

Cotainer Engine Architecutre

dockered(docker daemon): 사용자 명령을 처리

containered: container의 life cycle을 관리 → Container image가져온다

runC: container를 set up하는 역할 → Container process로 만들어 실행

Docker 용어

Docker images: 애플리케이션과 필요한 모든 종속성을 포함한, 컨테이너 실행을 위한 읽기 전용 템플릿(host machine의 OS kenrel 공유)

Container: Image를 기반으로 격리된 환경에서 일관되게 실행할 수 있도록 하는 가상화된 실행 단위

Docker Hub: 이미지를 저장하고 공유할 수 있는 온라인 저장소

명령어 모음

docker pull: Docker Hub와 같은 repository로부터 image를 다운

docker images: 저장된 이미지 목록

dockeer run: 새로운 컨테이너를 실행 (이미지 없으면 자동 다운) (-itd, —name)

docker ps: 현재 실행중인 컨테이너 목록

docker exec: 이미 실행 중인 컨테이너 내에서 새로운 명령 실행

docker stop: 실행중인 컨테이너 중지

docker kill: 실행 중인 컨테이너를 즉시 종료 → 즉시 종료

docker rm: 중지된 컨테이너 삭제

docker rmi: 이미지 삭제

dockerfile

docker image를 만들기 위해 실행하는 command들을 모아 둔 text 파일(text파일이라 크기가 작다)

FROM: base image 지정

ADD: 파일들 복사 (copy와 비슷하지만 URL 사용 가능)

RUN: base image 위에 추가 SW 계층 설치

CMD: container 안에서 실행하려는 command

ENETRYPOINT: CMD와 유사하지만 생략할 수 없게 할 때 사용

ENV: envrioment 변수 지정

Docker volume

Container는 cgroups(control groups)에 의해 자신만의 OS 자원 사용. in-memory 파일시스템 사용

→ 컨테이너가 종료되어도 데이터가 사라지지 않고 호스트 기계에 저장되도록 마운트

명령어

docker volume ls: 모든 volume 목록

docker volume inspect : 특정 volume의 상세정보

docker volume rm : 특정 volume 삭제

종류

host volume: 호스트의 특정 디렉토리를 컨테이너와 공유

**docker run -v /path/on/host:/path/in/container my_image**

anonymous volume: docker가 자동으로 생성하고 관리

docker run -v /path/in/container my_image

named volume: 사용자가 이름을 지정하과 관리

docker run -v my_named_volume:/path/in/container my_image

Docker Compose

  • 멀티 컨테이너 앱들을 위해 개발된 도구
  • YAML 파일로 구성됐다

Docker-Compose명령어

docker-compose up -d: docker-compose.yml파일에 정의된 서비스를 실행

docker-compose stop: docker-compose 파일에 정의된 컨테이너 중지

docker-compose down: docker-compose 파일에 정의된 모든 컨테이너, 네트워크, 볼륨 등을 중지하고 제거

depends on: 2개의 컨테이너로 구성되어 있을 때 변경 사항을 전달

Docker network

Bridge: 동일한 Docker 호스트에서 여러 컨테이너 간 통신이 필요할 때 (가상화된 L2 스위치 역할)

Host: 컨테이너가 Docker 호스트의 네트워크 스택과 격리되지 않아야 할 때.

Overlay: 여러 Docker 호스트에서 실행되는 컨테이너가 통신해야 하거나, 스웜 서비스를 사용할 때

Macvlan / Ipvlan: 컨테이너를 물리적 호스트처럼 보이게 해야 할 때

Third-party plugins: Docker를 특수 네트워크 스택과 통합해야 할 때

명령어

docker network ls: 생성된 모든 네트워크 목록

docker network inspect : 특정 network에 대한 상세 정보 → Json 형식으로 출력

JSON: key-value pairs

Virtualization

VXLAN: IP 계층 위에서 멀티포인트 Ethernet 터널링을 제공하는 프로토콜
NVGRE: Generic Routing Encapsulation을 사용한 네트워크 가상화

→ 언더레이 네트워크와 컨테이너/VM 사이를 연결하는 오버레이 가상화 드라이버

Namespaces and Cgroups in Linux

Namespaces: 시스템 요소들을 경계를 긋고 제한하는 메카니즘

Cgroups: 각 프로세스 그룹에 OS 자원을 배정하고 측정하는 커널 장치

마무리

해당 내용은 대학 강의록과 구글링 결과를 정리해둔 것으로 정확하지 않을 수 있습니다.

profile
열정으로 가득할 페이지

0개의 댓글