도커는 컨테이너 기술이다. 컨테이너를 만들고 관리하는 도구를 도커라고 보면 된다.
컨테이너는 소프트웨어의 표준화된 단위이다. 우리가 짠 코드와 코드 실행에 필요한 dependencies의 묶음이다.
예시를 들어보면 컨테이너는 피크닉을 갈 때 사용할 수 있는 피크닉 배스킷이라 할 수 있다. 우리가 짠 코드를 피크닉에서 먹을 수 있는 음식들이라 생각하고 그 음식을 먹을 수 있도록 도와주는 접시나 도구들이 코드에 필요한 dependencies라고 생각하면 된다. 즉 basket만 있다면 어디서든 피크닉을 즐길 수 있는 것이다.
그럼 왜 독립적이고 표준화된 "application packages"가 필요할까?
여기서 말하는 환경은 런타임, 언어, 프레임워크 등을 말한다.
즉, 개발과 배포
팀원간
프로젝트간
서로 다른 환경을 가지고 있어 골치가 아프다.
위 문제를 해결할 수 있도록 해주는게 컨테이너 기술이고 도커는 이 컨테이너 기술을 도와주는 툴이다.
그럼 내 OS 위에 가상 OS를 프로젝트마다 띄우면 해결할 수 있는 문제 아닌가?
컨테이너마다 코드와 디펜던시만 가지고 있다면 어플리케이션마다 다른 환경 설정을 가능하게 한다.
비교하자면
Docker Containers | Virtual Machines |
---|---|
OS에 거의 영향을 미치지 않음. 빠르고 적은 디스크 공간 사용 | OS에 큰 영향. 느리고 많은 디스크 공간 사용 |
공유, re-building, distribution이 쉬움 | 공유, 리빌딩, distribution이 어려움 |
machine 전체 대신 앱과 환경만 encapsulation | "whole machines"를 캡슐화 |
개발 환경이 제각각인 문제를 해결해주는 기술 중 하나가 컨테이너 기술이고 이를 도와주는 툴인 도커에 대해 알아봤다.
현재 사용중인 OS는 윈도우이지만 10 Edu 버전을 사용중이다. 도커 desktop으로 도커 엔진을 실행하고 도커 허브와 도커 콤포즈에 대해 배우고 실습 중에 있다. 나중엔 쿠버네티스에 대해 알아볼 것이다.
유데미 Academind
도커 공식 문서 https://docs.docker.com/