개념
도커란, 컨테이너 기반의 오픈소스 가상화 플랫폼이다.
도커(Docker)는 리눅스의 응용 프로그램들을 소프트웨어 컨테이너 안에 배치시키는 일을 자동화하는 오픈 소스 프로젝트이다.
컨테이너는, 우리가 쉽게 생각하는 배에 싣는 화물 수송용 컨테이너와 같은 개념이다. 필요한 구성품들을 컨테이너에 담아, 격리되어진 환경을 만든다.
풀어서 정리
각 각의 컨테이너들이 자신들의 고유한 화물들을 가지고 있고, 그 컨테이너 안에 격리되어져 있다.
도커 또한 하나의 고유한 컨테이너환경(오픈소스 가상화)환경으로, 원하는 형태의 컨테이너를 하나의 서버에서 독립적으로 관리가 가능하다.
리눅스 환경에서 개발 환경을 직접 구축해본 사람이라면, (apm , node.js, django 등) 생각보다 구축해주어야 하는 환경세팅 단계가 많다.
docker라는 기술을 통해서, 인프라관리 혹은 빌드작업의 어려움에서 벗어나서 안정적이고 동일한 환경의 어플리케이션 관리 + 개발 효율성 증대가 가능하게 될 것 이라고 생각한다.
Hypervisor GUEST OS유무가 가장 큰 차이다
정리하자면,
VM은 하드웨어 수준의 가상화
Container는 운영체제 수준의 가상화
마이크로서비스란 어떤걸 말하는 걸까?
이러한 서비스들이 하나의 소스로 관리되어진다면 어떨까?
마이크로 서비스는 이러한 어려움을 해소하기 위해 제시하는 서비스 아키텍쳐 구조이다.
위처럼, 네이버를 서비스 단위로 쪼갤 수 있다. 하지만, 각 서버를 실제 VM단위로 관리한다면, 프로젝트 전체를 관리하는 것에 여러 문제가 생긴다.
도커는 이러한 부담감을 줄이면서, 마이크로서비스 아키텍쳐를 디자인 할 수 있다.
매번 개발 서버를 손수 빌드할 필요가 전혀 없다.
docker명령어 한 줄이면 원하는 어플리케이션 서버를 손쉽게 빌드가능하다.
컨테이너 빌드자체를 진행하면서 생기는 사전이슈들 (example) 프레임워크의 라이브러리 버젼 호환성 문제, 장고의 마이그레이션 충돌) 등과 같은 문제에 대해 사전 확인이 가능해 진다.
가상서버단위가 아닌 컨테이너 단위로, 자신이 원하는 형태의 서비스 아키텍쳐 구성이 가능하다.
docker-hub에 다양한 기술스택의 official컨테이너들이 존재하고, 이를 활용하여 취향에 맞는 개발환경, 어플리케이션 환경을 만들 수 있다.
특정 개발환경에 대한 이해도가 없으면, dockerfile스크립트를 작성하는 것이 힘들다.
소스의 형상관리에 더하여 dockerfile의 관리가 함께 요구되어진다.
(배포 환경 설정에 대한 형상 관리도 개발되어지는 내용에 따라 반영이 되어져야 함)
이해도 없이 배포되어지고 있는 컨테이너를 스크립트 분석없이 빌드하여 컨테이너에서 사용하게 되는 경우, 추후 빌드문제가 생겼을 때에 원인을 해결하는 것이 매우 힘들다.
(도커환경은 개발팀에서 직접 만드는 것이 정신건강에 이롭다)
window버젼 10 이상 (필요)
x64 시스템의 경우: 버전 1903 이상, 빌드 18362 이상
ARM64 시스템의 경우: 버전 2004 이상, 빌드 19041 이상
최신자 버젼에서는 윈도우 전용 docker어플리케이션을 공식 홈페이지를 통해서 사용 할 수 잇다.
우분투 18.04 이상 (권장)
공식 페이지에서는 ubuntu 터미널 명령어를 통해 안정화 버젼을 설치할 수 있도록 친절히 설치안내 페이지를 제공한다.
dockerfile이란?
도커에서 실제 컨테이너환경을 만들 때 쓰는 컨텍스트 파일이다.
익숙한 용어로 말하면 설계도와 같은 느낌인데, 가장 기본적인 이미지의 구성단계라고 생각하면 좋다.
docker build .
를 실행하게 되면, 현재 디렉토리 내에 있는 dockerfile을 읽어들여 이미지 파일을 생성한다.
만들어진 이미지파일을 docker run
명령어 통해 자신이 설계한 형태의 컨테이너 환경을 사용 할 수 있다.
docker-compose란?
도커에서 만들어진 별도의 컨테이너들을 한번에 빌드하고, 의존성을 만들 수 있도록 설정하는 docker명령어 이다.
보통 메인이 되어지는 어플리케이션 서버는 dockerfile로 별도의 컨테이너로 관리하고, 나머지 데이터베이스, 별도의 캐싱처리를 하는 서버 (redis)의 경우에는 공식 컨테이너를 활용하여, 한번에 빌드를 하는 방식으로 개발을 진행한다.
도커 기본 개념 짚고 넘어가기
https://pearlluck.tistory.com/119?category=854935
가볍게 vm과 container비교하기
https://medium.com/@darkrasid/docker%EC%99%80-vm-d95d60e56fdd