
Git에 이어, 두번째로 많이 사용하는 Dev Tool은 Docker이다.
이제는 정말 필수가 되어버린 Docker
기존, 로컬에서 개발해서 실 서버에 올릴 때 소스파일만 올리는 것으로는 문제가 있었다.
js를 예로 든다면, js소스 파일을 구동하기 위해서는 npm, node.js, 각종 Dependencies등 을 설정 해야한다.
개발자의 PC마다, 서버마다 이 모든것들을 설치하는것은 번거롭기도 하고, 오류의 발생의 원인이 되곤 한다.

내 서버에 node.js가 있고 서버에도 node.js가 있으니 내 서버에서 개발한 js 파일을 서버에 배포하면 자동으로 동작하겠지?
배포 → 에러가 발생 → 내 PC에선 잘되는데 서버에선 왜 안돼!!! -> node.js의 버전이 맞지 않기 때문에 발생
이러한 문제점을 해결하기 위해 Docker가 탄생!
도커란 어플리케이션을 패키징 할 수 있는 툴

컨테이너라고 불리는 하나의 작은 소프트웨어 유닛안에,
우리의 어플리케이션과 그에 필요한 시스템 툴, 환경설정, 모든 디펜던시를 하나에 묶어서,
다른 서버, 다른 PC 그 어떤곳에도 쉽게 배포하고 안정적으로 구동할 수 있게 도와주는 툴이다.

어플리케이션과 어플리케이션이 구동하는데 필요한 모든 것들을 도커 컨테이너에 담아 저장한 후,
어플리케이션을 구동하고 싶은 서버에 해당 도커 컨테이너를 다운받는다면, 어떤 PC에서도 동일하게 구동할 수 있다.
내 PC에서는 되는데 왜 니 PC에서는 안되니?
어플리케이션을 구동하는데 필요한 이것 저것들을 설정하고 준비해야하는 번거로움
을 해결해주는 정말 유용한 패키징 툴이다.
뭐야.. 그럼 VM이랑 비슷한거 아니야?

(좌) VM, (우) Docker

컨테이너 사용하기 위해서는 만들기 위해서는 총 3가지가 필요 : 도커파일, 이미지, 컨테이너
도커파일을 만들어서 이걸로 이미지를 만들고 만들어진 이미지로 컨테이너를 구동 할 수 있다.
Dockerfile : 컨테이너를 어떻게 만들어야 하는지에 대한 설명서. 아래와 같은 내용을 포함Image : 어플리케이션을 실행하는데 필요한 코드, 런타임, 환경, 시스템 툴, 시스템 라이브러리등이 포함Container : Image를 고립된 환경에서 개별적인 시스템 안에서 실행할 수 있는 공간어떻게 Cotainer 배포할 수 있나? = 어떻게 Image를 공유할 수 있나?
Git과 GitHub를 사용해봤다면 익숙할테다.


도커는 public과 private이 있다.
개인 사용자들은 docker hub를 가장 많이 사용하고 있지만,
회사에서는 private한 docker를 사용하는데, aws나 google Cloud등에서 docker 서비스를 제공하고 있다.
