유투브 드림코딩: 도커 한방에 정리 🐳 (모든 개발자들이 배워보고 싶어 하는 툴!) + 실습
도커 공식 문서: https://docs.docker.com/get-started/overview/
애플리케이션 컨테이너화

- 특정 환경에서 소스코드, 에셋, 라이브러리 파일 등으로 애플리케이션을 빌드한다.
- 빌드한 애플리케이션의 스냅샷을 찍는다.
- 만든 스냅샷을 클라우드에 업로드한다.
- 애플리케이션을 실행할 컴퓨터에서 스냅샷을 내려받아 실행한다.
그러니까 node.js 서버를 배포한다고 하면, 위 그림의 파란 글씨처럼 node v.16에서 내가 적은 App.js를 빌드한 상태를 스냅샷으로 찍는 것이다. 이 때 node package와 asset 폴더에 있는 이미지 등도 함께 들어가게 된다. 이 때, 애플리케이션을 실행할 컴퓨터에는 컨테이너화된 애플리케이션을 실행할 수 있는 환경이 갖추어져야 한다. 이를테면 도커가 설치되어 있어야 한다.
VM과 컨테이너화는 다르다.
- 공통점: Host OS에서 프로그램을 격리시켜 실행할 수 있다.
- 차이점: VM 1개에는 OS 1개가 들어가지만 컨테이너 1개에는 OS가 들어가지 않는다.
장점
- 실행 환경, 의존성 등을 신경쓰지 않고 어느 컴퓨터에서든 똑같은 상태의 애플리케이션을 실행할 수 있다.
- 즉, 분산 컴퓨팅을 매우 편리하게 만들어준다.
- 가볍다. OS 단위가 아닌 애플리케이션 단위로 묶기 때문이다.
Docker
- 애플리케이션 컨테이너화 플랫폼 중 가장 많이 사용되는 오픈소스 프로젝트.
도커 구성 요소
- 도커 파일: 도커 이미지를 빌드하기 위해 필요한 스크립트.
- 이미지: 도커 컨테이너를 만들기 위한 immutable 템플릿. 도커 파일을 사용해 이미지를 만든다.
- 컨테이너: mutable한 이미지의 인스턴스. 도커에서 컨테이너를 생성, 시작, 중단, 이동, 삭제한다.
사용 팁
DockerFile 작성 팁
- 변경이 잦은 부분일수록 아래쪽에 작성한다.
- 도커 이미지는 레이어로 구성된다. 레이어 하나는 도커 파일에 작성된 명령어 한 줄에 대응된다. 도커 이미지 생성 시 레이어를 스택으로 쌓기 때문에, 변경이 잦은 부분일수록 스택의 위쪽에 위치시키면 빌드 타임을 줄일 수 있다.
- 이미지 빌드를 위한 명령어와 컨테이너 실행 직후 실행하기 위한 명령어를 따로 지정할 수 있다.
- 즉, 도커 이미지 빌드 시에는 말 그대로 애플리케이션 빌드까지만 하고, 애플리케이션을 실행하는 코드는
ENTRYPOINT ["npm", "start"]
와 같은 명령어를 사용해서 지정한다.