Docker

소스코드 배포처럼 어플리케이션을 개발, shipping하고 실행한다. cpu와 운영체제에 독립적으로 운영하는것을 지향점으로 한다.

한번만든 프로그램을 모든 플랫폼에서 빠르게 실행할 수 있다. 개발이후 production으로 실행하는 과정이 빨라진다. (A.K.A DevOps)

스크린샷 2024-10-20 오전 1.15.16.png

도커파일은 어떤 OS버전을 사용하고 명령어를 수행하라는 내용을 포함하는 IaC이다.

도커파일을 통해서 environment independent한 immutable infrastructure를 구현할 수 있다. 밑단에서부터 필요한 개발도구, 라이브러리, 환경변수 등을 작성하고 도커파일을 토대로 빌드를 수행하면 그 결과로 컨테이너 이미지를 얻는다. 컨테이너 이미지는 code, runtime, library, 환경변수등을 전부 포함한다.

컨테이너는 이미지의 runtime instance이다

docker build를 수행하면 docker image를 생성한다

이미지를 run으로 실행하면 컨테이너가 된다.

스크린샷 2024-10-20 오전 1.16.59.png

컨테이너는 컴퓨터의 메모리를 점유하는 프로세스 형태이다.

docker hub에는 최적화된 official 컨테이너 이미지들이 올라와있고 라이브러리처럼 가져다 사용할 수 있다. 도커에서는 소스코드처럼 build, push,pull등의 용어를 사용한다. 소스코드를 빌드하듯이 이미지를 빌드하고 그 이미지를 registry인 docker hub에 올리고 받아와서 사용하는 IaC의 절차는 소스코드를 사용하는 과정과 비슷하다.

스크린샷 2024-09-25 오후 5.36.51.png

도커는 go로 작성된 프로그램이다.

컨테이너들이 독립적으로 동작해서 VM처럼 느껴진다. 컨테이너에게 process, 네트워크, 파일시스템 등을 합쳐서 dedicated된 것과 같은 workspace를 namespace라고 제공해준다.

control group = 엑세스권한

컨테이너간에 서로 엑세스는 금지

하드웨어 자원 논리적인 자원 등도 가상화시켜서 control가능하게 할건지를 개발자가 지정한다.

따라서 개발자 입장에서는 vm과 차이가 없게 느껴진다.

도커 명령어