소스코드 배포처럼 어플리케이션을 개발, shipping하고 실행한다. cpu와 운영체제에 독립적으로 운영하는것을 지향점으로 한다.
한번만든 프로그램을 모든 플랫폼에서 빠르게 실행할 수 있다. 개발이후 production으로 실행하는 과정이 빨라진다. (A.K.A DevOps)
도커파일은 어떤 OS버전을 사용하고 명령어를 수행하라는 내용을 포함하는 IaC이다.
도커파일을 통해서 environment independent한 immutable infrastructure를 구현할 수 있다. 밑단에서부터 필요한 개발도구, 라이브러리, 환경변수 등을 작성하고 도커파일을 토대로 빌드를 수행하면 그 결과로 컨테이너 이미지를 얻는다. 컨테이너 이미지는 code, runtime, library, 환경변수등을 전부 포함한다.
컨테이너는 이미지의 runtime instance이다
docker build를 수행하면 docker image를 생성한다
이미지를 run으로 실행하면 컨테이너가 된다.
컨테이너는 컴퓨터의 메모리를 점유하는 프로세스 형태이다.
docker hub에는 최적화된 official 컨테이너 이미지들이 올라와있고 라이브러리처럼 가져다 사용할 수 있다. 도커에서는 소스코드처럼 build, push,pull등의 용어를 사용한다. 소스코드를 빌드하듯이 이미지를 빌드하고 그 이미지를 registry인 docker hub에 올리고 받아와서 사용하는 IaC의 절차는 소스코드를 사용하는 과정과 비슷하다.
도커는 go로 작성된 프로그램이다.
컨테이너들이 독립적으로 동작해서 VM처럼 느껴진다. 컨테이너에게 process, 네트워크, 파일시스템 등을 합쳐서 dedicated된 것과 같은 workspace를 namespace라고 제공해준다.
control group = 엑세스권한
컨테이너간에 서로 엑세스는 금지
하드웨어 자원 논리적인 자원 등도 가상화시켜서 control가능하게 할건지를 개발자가 지정한다.
따라서 개발자 입장에서는 vm과 차이가 없게 느껴진다.