도커
도커는 리눅스의 응용 프로그램들을 프로세스 격리 기술들을 사용해 컨테이너로 실행하고 관리하는 오픈 소스 프로젝트입니다.
다양한 프로그램 및 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순하게 해줍니다.
컨테이너
컨테이너란 프로세스 격리 기술로, 사용자가 사용할 프로그램과 환경 설정들이 컨테이너에 담겨 격리되어 실행되는 것입니다.
여기에는 코드, 런타임, 시스템 도구, 시스템 라이브러리 등 서버에 설치되는 무엇이든 포함될 수 있습니다. 컨테이너는 실행 중인 환경에 관계 없이 언제나 동일하게 실행될 것을 보증합니다.
왜 도커를 쓰나요 ?
-애플리케이션의 개발과 배포가 편해집니다.
독립된 개발 환경을 보장하고, 각각의 개발환경의 통합을 지원합니다
Container 내부 작업을 배포하기 위해서는 해당 Container를 docker image라는 하나의 패키지로 만들어 운영 서버에 전달하기만 하면 됩니다. 서비스를 개발했을 때의 환경을 다른 서버에서도 똑같이 복제할 수 있기 때문에
각종 라이브러리 설치 등으로 인한 의존성을 걱정할 필요가 없습니다.
컨테이너와 VM의 차이
VM : 무거운 운영체제(kernel)를 포함합니다. 호스트 운영체제와 게스트 운영체제의 기능 중복으로 인해 약 10 ~ 20% 의 오버헤드 (Overhead) 를 갖습니다.
컨테이너 : 운영체제를 포함하지 않고 HOST OS를 공유합니다. 운영체제 위에 또 다른 운영체제를 구동하지 않아도 되며, 리소스도 공유해서 사용하므로 오버헤드는 3 ~ 5% 이내입니다.
컨테이너 build 과정
1. dockerfile 생성
이미지를 만들기 위한 틀입니다.
파일과 dependencies, 필요한 환경변수 등을 명시합니다.
2. image 생성
컨테이너를 찍어내는 틀로, 클래스와 비슷한 개념입니다. 이전단계에서 완성한 dockerfile 을 이용해서 이미지를 만들어 냅니다.
어플리케이션을 실행하는데 필요한 코드 뿐만아니라 모든 셋팅이 포함되어 있습니다. 실행되고 있는 프로그램을 급속냉각한 것 과 비슷합니다.
3. container구동
이미지를 고립된 환경에서 실행할 수 있게 해 줍니다.
docker-compose : 거시적 설계도
Docker compose란, 여러 개의 컨테이너로부터 이루어진 서비스를 구축, 실행하는 순서를 자동으로 하여, 관리를 간단히하는 기능입니다.
간단하게 말하면, 여러개의 컨테이너를 관리하는 큰 설계도입니다.
Docker compose 생성 과정
1. Dockerfile을 작성하여 이미지를 생성합니다.
2. docker-compose.yml을 작성한다. 여기에는 Docker컨테이너에 관한 실행 옵션이 기재됩니다.
3. docker-compose up 커맨드를 실행하여 docker-compose.yml으로 정의한 컨테이너를 개시합니다.
다음시간부터는 실제로 dockerfile을 만들어보는 실습을 진행하도록 하겠습니다.