도커(Docker)란?
- 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼
- 여기서 도커의 핵심개념은 바로 이미지와 컨테이너라는 개념이다.
- 하나의 컴퓨터에 설치된 리눅스 운영체제에서 완전히 분리된 별도의 리눅스 시스템을 운영할 수 있는 기술
- CPU, 메모리, 네트워크를 분리하여서 마치 별도의 시스템처럼 사용할 수 있는 기술
그럼 우선 컨테이너에 대해 먼저 알아보자!
컨테이너란?
- 어떠한 어플리케이션을 작동시키기 위해 필요한 라이브러리나 의존성, 설정과 같은 것들을 하나로 모아서 별도의 서버인 것처럼 사용할 수 있게 만든 것을 의미
그렇다면 컨테이너와 VM의 차이는 무엇일까?
물론 둘 다 애플리케이션을 구동하는 데 필요한 것을 지니고 실행에 도움을 준다는 것을 알고 있다.
VM(가상머신)
우선 위의 사진처럼 가상머신을 먼저 보면
가상머신은 실제로 호스트OS위에서 각각의 Guest OS가 분할해서 올라가 있는 것처럼 가상화 방식을 이용함
하지만 VM의 방식은 하나의 OS자원을 Guest OS가 나눠쓰기 때문에 무겁고 느려서 서비스를 운영할 때 좋은 방법이 아니다.
그래서 이를 대체한 것이 바로 도커 컨테이너 개념이다.
도커
위의 사진이 바로 도커인데 도커를 자세히 보면 VM과 차이가 있다.
바로 App1, App2, App3의 컨테이너가 각각 시스템에 올라가 있는데 Container Engine위에 있는 것을 볼 수 있다.
VM과 도커의 차이는 VM은 운영체제를 포함하고 있고, 도커는 운영체제를 포함하지 않고 애플리케이션을 각각 실행한다는 차이가 있다.
여기서 하이퍼바이저 기반의 가상화(VM방식)과의 차이는 애플리케이션 마다 OS를 개별로 구성할 필요없이 하나의 OS커널을 공유하기 때문에 크기가 작고 가볍다는 장점이 있다.
다만 공유하는 OS커널에서 장애가 발생하면 다른 컨테이너들에게도 영향이 미친다는 단점이 있다.
여기서 Container Engine가 바로 도커이다!
다시 도커에 대해 자세히 알아보자
도커의 구성요소
- 도커 파일
- 컨테이너를 어떻게 생성해야되는지 방법이 적혀있음
- 필요한 파일이 무엇인지?
- 어떤 프레임워크나 lib를 설치해야하는지 외부 의존성 명시
- 필요한 환경변수 설정
- 어떤 식으로 구동해야하는지 설명
- 도커 이미지
- 도커 파일을 통해 도커 이미지를 생성가능
- 이미지에는 애플리케이션을 구동하는데 필요한 모든 정보가 있다(ex: app.js, Dependencies,프레임워크 버전, 설정 등등)
- 생성된 이미지는 변경이 불가능하다.
- 컨테이너를 만드는데 사용되는 읽기 전용 템플릿
- 컨테이너
- 이미지를 이용해서 애플리케이션을 구동하게끔 도와줌
- OS라고 할 수 있음
- 도커 이미지를 실행한 상태
작동 방식
- 애플리케이션 구동에 필요한 DockerFile을 작성한다.
- DockerFile을 빌드해서 애플리케이션을 스냅샷할 수 있는 도커 이미지를 생성한다.
- 이미지를 컨테이너 저장소에 업로드한다.
- 서버에서 컨테이너 저장소에서 컨테이너를 서버에 가져와서 실행시킨다.
도커 컴포즈
- 단일 서버에서 여러개의 컨테이너를 하나의 서비스로 정의해서 묶음으로 관리할 수 있는 작업환경을 제공하는 관리 도구
도커 컴포즈 장점
여러 개의 컨테이너를 사용해야할 때 하나의 컨테이너로 묶어서 시스템구성을 간편하게 할 수 있기 때문이다.