💡도커란, 컨테이너를 사용하여 각각의 프로그램을 분리된 환경에서 실행 및 관리할 수 있는 툴이다.
도커를 공부하기 위해
도커의 기본 기념인 컨테이너에 대해 먼저 살펴보고자 한다.
하나의 컴퓨터 환경(호스트) 안에 여러 개의 독립된 실행 환경을 만들 수 있게 해주는 기술이다.
이 독립된 환경 안에 각기 다른 프로그램을 설치하고 실행할 수 있다.
즉, 하나의 컴퓨터 환경 내에서 여러 개의 미니 컴퓨터 같은 환경을 구성할 수 있다.
이 미니 컴퓨터가 바로 우리가 배울 컨테이너이다.
이때 컨테이너를 포함하고 있는 컴퓨터, 즉 컴퓨터 자원의 주인을 호스트라고 한다.

그런데 이때 컴퓨터 내 미니 컴퓨터가
호스트 컴퓨터처럼 운영 체제, 파일 시스템, 메모리 등 모든 것을 갖춘
온전한 컴퓨터라면 실행 단위가 무거워지고 초기 구동 속도가 느려진다.
(이런 경우는 컨테이너가 아니라 가상머신에 속한다.)
컨테이너 기술에서는
운영체제는 호스트의 운영체제를 그대로 활용하고
파일 시스템과 네트워크는 다른 컨테이너들과 독립적으로 가지고 있다.
즉 A 컨테이너에서 B 컨테이너 내부 파일에 접근할 수 없고, 컨테이너는 각자의 고유한 IP 주소와 포트를 가진다.
이처럼 호스트 환경 전체를 복제하는 것은 아니지만
애플리케이션 동작을 위한 필요한 자원을 호스트에서 분리하여 새로운 환경을 만든다는 점에서
컨테이너의 개념을 아래와 같이 짧게 요약할 수 있다.
📌 애플리케이션을 실행하기 위한 작은 가상 환경
컴퓨터에서 일어나는 작업들을 프로세스와 컨테이너, 가상 머신 단위로 나누어 생각할 수 있다.
컴퓨터 자원을 어느 정도로 격리하여 사용하느냐 차이가 있다.
컴퓨터 자원은 크게 1. 메모리 2. 파일 시스템/네트워크 3. 운영체제가 있다.
즉, 격리 수준은 프로세스 < 컨테이너 < 가상 머신 순으로 점점 강해진다.
가상 머신은 운영 체제를 통째로 설치해야하므로 무겁고 초기 실행 속도가 느리다.
반면 컨테이너는 호스트의 운영체제를 이용(호스트의 OS 커널을 활용)하니 가볍고 빠르다.
컨테이너는 이처럼 호스트 컴퓨터의 자원을 이용하여 독립적으로 실행되는 환경이다.
그렇다면, 컨테이너를 다른 호스트에서도 똑같이 실행하려면 어떻게 해야 할까?
닌텐도를 할 때 여러 가지 칩을 꽂아가며 다양한 게임을 즐길 수 있다.
칩만 있으면 어디서든 원하는 게임을 바로 플레이할 수 있다.
왜냐하면 그 칩에는 게임을 실행하는 데 필요한 모든 파일과 데이터가 들어 있기 때문이다.
이때, 이 닌텐도 게임 칩과 같은 역할을 하는 개념이 바로 이미지(Image)이다.
이미지는 컨테이너를 만들기 위한 설계도 혹은 스냅샷으로,
애플리케이션을 실행하는 데 필요한 코드, 라이브러리, 의존성, 설정 파일 등이 전부 포함되어 있다.
즉, 이미지만 있다면 언제 어디서든 같은 컨테이너 환경을 만들 수 있다.
개발, 테스트, 배포 환경을 일관되게 유지할 수 있는 이유가 여기에 있다.