- 도커가 무엇이고 어떤 역할을 하는지 이해한다.
- 기본 도커 명령어를 파악한다.
- 도커 명령어 입력 이후에 일어나는 일들(작동원리)을 이해한다.
- 도커 이미지의 컨테이너 생성 및 실행 원리를 이해한다.
- 도커를 이해하기 전에 컨테이너가 무엇인지부터 가볍게 짚어보자.
- 그리고 나서 도커와 도커의 역할을 이해해보자.
- 컨테이너란?
- 컨테이너는 컴퓨터 내에 특정 시스템 환경을 별도로 패키징한 것이다. 소프트웨어는 패키징된 환경에서 실행될 수 있으며, 이 환경은 시스템의 나머지 부분과 격리된다.
- 컨테이너는 가상머신과 비슷하지만, 가상머신이 아니다. 컨테이너는 가상머신보다 더 날렵하며 기동과 정지도 더 빠르고 유연성과 이동성도 더 뛰어나다.
- 컨테이너는 단 몇 초 만에 확장하고 축소할 수 있으며, 클라우드와 같은 탄력적인 환경에서 애플리케이션을 더 쉽게 구동할 수 있다.
- 대표적인 컨테이너 소프트웨어로 Docker(도커)가 있다.
- Docker(도커)란?
- 오픈소스이기도 하고 상용 소프트웨어이기도 한 도커는 기존의 컨테이너를 사용자 친화적이고 개발자 친화적인 환경으로 만든 주역이다.
- 도커는 컨테이너를 위한 공통 툴 세트를 제공해 애플리케이션을 컨테이너 이미지로 패키징해 어디에서나 쉽게 배치하고 재사용할 수 있다.
- 컨테이너 이미지란 컨테이너를 만드는 모체다. 쉽게 생각해
클래스 - 인스턴스 객체
간의 관계를 생각하면 된다.- 쉽게 말해 도커는 컨테이너 이미지를 생성하고 관리하고 공유하고 여러 곳으로 옮기고 도커 호환 호스트에 배치할 수 있게 함으로써, 컨테이너 구동 작업을 매우 간단한 것으로 만들어 버린다.
- => 정리: 도커는 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼이다. 소프트웨어를 컨테이너라는 개념으로 패키징하며, 컨테이너는 라이브러리, 시스템 도구, 핵심 로직 등 소프트웨어 실행에 필요한 모든 것이 포함되어 있다.
$ docker run alpine ls
우선 예를 들어 터미널에서 위와 같이 'docker run alpine ls' 를 입력한다고 가정했을 때, 각 포지션에 있는 명령어가 의미하는 바를 이해해야 한다.
- docker -> 도커 클라이언트를 뜻한다.
- run -> 도커 컨테이너를 생성함과 동시에 실행한다.
- alpine -> 사용할 도커 이미지 이름을 넣는 위치이다. 도커 이미지는 컨테이너(인스턴스) 생성의 모태가 되는 원형이라 할 수 있다.
- ls -> 이 자리는 원래 이미지가 가지고 있는 시작 명령어를 무시하고 여기에 있는 커맨드를 실행하게 한다. (예시로든 ls 커맨드는 현재 디렉토리의 파일리스트를 보여주는 역할을 한다.)
: 1번에서 언급한 하나의 명령어가 입력되는 순간 아래와 같은 일이 순차적으로 수행된다.
- 도커 클라이언트에 전달된 명령어가 도커 서버로 전송된다.
- 도커 서버는 컨테이너를 위한 이미지가 도커 캐시 저장소에 이미 캐시되어 있는지를 확인한다.
- 존재한다면, 캐시 저장소에 있는 이미지로 컨테이너를 생성 및 실행한다.
- 존재하지 않는다면, 도커 허브에서 이미지를 다운 받아와 캐시 저장소에 캐싱하고 컨테이너를 생성 및 실행한다.
: 2번에서 받아온 이미지가 도커 컨테이너를 이용하는 방법 및 순서에 대해 알아보자.
- 먼저 이미지 내의 파일 스냅샷 되어있는 것을 컨테이너의 하드 디스크에 올린다.
(여기서 컨테이너가 사용하는 커널은 공통 소유이다. 즉 도커의 모든 컨테이너는 하나의 커널을 사용한다.)- 동시에 어플리케이션의 실행을 위해, 해당 이미지가 요구하는 자원(네트워크, RAM, CPU 등)을 할당량에 맞게 컨테이너에 부여한다.
- 시작 명령어(예: run alpine)가 작동하면서 어플리케이션을 실행한다.
- 만약 뒤에 ls가 붙으면 alpine의 파일리스트를 확인할 수 있다.
(참고: 모든 이미지가 ls를 사용할 수 있는 것은 아니다. 가령 hello-world 이미지 같은 경우, ls를 붙여서 사용해도 excutable file not found라는 결과가 나온다. 즉, ls로 표출할 수 있는 파일이 존재하지 않는 이미지도 있는 것이다.)
감사합니다!