[Docker] 도커 특강
키워드
Host OS, Guest OS, 쿠버네티스
# 가상화
물리적으로 운영하는 비용이 많이 들기 때문에
여러 서버 환경을 하나의 PC에서 사용할 수 있도록 한다.
=> 할당받은 리소스 이상을 사용할 수 없다.
# 하이퍼바이저 가상화 (VM)
: 하이퍼바이저(하나의 커널)를 통해 Host OS와 Guest OS가 system call을 주고 받아 interaction한다.
장점
1. 머신들과의 완전한 독립
단점
1. 하이퍼바이저 자체가 하나의 커널이기 때문에 무겁다. 배포하기 쉽지 않다.
# 컨테이너 가상화
컨테이너: Docker가 아닌 리눅스 컨테이너에서 파생된 개념이다. 배포, 환경을 규격화 시켰다.
장점
1. 컨테이너는 독립적이다.
2. Host OS의 커널을 컨테이너가 공유하여 사용하기에 가볍다.
# 하드웨어 레벨의 가상화(하이퍼바이저) vs 운영체제 레벨의 가상화(컨테이너)
하이퍼바이저: Guest OS가 커널을 가지고 있기에 여러 개의 프로세스를 동작시킬 수 있다.
컨테이너: Guest OS 하나당 하나의 프로세스를 동작시킨다.
# 도커
: 클라이언트-서버 모델이다. 내부적으로 클라이언트와 도커 데몬(서버) 사이에 API를 통해 통신한다.
# 이미지와 컨테이너
이미지: 프로그램(정적인 리소스)
컨테이너: 프로세스(엔티티)
이미지를 기반으로 프로세스를 만들 수 있다.
컨테이너에 메타데이터를 덮어씌울 수 있다.
쿠버네티스: 컨테이너를 관리해주는 기술. migration 등
커밋: 현재 컨테이너 상태를 스냅샷으로 저장.(이미지)
키워드
IaC
IaC: 문법에 맞게 코드를 작성해두면, 프로그램(도커)이 코드를 읽어서 동일한 환경을 세팅해준다.
# 이미지 빌드
빌드 컨텍스트에 여러 layer, 파일이 복사된다.
이후, COPY를 통해 임시 컨테이너(베이스 이미지)에 필요한 정보만 copy후 커밋됨.
COPY [빌드 컨텍스트] [임시 컨테이너]
# docker build
: 이미지를 빌드한다.
# docker run
: 컨테이너를 실행한다. 이때, 오류가 나더라도 컨테이너가 생성되기 때문에 rm 해줘야 한다.
[-d]: 백그라운드 실행. 로그를 보지 않고 추가로 명령어 입력이 가능하다.
[-p]: 포트 지정.
키워드: NAT, 포트 포워딩, docker compose, 쿠버네티스
# 도커 내부 사설망(IP, 포트)
도커에는 NAT가 자동으로 적용되어 있다. 하지만 포트 포워딩은 직접 해줘야 함.
-p 8080:3000 => 8080포트를 3000포트(도커 내의 포트)로 바꿔라.
# docker network
사설망을 추가로 생성할 수 있다. 초기에는 bridge 네트워크를 default로 사용한다.
# Docker compose
.yml: 야믈 파일