어떤 문제를 해결하기 위해 Docker 가 등장했을까
실무에 투입되거나 취업을 하거나 하면 혼자 코딩하지 않는다.
혼자 코딩을 하더라도 이 소스 코드를 결국 클라우드 같은데다 올린다.
어딘가 서버에 올려서 다시 배포를 해야한다.
프로그램을 만들게 되면 여러 개의 컴퓨터에서 사용해야하는 상황이 온다.
여러 개의 컴퓨터에서 우리가 구동할 수 있어야 한다.
내 컴퓨터에서는 잘 되는데 작업물을 누군가에게 보내면 그 사람의 컴퓨터에서는 실행이 안되는 경우들이 있다.
환경이 다름에서 오는 같은 프로젝트가 잘 안되서 실행조차 못하거나 오랜 시간이 걸리는 상황이 많이 발생을 해서 굉장히 많은 솔루션들이 등장했다.
현대 세상에는 멀티 플랫폼이라는 문제가 있다. ex) 맥, 윈도우, 리눅스
전부다 환경이 다르다. 그렇기 때문에 각각의 플랫폼별로 무언가 설치를 하거나 환경을 설정해야 되는 요소들이 굉장히 다르다.
이것이 문제의 시작점이다.
그리고 반복되는 설치 과정도 문제이다.
nodejs 설치 -> yarn 설치 -> nestjs CLI 설치 -> postgreSQL 설치 -> MongoDB 설치 -> 각종 환경변수 작업들
이런것을 반복적으로 한다면 지루하고 시간을 낭비한다는 생각을 하게될 것이다.
그래서 도커는 Dockerfile 을 만들었다.
위에서 언급한 설치 절차들을 따라서 실행을 하게 되면 무조건 프로젝트는 실행이 된다 라는 정의를 할 수 있는 것이 Dockerfile 이다.
Dockerfile 을 작성한 후에 도커라는 프로그램에 실행만 시키면 된다.
윈도우든 맥이든 리눅스든 어디에서든 항상 똑같은 환경에서 똑같은 조건대로 프로그램을 실행할 수 있다.
그래서 배포와 CICD에 굉장히 큰 혁신들이 많이 생겼다.
그래서 도커를 현대에서 굉장히 잘 숙지하고 있어야하고 잘 배워야 하는 요소이다.
나중에 kubernetes 를 배우게 되면 이것도 도커의 개념이 기반이 되어 있다.
도커는 한마디로 예기하면 특정 프로그램을 실행할 때 필요한 환경과 패키지들 그리고 명령어들을 하나의 컨테이너 Dockerfile로 묶어 어떤 환경에서든 도커만 설치되어 있으면 똑같은 조건속에서 해당 컨테이너를 실행할 수 있도록 해주는 것이다.