Docker

[Docker] 도커 아키텍처와 컨테이너 실행 방법 (2)

아윤_ 2024. 7. 31. 15:36

지난번, 도커를 공부하기 위해 가상화 기술에 대한 개념에 대해 알아보았다.

이번에는 컨테이너 가상화 기술을 사용하는 도커의 아키텍처와 컨테이너 실행 방법에 대해 살펴보도록 한다.


 

 

도커 (Docker)

 

도커는 컨테이너 가상화 기술을 사용하기 위한 도구로, 도커를 사용하면 커널의 컨테이너 가상화 기술을 사용자가 손쉽게 활용할 수 있다. 

 

도커 아키텍처

 

도커와 같은 컨테이너 가상화 도구를 컨테이너 플랫폼이라고 부르며, 컨테이너 플랫폼은 컨테이너 엔진과 컨테이너 런타임을 자체적으로 가진다.

  • 컨테이너 엔진
    사용자의 요청을 받아 컨테이너를 관리
  • 컨테이너 런타임
    직접 커널과 통신하며 격리된 공간 생성

 

 

클라이언트 - 서버 모델

 

도커는 클라이언트 - 서버 모델로 실행된다. 사용자의 명령을 전달해 주는 클라이언트와 실제로 컨테이너를 관리해 주는 도커 데몬이라는 서버가 존재한다. 보통 데몬이라는 이름이 붙은 소프트웨어는 서버에서 지속적으로 실행이 되는 소프트웨어를 의미한다. 도커 데몬도 호스트 OS에서 지속적으로 실행되면서 클라이언트의 요청에 따라 컨테이너를 관리한다. 즉, 호스트 OS의 커널을 활용해 컨테이너를 관리한다. 또한, 도커 데몬은 클라이언트가 이러한 기능을 사용할 수 있도록 API를 제공한다. 

 

 

하지만, 사용자가 직접 API를 사용하기엔 작업 하나하나마다 API를 파악하고 전달해야 하므로 시간이 오래 걸리며, 번거롭다. 따라서 도커에서는 Docker CLI를 클라이언트 툴로 제공한다. CLI는 클라이언트가 명령어를 입력하면, 명령어를 API 형식에 맞게 만들어서 대신 전달해 준다. Docker CLI를 통해 사용자는 도커 데몬의 API와 쉽게 통신할 수 있다.

 

 

 

컨테이너 실행

 

이제 실습을 통해 컨테이너를 실행해 보자. Docker Desktop이 깔려있다고 가정하고 간단한 실습을 진행한다. 터미널을 열어 아래의 명령어를 차례대로 실행하며 기본 명령어를 익히고 nginx 컨테이너를 실행하고, 삭제 해본다.

  • docker 버전 확인 
docker version

Client, Server의 버전 및 상태를 확인하는 명령어이다. 

 

 

  • docker 시스템 정보 확인
docker info

docker client, server의 플러그인 정보를 확인한다.

 

  • docker 매뉴얼 확인
docker --help
docker container --help

아주 자주 사용되는 명령어로 help 명령어를 통해 사용할 명령어에 대한 가이드를 확인할 수 있다.

 

 

  • 컨테이너 실행
docker run [실행옵션] 이미지명

 

nginx 컨테이너 실행

docker run -p 80:80 --name hellonginx nginx

 

 

 localhost로 브라우저에 접속하면, nginx 컨테이너가 정상적으로 실행된 모습을 확인할 수 있다.

 

 

  • 컨테이너 삭제
docker rm 컨테이너명/ID

 

nginx 컨테이너 삭제

docker rm hellonginx

 

컨테이너 이름이 출력되면 정상적으로 삭제된 것이다.

 

 

동작 과정

 

  1. docker run -p 80:80 --name hellonginx nginx
    CLI가 명령어를 컨테이너의 실행 API에 맞게 만들어 도커 데몬으로 전달한다. 도커 데몬은 해당 요청을 분석해 컨테이너 런타임을 통해 컨테이너를 생성한다.
  2. localhost 접속
    localhost에 접속하면 컨테이너에 실행 중인 nginx 프로세스에서 이 요청을 전달받아서 웹 페이지를 제공해 준다. 컨테이너를 생성하여 프로세스를 실행시키면, 해당 프로세스는 디스크나, 메모리, 네트워크, CPU 같은 공간이 완전히 격리된 공간에서 실행된다.

 

정리

컨테이너 가상화 기술을 사용하는 도커의 아키텍처에 대해 알아보고, 도커를 직접 사용해 컨테이너를 실행해 보았다. 다음 포스팅에서는 이미지에 대해 알아보고, 관련 명령어에 대해 학습해본다.