본문 바로가기
AWS 클라우드

컨테이너(Container)와 도커(Docker)

by 야채호빵o 2024. 6. 24.
 

컨테이너(Container)와 도커(Docker)

목차

1. 가상 머신(Virtual Machine)

2. 컨테이너(Container)

3. 가상 머신과 컨테이너

4. 도커(Docker)

참고자료

 

가상 머신(Virtual Machine)

가상 머신

가상 머신(Virtual Machine, VM)은 물리적 컴퓨터에서 소프트웨어로 구현된 독립적인 운영 체제 환경을 말합니다. 이는 하이퍼바이저(Hypervisor)라는 소프트웨어 계층을 통해 하드웨어 자원을 가상화하여 여러 개의 운영 체제(OS)를 하나의 물리적 호스트에서 실행할 수 있도록 합니다.

 

하이퍼바이저(Hypervisor): 가상 머신을 생성하고 관리하는 소프트웨어(하드웨어 자원을 가상화하여 여러 가상 머신이 자원을 공유할 수 있게 함)

 

그러나, 각종 시스템 자원을 가상화하고 독립된 공간을 생성하는 작업은 하이퍼바이저를 반드시 거치기 때문에 일반 호스트에 비해 성능의 손실이 발생합니다.

 

그 뿐만 아니라, 가상 머신은 게스트 운영체제를 사용하기 위한 라이브러리, 커널 등을 전부 포함하기 때문에 가상 머신을 배포하기 위한 이미지로 만들었을 때 최소 GB 단위의 공간이 필요하며, 가상 머신 수에 비례해서 늘어납니다. 

 

컨테이너(Contanier)

컨테이너

 

컨테이너는 애플리케이션의 코드, 라이브러리 및 기타 종속 구성 요소를 포함하는 소프트웨어 코드 패키지입니다. 컨테이너화를 통해 애플리케이션을 이동 가능하도록 만들어 모든 디바이스에서 동일한 코드를 실행할 수 있습니다. 이는 운영체제 수준에서의 가상화를 통해 이루어지며, 애플리케이션의 배포, 관리, 확장을 더 쉽게 하고 효율적으로 만듭니다.

 

도커(Docker): 가장 널리 사용되는 컨테이너 플랫폼으로, 컨테이너의 생성, 배포, 관리 기능을 제공

 

컨테이너는 운영체제 커널을 공유하기 때문에 가상 머신보다 훨씬 가벼우며, 더 빠르게 시작되고 종료될 수 있습니다. 

 

가상 머신과 컨테이너

가상머신과 컨테이너

가상 머신

  • 호스트 운영체제 위에 가상화된 하드웨어 계층을 생성
  • 각 VM은 독립된 운영체제, 커널, 드라이버 등을 가져서 무거움
  • 운영체제의 부팅 과정이 필요하므로 로딩 시간이 오래 걸림
  • 독립된 운영체제를 가지므로 메모리, 디스크 공간 등 자원을 많이 소비

컨테이너

  • 호스트 운영체제의 커널을 공유하며 프로세스 단위의 격리 환경 조성
  • 가볍게 격리된 환경을 생성하여 VM보다 더 가벼우며 효율적으로 실행
  • 이미지와 컨테이너 레이어를 사용하여 빠르게 생성되며, 실행 속도가 매우 빠름
  • 호스트 운영체제의 커널을 공유하므로 가볍고 효율적으로 자원을 활용

정리하자면,

 

컨테이너는 프로세스 단위의 격리 환경을 조성하고 있어 상호 간의 의존도를 낮추어 줍니다. 또한 VM에 비해 사이즈가 작아서 배포가 빠르고 성능 손실이 거의 없습니다.

 

다양한 컨테이너 런타임 기술(컨테이너를 생성, 관리하는 플랫폼)이 존재하지만 단연 그중에 도커(Docker)가 사실상 표준으로 여겨지고 있습니다.

 

도커(Docker)

도커(Docker)는 애플리케이션을 더 쉽게 개발, 배포, 실행할 수 있도록 해주는 오픈소스 가상화 플랫폼입니다. 도커를 사용하면 애플리케이션과 그에 필요한 환경을 격리된 공간인 컨테이너에 패키징하여 실행, 관리할 수 있습니다.


도커 아키텍처

도커 아키텍처는 애플리케이션의 컨테이너화를 가능하게 하는 여러 구성 요소로 이루어져 있습니다. 이 아키텍처는 도커 클라이언트, 엔진, 레지스트리 등의 주요 구성 요소를 포함합니다. 

 

도커 아키텍처

 

   1. 도커 클라이언트(Docker Client) 

  • 사용자가 도커와 상호작용할 수 있는 명령줄 인터페이스로, 사용자는 도커 클라이언트를 통해 컨테이너를 생성하고 관리할 수 있습니다.

   2. 도커 데몬(Docker Daemon)

  • 도커 엔진의 백그라운드 프로세스로, 컨테이너의 생성, 실행, 중지, 삭제 등을 관리합니다.
  • 도커 클라이언트와 REST API를 통해 통신하며, 호스트 시스템의 리소스를 관리하고 컨테이너를 실행합니다.

   3. 도커 이미지(Docker Image)

  • 애플리케이션과 그 실행 환경을 포함하는 읽기 전용 템플릿입니다.
  • 이미지는 여러 레이어로 구성되어 있으며, 각 레이어는 파일 시스템의 스냅샷을 나타냅니다.
  • 생성: Dockerfile을 사용하여 이미지를 빌드할 수 있습니다.
  • 저장: 이미지는 도커 레지스트리에 저장될 수 있으며, 필요할 때마다 가져와서 사용할 수 있습니다.

   4. 도커 컨테이너(Docker Container)

  • 도커 컨테이너는 도커 이미지를 실행한 상태로, 애플리케이션의 실행 환경을 제공합니다.
  • 컨테이너는 이미지의 인스턴스라고 할 수 있습니다.
  • 각 컨테이너는 독립된 네임스페이스, cgroups를 통해 격리된 환경에서 실행됩니다.

   5. 도커 레지스트리(Docker Registry)

  • 도커 레지스트리는 도커 이미지를 저장하고 배포하는 저장소입니다.
  • 도커 허브(Docker Hub)와 같은 퍼블릭 레지스트리가 있으며, 프라이빗 레지스트리도 설정할 수 있습니다.
  • 도커 허브(Docker Hub): 가장 널리 사용되는 퍼블릭 레지스트리로, 수많은 도커 이미지를 호스팅하고 있습니다.
  • 프라이빗 레지스트리: 기업 내부에서 이미지를 공유하기 위해 설정할 수 있습니다

도커 동작 원리

 

   1. 이미지 빌드

  • Dockerfile을 작성하고 docker build 명령어를 사용하여 이미지를 빌드합니다.
  • 빌드된 이미지는 로컬 이미지 저장소에 저장됩니다.

   2. 이미지 배포

  • 이미지를 도커 레지스트리에 푸시(docker push)하여 다른 사용자나 시스템에서 접근할 수 있게 합니다.

   3. 컨테이너 실행

  • 도커 클라이언트에서 docker run 명령어를 사용하여 컨테이너를 실행합니다.
  • 도커 데몬이 이미지를 가져와 컨테이너를 생성하고, 필요한 자원을 할당하여 애플리케이션을 실행합니다.

   4. 컨테이너 관리

  • 실행 중인 컨테이너는 docker ps 명령어로 확인할 수 있으며, docker stop, docker rm 등의 명령어로 중지 및 삭제할 수 있습니다.

도커 기본 명령어

  1. docker run: 새 컨테이너를 생성하고 실행합니다.
    예: docker run -d -p 8080:80 nginx
  2. docker stop: 실행 중인 컨테이너를 중지합니다.
    예: docker stop <container_id>
  3. docker start: 중지된 컨테이너를 다시 시작합니다.
    예: docker start <container_id>
  4. docker restart: 컨테이너를 재시작합니다.
    예: docker restart <container_id>
  5. docker rm: 컨테이너를 삭제합니다.
    예: docker rm <container_id>
  6. docker rmi: 이미지를 삭제합니다.
    예: docker rmi <image_name>
  7. docker pull: Docker Hub 또는 다른 레지스트리에서 이미지를 다운로드합니다.
    예: docker pull nginx
  8. docker push: 이미지를 Docker Hub 또는 다른 레지스트리에 업로드합니다.
    예: docker push <username>/<image_name>
  9. docker images: 로컬 시스템에 있는 이미지 목록을 보여줍니다.
  10. docker ps: 실행 중인 컨테이너 목록을 보여줍니다. -a 옵션을 추가하면 중지된 컨테이너를 포함한 모든 컨테이너를 보여줍니다.
    예: docker ps
  11. docker logs: 컨테이너의 로그를 출력합니다.
    예: docker logs <container_id>
  12. docker exec: 실행 중인 컨테이너 내부에서 명령어를 실행합니다.
    예: docker exec -it <container_id> /bin/bash
  13. docker build: Dockerfile을 사용하여 이미지를 생성합니다.
    예: docker build -t <tag_name> .
  14. docker network: Docker 네트워크 관련 명령어들입니다.
    예: docker network ls, docker network create
  15. docker volume: Docker 볼륨 관련 명령어들입니다.
    예: docker volume create, docker volume inspect
  16. exit  : 빠져나오기

 

참고자료

https://born-dev.tistory.com/39

 

컨테이너 vs 가상머신

[가상머신 ( Virtual Machine , VM )] 클라우드 서비스 형태로는 기본 엔진 (AWS : EC2 , GCP : CGE 등) 으로 제공된다. VM의 구현 방법에 따라 다르지만, 기본적으로 하이퍼바이저가 여러개의 VM을 띄우고 실행

born-dev.tistory.com

https://aws.amazon.com/ko/compare/the-difference-between-containers-and-virtual-machines/

 

컨테이너와 VM 비교 - 배포 기술 간의 차이점 - AWS

컨테이너와 가상 머신의 차이점은 무엇인가요? 컨테이너 및 가상 머신은 애플리케이션을 IT 인프라 리소스로부터 독립적으로 만드는 기술입니다. 컨테이너는 애플리케이션의 코드, 라이브러리

aws.amazon.com

https://www.samsungsds.com/kr/insights/220222_kubernetes1.html

 

쿠버네티스 알아보기 1편: 쿠버네티스와 컨테이너, 도커에 대한 기본 개념 | 인사이트리포트 | 삼

요즘 IT 생태계에 관심이 많으신 분들이라면 쿠버네티스라는 단어를 들어 보셨을 텐데요. 쿠버네티스에 대해 개발자들의 관심이 높아지고 있고, 여러 대기업에서 새로운 시스템을 쿠버네티스를

www.samsungsds.com

https://www.codestates.com/blog/content/%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4

 

쿠버네티스 개념과 구성요소ㅣ도커, 컨테이너 오케스트레이션 - 코드스테이츠 공식 블로그

쿠버네티스(Kubernetes)에 대해 들어보셨나요? 쿠버네티스는 컨테이너화된 애플리케이션 관리시스템으로 오픈 소스 기반입니다. 오늘은 쿠버네티스가 생겨난 배경과 개념, 구성요소에 대해 알아

www.codestates.com

https://velog.io/@moonblue/%EB%8F%84%EC%BB%A4-Docker

 

도커 (Docker)

도커(Docker)는 컨테이너 기반의 오픈 소스 가상화 플랫폼입니다. 도커를 사용하면 애플리케이션과 그에 필요한 환경을 격리된 공간인 컨테이너에 패키징하여 실행, 관리할 수 있습니다.

velog.io