Docker 기초 : 도커 엔진

도커 엔진, 컨테이너, 이미지의 기본 개념

written by tiaz0128
'가상화 개념'에 대해 더 자세히 알고 싶으시다면, "Docker 기초 : 가상화 개념" 글을 확인 해주세요!

컨테이너의 장점

컨테이너 가상화를 사용하면 어떤 장점이 있을까요? 물리 머신과 컨테이너 환경에서 여러 파이썬 버전을 설치한다고 가정하고 생각해 봅시다.

물리 머신에 구축하기

혹시 동일한 프로그래밍 언어의 여러 버전을 하나의 컴퓨터에 설치해본 기억있나요? 대부분의 경우는 뭔가 서로 영향을 줘서 그런지 제대로 동작하지 않습니다.

Docker Engine

> 하나의 물리 머신에 버전 충돌 발생

컨테이너로 구축하기

반면 컨테이너를 이용하여 환경을 구축하면 어떨까요? 컨테이너는 필요한 구성을 갖춘 격리된 실행 환경을 구축할 수 있습니다. 호스트 시스템이나 다른 컨테이너와 독립적으로 실행된다는 장점이 있습니다.

Docker Engine

> 컨테이너로 독립적인 환경을 구축

Docker Engine

도커 엔진(Docker Engine)은 컨테이너를 관리 운영하는 클라이언트 - 서버 애플리케이션 역할을 수행 합니다. 그리고 도커 엔진은 세가지 구성 요소로 이루어져있습니다.

Docker Engine

> 도커 엔진은 세가지로 구성 요소로 이루어져있다.

Docker daemon(dockerd)

도커 데몬(Docker Daemon)은 도커 API 요청을 수신하고 이미지, 컨테이너, 네트워크, 볼륨과 같은 도커 개체를 관리합니다.

Docker CLI

Docker CLI는 사용자가 이용하는 도커 명령으로 Docker APIs를 사용합니다. 스크립팅 또는 직접 CLI 명령을 통해 도커 데몬을 제어하거나 상호 작용합니다.

Docker APIs

프로그램이 도커 데몬과 대화하고 지시하는 데 사용하는 API입니다.

이미지(image)

이미지에서 컨테이너를 생성할 수 있습니다. 이미지는 컨테이너 생성을 위한 읽기 전용 템플릿으로 하나의 이미지로 여러 컨테이너 실행 가능합니다.

Docker image

> 도커 엔진은 세가지로 구성 요소로 이루어져있다.

Docker Hub

도커 허브(Docker Hub)는 여러 이미지가 모여있는 저장소(repository)입니다. 로컬에 존재하지 않는 이미지는 도커 허브에서 받아올(pull) 수 있습니다.

Docker Hub

> 도커 허브에서 이미지를 받아올 수 있다

또 다른 방법으로 도커 파일(Dockerfile)을 사용하여 커스텀 이미지를 생성 할 수 있습니다. 도커 파일은 다음에 자세히 알아 보고, 여기서는 도커 허브에서 이미지를 받아와서 사용하겠습니다.

Docker 설치

그럼 이제 실습을 위한 Docker Desktop을 설치하겠습니다.

Docker Desktop 설치

Docker Desktop은 Docker Engine을 포함한 간단한 GUI(Graphical User Interface)를 제공합니다. 도커를 처음 시작하시는 분들은 각 운영체제(OS)에 알맞은 공식 문서 Install Docker Desktop 페이지를 참고하시기 바랍니다.

Docker Engine 설치

일반적으로 서버에는 Docker Engine만 설치하기 때문에 서버에 도커를 설치하는 경우에는 Install Docker Engine 페이지를 참고합시다.

Docker CLI 명령어 구조

도커 CLI의 기본적인 구조는 아래와 같습니다.

$ docker 대상 COMMAND [OPTIONS] [ARG...]

$ docker container run -it python

대문자로 적힌 부분(ex. COMMAND)은 필수 입력값을 뜻합니다. 대괄호 [ ]는 옵션값을, ARG에 붙은 ...은 1개 이상의 입력값을 뜻합니다. 마지막으로 대표적인 대상은 아래와 같습니다.

새로운 명령어 형식

아래의 두 명령은 동일하게 ‘컨테이너를 실행’하는 명령어 입니다. 둘의 차이는 container와 같은 대상의 유무입니다. 대상이 존재하고 서브 명령어가 오는 형태가 새로운 명령어 형식 입니다.

$ docker run

$ docker container run

여러분은 어떤 형식이 더 의미가 명확해 보이나요? 저는 대상이 명확한 새로운 명령어 형식을 추천 합니다.

–help 도움말

CLI를 사용하면서 필요한 명령어 또는 옵션은 아래와 같은 --help 옵션을 이용해서 확인 할 수 있습니다. 각 단계별 명령어에 대한 필요한 정보를 얻을 수 있습니다.

$ docker --help

$ docker container --help

$ docker container run --help

hello-world 컨테이너 가동

이제 간단한 hello-world 컨테이너를 동작시켜 보겠습니다. 아래의 명령을 실행해 봅시다.

$ docker container run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.

(생략)

hello-world 컨테이너 동작 흐름

  1. 로컬에서 hello-word 이미지를 찾음 (로컬에는 해당 이미지가 없음)
  2. 도커 허브에서 hello-word 이미지를 찾아서 받아옴
  3. 이미지에서 컨테이너를 생성하여 실행
  4. 컨테이너가 동작하고 종료

Docker Engine

> hello-word 컨테이너 실행 후 바로 종료된다

컨테이너 상태 확인

hello-world 컨테이너는 정해진 동작이 끝나면 바로 종료됩니다. 아래 명령으로 컨테이너가 Exited 상태인 것을 확인 할 수 있습니다.

$ docker container ls --all
CONTAINER ID   IMAGE            COMMAND     CREATED         STATUS
6cf19ed48d78   hello-world      "/hello"    29 minutes ago  Exited (0) 29 minutes ago

마무리

컨테이너, 도커엔진, 이미지에 대해서 정리하고 마무리 하겠습니다. 다음 포스트에서는 ‘컨테이너 관련 명령어와 컨테이너 상태’에 대해 자세히 알아보도록 하겠습니다! 😊

컨테이너

컨테이너는 애플리케이션과 그 실행 환경을 격리하여 구성할 수 있게 해줍니다. 이를 통해 버전 충돌이나 환경 설정 문제 없이 여러 애플리케이션을 실행할 수 있습니다.

도커 엔진

도커 엔진은 이러한 컨테이너를 관리하는 핵심 구성 요소입니다.

이미지

컨테이너를 시작하기 위해서는 이미지가 필요하며, 이미지는 Docker Hub에서 받아오거나 직접 생성할 수 있습니다.

Docker Docker Engine

tiaz0128

Eat Sleep Coding.

Never Never GiveUp.

Security  |  BackEnd  |  Multi Cloud