Docker
Container / Docker
Container란?
- 애플리케이션이 다른 컴퓨팅 환경으로 빠르게 안정적으로 실행되도록 코드와 모든 종속성을 패키징하는 단위이다.
- 가상화 기술을 통해 애플리케이션과 개발 환경을 격리된 공간에서 실행하는 단위
Docker란?
- 동일한 OS 계층 위에서 실행되는 도커는 컨테이너 배포에 필요한 대부분의 모든 기능을 제공하는 플랫폼이다
- 다양한 환경에서의 실행을 보장하며 컨테이너 이미지 패키징을 통한 배포가 쉬우며 경량화 되있고 자원 효율성이 뛰어나다.
- 유연성 ↑ 이식성 ↑ 운영비효율 ↑
Docker 사용 이유
- 기존 VM을 통한 가상화 배포 방식은 각각의 OS를 사용 했기 때문에 무거웠으며, 많은 리소스가 소비 된다.
- 아래 그림은 서로 다른 차이점을 나타낸 그림이다.
가상머신 배포 환경
도커 배포 환경
Docker의 핵심 기능
- 도커 컨테이너는 가상화 공간을 생성 할 때 리눅스 자체 기능 사용을 통해 프로세스 격리단위 환경을 만드므로 성능 손실이 없다.
- 커널을 공유해서 사용하고, 컨테이너 내부에는 라이브러리 및 실행 파일만 있으므로 용량이 작다.
Docker의 구성 요소
Docker Client :
- 명령어를 통해 컨테이너 실행 및 관리 등 할 수 있으며, 이미지를 빌드하거나 다운로드가 가능하다.
Docker HOST :
- 컨테이너를 실행하는데 있어 사용 되는 가상머신이다.
- 클라이언트로부터 요청을 받고 컨테이너 실행, 시작, 중지, 제거 등 작업을 수행한다.
Docker Demon :
Docker Registry :
- 도커의 이미지를 관리하고 저장하는 중앙 집중식 저장소이다.
- 독립적인 레지스트리를 구축하여 이미지를 안전하게 저장하고 관리할 수 있다.
Docker Image
- 컨테이너화 된 앱을 실해 시키기 위한 모든 필요한 파일과 환경설정, 종속성 등을 포함한 독립적인 경량화 된 패키지이다.
- 도커 이미지는 불변의 상태이고 컨테이너와 1 : N 을 관계를 갖는다. 즉, 1개의 이미지로 여러 개의 컨테이너를 생성할 수 있다.
Docker Image의 구성 요소
베이스 이미지 :
- 다른 이미지를 기반할 수 있다. 예를 들면, ubuntu, node, python 등의 이미지를 베이스로 적용하여 새로운 도커 이미지를 생성할 수 있다.
레이어 :
- 도커 이미지는 여러 레이어로 구성 되는데, 각 레이어는 파일 시스템의 변경 사항을 포함한다. (추가, 수정, 삭제 등)
- 이미지가 업데이트 될 때 마다 새로운 레이어가 추가 된다.
Docker File :
- 도커 이미지를 생성 및 빌드하기 위한 사용되는 스크립트 파일이다.
- 이미지 빌드 과정을 단계 별로 정의하고, 이 각 단계는 하나의 레이어를 생성한다.
단계 별로 도커 이미지 빌드 생성하기
- Docker File
# 베이스 이미지로 Node.js를 사용합니다.
FROM node:14
# 애플리케이션 디렉토리를 생성합니다.
WORKDIR /usr/src/app
# 애플리케이션의 종속성을 설치합니다.
COPY package*.json ./
RUN npm install
# 애플리케이션의 소스 코드를 복사합니다.
COPY . .
# 애플리케이션이 바인드할 포트를 명시합니다.
EXPOSE 8080
# 애플리케이션을 실행합니다.
CMD ["node", "app.js"]
- 해당 Docker File을 이미지로 빌드하기 위해서는 다음과 같은 명령어를 입력해야 한다.
docker run -p 8080:8080 -d my-node-app
- 그리고 이제 빌드 된 이미지를 기반으로 도커 컨테이를 생성하고 실행할 수 있다.
docker run -p 8080:8080 -d my-node-app