1. 가상화
1) 정의
- 일일이 부팅할 필요 없이 물리적 머신(자원) 위에 여러 가상 머신(OS, 소프트웨어 등)을 띄워서 쓰는 것을 말한다.
2) 왜 사용하는가?
- 한 대의 컴퓨터에 한 가지 일만 시키기에는 남는 자원이 있다. 남는 자원을 효율적으로 사용하기 위해서 가상화 기술을 사용한다.
3) 도커와 기존 가상화(Hypervisor)의 차이점
- 하이퍼바이저: Host OS 위에 Guest OS와 APP을 함께 가상화 한다. Guest OS 또한 가상화 하기 때문에 매우 무겁다.
- 도커: Guest OS가 없이 APP 실행에 필요한 파일을 image에 담아 가상화하여 APP을 실행할 수 있다.
2. Docker
1) 정의
- 컨테이너 가상화 기술이자 회사명이다.
- 도커가 등장하기 전에 여러 OS에서 개발하기 때문에 개발한 OS에서는 돌아가지만 다른 OS에서는 돌아가지 않은 경우가 많았다.
- 컨테이너 가상화 기술을 통해서 다른 OS에 배포를 해도 잘 돌아갈 수 있게 되었다.
2) 구조
- Client
- Docker Daemon
- image 생성
- image pull
-
- Docker Registry
- Container: pull한 image를 기반으로 만들어진 서버
3) 컨테이너
-
도커의 전체적인 모습은 카세트와 카세트 플레이어이다.
- 도커 이미지: 카세트 테이프
- 도커 데몬(서버): 카세트 플레이어
- 컨테이너: 이미지인 카세트 테이프를 카세트 플레이어에서 재생하여 나오는 결과물
-
컨테이너의 프로세스: 단일 프로세스로 동작한다. 프로세스의 작업이 종료되면 컨테이너도 종료된다. 음악 재생이 모두 끝나면 종료되는 것과 마찬가지이다.
-
일일이 배포하던(기초 세팅, git clone, runserver 등)을 이미지를 다운받아 컨테이너 실행하는 것만으로 배포를 자동화할 수 있다.
4) Dockerfile
- 정의: 커스텀으로 도커 이미지를 작성한 것
- FROM ~ : 도커에서 제공하는 공식 이미지(python3 등)
- CMD: 컨테이너 내에서 실행될 커맨드
도커 이미지 빌드 명령어
docker build -t {name} {Dockerfile 디렉토리}