Docker

개요


42서울에서 inception과제에서는 도커를 사용한다.

도커가 뭘까?




도커


도커는 리눅스 컨테이너에 여러기능을 추가해서 앱을 컨테이너로서 좀더 쉽게 사용할 수 있게 만들어진 오픈소스 프로젝트이다.

도커는 Go언어로 작성돼있다. 도커와 관련된 프로젝트는 많다. 그러나 보통 도커라고 하면 도커엔진을 의미한다.

도커 엔진은 컨테이너를 생성하고 관리하는 주체로 컨테이너를 제어하고 다양한 기능을 제공하는 것이다.

도커 엔진에서 사용하는 기본 단위는 이미지와 컨테이너이며 도커의 핵심이다.

도커를 사용하면 앱 개발과 배포가 편해질 뿐만 아니라 어플들간의 독립성과 확장성이 높아진다.




도커 이미지


이미지는 컨테이너를 생성할 때 필요한 요소이며, 가상 머신을 생성할 때 사용하는 iso 파일과 비슷한 개념이다.

이미지는 여러개의 계층으로 된 바이너리 파일로 존재하고, 컨테이너를 생성 및 실행할 때 읽기 전용으로 사용된다.

도커 명령어로 다운받을 수 있으므로 별도로 설치할 필요는 없다.




도커 컨테이너


도커 이미지는 기본적인 리눅스 운영체제부터 아파치, MySQL등 각종 앱들이 있다.

이러한 이미지로 컨테이너를 생성하면 해당 이미지의 목적에 맞는 파일이 들어있는 파일시스템과 격리된 시스템 자원 및 네트워크를 사용할 수 있는 공간이 생성된다.

이 공간을 도커 컨테이너라고 부른다.

컨테이너는 이미지를 읽기 전용으로 사용하되 이미지에서 변경된 사항만 컨테이너 계층에 저장하므로 컨테이너에서 뭘해도 이미지는 영향이 없다.




도커 볼륨


도커 이미지로 컨테이너를 생성하면 이미지는 읽기 전용이 되며 컨테이너의 변경 사항만 별도로 저장해서 각 컨테이너의 정보를 보존한다.

그래서 컨테이너를 삭제하면 컨테이너 계층에 저장되있던 정보들도 삭제된다는 단점이 있다.

이를 방지하기 위한 방법중 하나가 볼륨이다.

호스트와 볼륨을 공유하거나 볼륨 컨테이너를 따로 만들어 활용할 수도 있고 도커가 관리하는 볼륨을 생성할 수도 있다.




도커 컴포즈


여러개의 컨테이너가 하나의 어플로 동작할 때 이를 테스트 하기 위해서 각 컨테이너를 하나씩 생성해야한다.

그래서 컨테이너를 계속 생성하는 것보다는 여러개의 컨테이너를 하나의 서비스로 정의해 컨테이너 묶음으로 관리하는 것이 나왔다.

도커 컴포즈는 여러개의 컨테이너의 옵션과 환경을 정의한 파일을 읽어 컨테이너를 순차적으로 생성하는 방식이다.

도커 컴포즈의 설정 파일은 run 명령어의 옵션을 그대로 사용할 수 있으며, 각 컨테이너의 의존성, 네트워크, 볼륨등을 함께 정의할 수 있다.

따라서 컨테이너의 수가 많아지고 정의해야할 옵션이 많아진다면 도커 컴포즈를 사용하는 것이 좋다.

도커 컴포즈는 컨테이너의 설정이 정의된 YAML 파일을 읽어 도커 엔진을 통해 컨테이너를 생성한다.