1. 서버에서 프로그램 실행
이번 파트에서는 이미지가 무엇인지, 이미지와 컨테이너의 관계가 어떻게 되는지에 대해서 살펴보고, 컨테이너의 실행부터 삭제까지의 과정을 테스트해 보면서 컨테이너의 라이프 사이클에 대해 학습한다.
서버에서 프로그램을 실행하기 위해서는 먼저 하드웨어가 필요하고, 그 하드웨어에서 실행할 소프트웨어가 필요하다. 소프트웨어는 Nginx 웹 서버처럼 소프트웨어를 다운로드 받아서 실행할 수도 있으며 직접 개발한 애플리케이션을 실행할 수 있다. 하지만 이 소프트웨어는 소프트웨어 하나만 가지고는 실행할 수 없다.
먼저 소프트웨어가 하드웨어의 자원을 사용할 수 있도록 필수 기능을 제공해주는 OS가 반드시 필요하다. 그리고 일반적으로 소프트웨어는 특정 패키지나 라이브러리 의존성을 갖고 있기 때문에 실행시키기 위해서 런타임 언어를 설치해야 하는 경우가 흔하다. 강의에서는 이러한 의존 요소들을 "Config" 혹은 "구성" 이라고 말하겠다. 정리하자면 서버에서 프로그램을 실행하기 위해서 소프트웨어적으로 세 가지가 필요하다.
- 개발자가 개발한 애플리케이션 실행 파일 또는 다운로드 받은 소프트웨어
- 애플리케이션 실행에 필요한 언어, 라이브러리 및 설정 구성
- 애플리케이션 실행에 필요한 기본 시스템 파일
Nginx 웹 서버를 컨테이너로 실행했을 때를 떠올려 보면 소프트웨어에 필요한 의존 요소를 설치하는 과정이 없이 Nginx 라는 이미지명만 지정했다. 어떻게 서버를 구성하는 과정 없이 한 번에 Nginx 프로그램을 실행할 수 있냐면 바로 Nginx 이미지를 통해서 컨테이너를 실행했기 때문이다.
2. 서버와 이미지
이미지는 파일 시스템에 특정 시점을 저장해 놓은 압축 파일이다. 마치 게임을 할 때 중간 저장을 해 놓는 것처럼 생각하면 된다. 이미지는 제작 단계에서부터 소프트웨어뿐만 아니라 소프트웨어가 실행하기 위해서 필요한 모든 요소들을 미리 준비해서 압축한다. Nginx 이미지 같은 경우는 Nginx 개발사가 OS 위에 Nginx와 의존성 요소들을 미리 준비하고 Nginx를 실행할 준비가 되어 있는 상태 자체를 이미지로 저장한 뒤에 공유한다. 따라서 이 Nginx 이미지 안에는 OS, 구성요소, 프로그램이 포함되어 있는 것이다.
그래서 PC 에서 docker run
명령에 Nginx 라는 이미지명을 입력했을 때 해당 이미지를 다운받아서 격리된 공간에 컨테이너가 실행된 것이다. 컨테이너를 실행할 때 이미지 안에 있는 Ngnix 프로그램이 함께 실행된 것이다. 이미지는 윈도우에서 사용하는 백업 기능과 매우 유사하다. 컴퓨터에 윈도우 OS 와 프로그램을 설치하고 그 상태를 백업으로 저장해 놓으면 언제든지 해당 프로그램을 실행할 수 있는 시점으로 돌아갈 수 있다. 그리고 백업 파일을 다른 컴퓨터에 공유도 할 수도 있다. 이처럼 백업 기능과 유사한 기능을 가상 머신에서는 스냅샷이라는 기능으로 제공하고 있다.
하지만 컨테이너의 이미지는 백업이나 스냅샷보다 압축파일의 사이즈가 아주 작다. 그래서 인터넷을 통해서 저장하고 공유하기가 훨씬 수월하다. 이미지는 컨테이너를 사용하는데 있어서 가장 중요한 기능 중 하나이다. 이미지는 Nginx 이미지처럼 다른 사람이 만든 이미지를 다운받아서 사용할 수도 있으며 개인이 직접 이미지를 제작할 수도 있다.
강의의 나머지 부분에서 이미지에 대한 이야기를 꾸준히 다룰 예정이다. 파트 3 에서는 이미지를 다운받고 공유하는 공간인 레지스트리에 대해서 학습하고, 파트 4 에서는 이미지가 구성되는 원리에 대해서 알아보고 직접 이미지를 생성한다.
3. 애플리케이션 서버와 이미지
도커는 가상 환경의 서버를 운영하는 기술이다. 도커를 사용한다는 것은 컨테이너 내에서 웹 서버나 웹 애플리케이션 같은 소프트웨어를 운영하는 것이 목적이다. 컨테이너는 이미지를 통해서 실행할 수 있고, 이미지는 특정 소프트웨어를 실행하기 위해서 OS 와 의존 요소, 소프트웨어가 포함되어 있는 파일 시스템의 상태를 저장해 놓은 압축 파일이다. 이 이미지를 컨테이너로 실행시키면 호스트 OS 안에서 와전히 격리된 공간인 컨테이너가 생성되는 것이다. 이 컨테이너 안에서 소프트웨어가 실행되고 이 이미지는 다른 사람이 만든 것을 사용하거나 직접 이미지를 만들어서 사용할 수도 있다.
이번 시간에는 이미지의 개념에 대해 학습했으며 다음 시간에는 이미지와 컨테이너의 관계에 대해 학습한다.
'도커 > 개발자를 위한 쉬운 도커' 카테고리의 다른 글
2.3 도커(Docker) 이미지와 컨테이너:이미지의 메타데이터(Metadata) (1) | 2024.05.30 |
---|---|
2.2 도커(Docker) 이미지와 컨테이너: 이미지와 컨테이너 (0) | 2024.05.30 |
1.3 도커(Docker) 가상화 기술: 컨테이너 실행 (0) | 2024.05.30 |
1.2 도커(Docker) 가상화 기술: 도커(Docker) (0) | 2024.05.30 |
1.1 도커(Docker) 가상화 기술: 애플리케이션 서버 (0) | 2024.05.30 |