도커는 컨테이너 기반의 가상화 플랫폼이다.
컨테이너란? 컨테이너에 물건을 넣어서 운반하듯이
프로그램을 컨테이너안에 넣어서 운반하면 쉽게 옮길 수 있다
ex) Redis, Spring, Mysql 이렇게 3개를 하나의 컨테이너에 넣으면 배포 및 관리를 쉽게할 수 있다. 어디로든 쉽게 옮긴다.
사진과 같이 도커는 VM과 비교했을 때 컨테이너는 하이퍼바이저와 게스트 OS가 필요하지 않으므로 더 가볍습니다.애플리케이션을 실행할 때는 컨테이너 방식에서는
호스트 OS위에 애플리케이션의 실행 패키지인 이미지를
배포하기만 하면 되는데
VM은 애플리케이션을 실행하기 위해서 VM을 띄우고 자원을 할당한 다음,
게스트 OS를 부팅하여 애플리케이션을 실행해야 해서
훨씬 복잡하고 무겁게 실행을 해야 합니다.
다른컨테이너와 커널을 공유한다
도커 이미지를 이용해서 컨테이너를 생성하며
도커 컨테이너를 이용하여 프로그램을 실행한다.
Dockerfile에서 CMD 명령어를 정의할 때, 명령어와 인자(argument)를 배열로 나누는 이유는 보안 및 실행의 일관성과 관련이 있습니다.
보안: CMD 명령어를 배열로 정의하면, 컨테이너 내에서 이 명령어를 실행할 때 셸을 사용하지 않으므로 일부 공격 벡터를 방지할 수 있습니다. 셸을 사용하면 컨테이너 내부에서 명령어를 해석하는 데 더 많은 가능성이 있으므로, 셸 인젝션과 같은 보안 문제가 발생할 수 있습니다.
실행의 일관성: 배열로 CMD를 정의하면 CMD 명령어와 그 인자가 정확하게 실행될 것을 보장할 수 있습니다.