Docker Container

Jung Yun Kim·2021년 7월 20일
0

개발하다보면 환경설정을 해야할 때가 있는데
이럴떄 Docker와 Docker-compose 로 개발환경을 만들어 사용하곤 한다.

Docker는 레시피
build의 결과물 image는 음식
Docker-compose는 한상차림 레시피 라고 생각하면 될듯하다.

살짝 내부구조를 맛을 보면
cgroups(Control Groups)과 namespaces를 이용하여 격리된 구조와 제한된 자원을 관리한다.

Cgroups(Control Groups)

자원에 대한 제어를 가능하게 한다.

  • Cpu
  • 메모리
  • IO
  • 네트워크
  • dev 장치들

namespaces

각 컨테이너의 독립적인 공간을 만들기 위한 기술

  • mnt (파일시스템 마운트): 호스트 파일시스템에 구애받지 않고 독립적으로 파일시스템을 마운트하거나 언마운트 가능
  • pid (프로세스): 독립적인 프로세스 공간을 할당
  • net (네트워크): namespace간에 network 충돌 방지 (중복 포트 바인딩 등)
  • ipc (SystemV IPC): 프로세스간의 독립적인 통신통로 할당
  • uts (hostname): 독립적인 hostname 할당
  • user (UID): 독립적인 사용자 할당

nsenter(namespace enter)

namespace에 접근하게 할 수 있는 명령어
docker exec 와 비슷

다른 운영체제에서는?

Q. Linux에서는 namespaces 와 cgroups로 컨테이너를 만들 수 있는데 맥이나 Windows에서는 어떻게 할까?
A. Windows에서는 Linux-vm을 통한 Linux컨테이너 실행 or Hyper-v의 격리를 통한 Linux컨테이너 실행
Mac에서도 마찬가지로 Linux-vm을 설치하여 Linux컨테이너를 실행하는 구조

출처
https://tech.ssut.me/what-even-is-a-container/

0개의 댓글