본문 바로가기
책책책을 읽자/따라하며 배우는 도커와 CI 환경

터미널에 docker run hello-world 명령어를 입력하면 어떻게 될까?

by 해룸 2025. 2. 23.
PS C:\Users> docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
e6590344b1a5: Pull complete
Digest: sha256:e0b569a5163a5e6be84e210a2587e7d447e08f87a0e90798363fa44a0464a1e8
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/
  1. 도커 클라이언트에 명령어를 입력하면 클라이언트에서 도커 서버로 요청을 보냅니다.
  2. 서버에서 hello-world 라는 이미지가 로컬에 이미 다운로드 되어 있는지 확인합니다.
  3. 기존에 내려받은 hello-world 이미지가 없기떄문에, 파일을 찾을 수 없다는 문구가 출력 됩니다.
  4. 도커 이미지가 저장된 도커 허브에서 hello-world 이미지를 가져오고, 로컬에 보관합니다.
  5. 이제 로컬에 hello-world 이미지가 있으니, 해당 이미지를 이용해 컨테이너를 생성합니다.
  6. 생성된 컨테이너는 이미지에서 받은 설정이나 조건에 따라 프로그램을 실행합니다.

한번 더 hello-world 명령어를 도커 클라이언트에 입력하면, 로컬에 이미지를 가지고 있기 떄문에 프로그램이 바로 실행됩니다. 캐시 보관 장소에 hello-world 이미지가 보관되어 있기 때문입니다.


 

도커와 기존 가상화 기술의 차이점

가상화 기술이 나오기 전 서버를 사용하던 방식

한 대의 서버를 하나의 용도로만 사용했다. 따라서 한 대의 서버에서 사용하고 남는 서버 공간은 그대로 방치한다.
그리고 하나의 서버에 하나의 운영체제, 하나의 프로그램만을 운영한다. 비교적 안정적이지만 사용하지 않는 공간이 많기 때문에 비효율적인 면이 있다.

 

하이퍼바이저 기반의 가상화 기술

하이퍼바이저 기반의 가상화 기술은 가상화 기술이 나오기 이전의 비효율적인 면을 개선하기 위해 새롭게 출현했다. 논리적으로 공간을 분할해 가상머신이라는 독립적인 가상환경에서 서버를 이용하는 기술이다. 하이퍼바이저는 호스트 시스템에서 다수의 게스트 운영체제를 구동할 수 있게하는 소프트웨어이며, 하드웨어를 가상화하면서 하드웨어와 각각의 가상머신을 모니터링하는 중간관리자이기도 하다. 네이티브 하이퍼바이저와 호스트형 하이퍼바이저로 나뉘고, 현재 많이 사용되고 있는것은 호스트형 하이퍼바이저이다.

호스트형 하이퍼바이저: 예를들어 2core 짜리 하드웨어 위에 가상머신을 두대 올려놨다면, 각 코어가 각각의 가상머신을 담당한다(격리)

 

도커와 가상화기술의 차이점

도커의 구조와 기존 가상화기술의 구조는 굉장히 비슷하다. 공통점은 기본 하드웨어에서 격리된 환경 내에 애플리케이션을 배치하는 점이 같다. 차이점은 격리된 환경을 얼마나 격리시키는지가 다르다.

도커 컨테이너는 가상머신과 비교했을때 하이퍼바이저와 게스트 os가 필요하지 않으므로 더 가볍다. 컨테이너 방식에서는 애플리케이션을 실행할때 호스트 os 위에 애플리케이션의 실행 패키지인 이미지만 배포하면 되는데, 가상 머신은 애플리케이션을 실행하기 위해 가상머신을 실행하고 자원을 할당한 다음, 게스트 os를 부팅해 애플리케이션을 실행해야 하므로 훨씬 복잡하고 무겁다.