Data/Docker

[Docker] Container 띄워보기

gangmin 2024. 7. 15. 17:04

안녕하세요. 오늘은 도커를 실제로 사용하는 방법에 대해서 학습하려고 합니다.

지난번에는 도커가 무엇이고, 어떤 요소들이 핵심적인지 알아보았습니다. 가장 중요한 핵심 요소중 하나는 컨테이너였습니다. 이에 대해서 실행하는 방법을 알아볼 것입니다.

 

Container 실행

도커에서 Container를 가장 쉽게 실행해볼 수 있는 명령어는 docker container run hello-world 입니다. 이에 대한 의미가 명확하지는 않지만, docker에게 hello-world라는 Container를 실행하라고 추측할 수 있습니다.

 

hello-world 라고 하는 것은 어디서 온 것일까요? 미리 도커로 실행할 수 있도록 패키징돼 누구나 내려받을 수 있도록 공유된 이미지입니다.

 

Container를 실행하기 위해서 이미지가 필요합니다. 이런 이미지를 저희는 웹 상에 올리고 공유하고, 쉽게 다운 받아서 사용할 수 있게 되는 것입니다.

 

도커는 항상 동일한 프로세스를 가지고 컨테이너를 띄우게 됩니다. 빌드, 공유, 실행 이라는 과정을 거치고, 이는 어떠한 애플리케이션이든 동일합니다.

 

같은 명령어를 2번 실행하게 되면 어떻게 동작할까요? 1번째 실행할 때 이미지를 다운 받았기 때문에 기존에 다운 받은 이미지를 기반으로 새로운 컨테이너를 실행하는 작업만 수행하게 됩니다.

 

Container란?

컨테이너는 말 그래도 물건을 담는 컨테이너와 동일합니다. 애플리케이션이 들어 있는 어떤 상자를 생각하면 동일합니다.

호스트명, IP 주소, 파일 시스템까지 모두 도커가 만들어낸 가상 리소스입니다. 위의 그림은 한개의 컨테이너의 요소들을 대략적으로 그린 그림입니다. 컨테이너 내부에는 애플리케이션이 존재하게 됩니다. 더 크게 여러가지의 컨테이너가 동작하는 구조를 살펴보면 더욱 이해가 쉽게 되실 겁니다.

해당 그림을 확인해보면, 어려가지의 애플리케이션은 독립된 컨테이너 안에서 동작하고 있으며, 이들의 연결은 Docker가 하고 있습니다. 이는 격리와 밀집이라는 모순적인 조건을 동시에 만족합니다.

 

밀집이란 컴퓨터에 CPU와 메모리가 허용하는 한 되도록 많은 애플리케이션을 실행하는 것을 의미합니다. 그러나 서로 다른 여러 애플리케이션을 동시에 실행하는 데는 제약이 따릅니다. 다음과 같은 제약 사항이 따릅니다.

  • 런타임의 버전이 다른 경우
  • 서로 호환되지 않는 버전의 라이브러리를 사용하는 경우
  • 한개의 애플리케이션이 과다한 리소스를 필요로 해 다른 애플리케이션의 리소스가 부족한 경우

컨테이너 실행 원리

도커 엔진

  • 도커의 관리 기능을 맡는 컴포넌트이다.
  • 로컬 이미지 캐싱을 담당하므로 새로운 이미지가 필요하면 이미지를 내려받는다.
  • 기존 이미지가 있다면 전에 내려받은 이미지를 사용한다.
  • 호스트 운영체제와 함께 컨테이너와 가상 네트워크 등 도커 리소스를 만드는 일도 담당

도커 API

  • 표준 HTTP 기반 REST API이다.
  • 도커 엔진의 설정을 수정하면 이 API를 네트워크를 경유해 외부 컴퓨터로 부터 호출할 수 없도록 차단하거나 허용할 수 있다.

도커 CLI

  • 도커 API의 클라이언트다.
  • 우리가 Docker 명령을 사용할 때 실제로 도커 API를 호출하는 것이 바로 도커 CLI이다.

'Data > Docker' 카테고리의 다른 글

[Docker] Docker란 무엇일까?  (0) 2024.07.11