도커? 가상화? 컨테이너? 다 드루와 😤

최미래·2024년 7월 7일
32
post-thumbnail

개요

작년에 생일날 오타 하나때문에 10시간을 삽질한 개발자가 있다? 라는 블로그를 보고 뭔가 부러워서(?)
올해 필자의 생일 기념으로 기술 블로그를 써보려 한다. 도커에 대해 알아보자!

도커? 가상화? 컨테이너?

도커를 이해하려면 먼저 이 세 가지를 알아야 한다.

* Docker?
도커는 컨테이너 기술을 기반으로 한 일종의 가상화 플랫폼이다.
* 가상화?
물리적 자원인 하드웨어를 효율적으로 활용하기 위해서 하드웨어 공간 위에 가상의 머신을 만드는 기술이다.
* 컨테이너?
컨테이너가 실행되고 있는 호스트 os의 기능을 그대로 사용하면서 프로세스를 격리해 독립된 환경을 만드는 기술이다.

⇒ 다시 말하자면, 도커는 독립된 환경을 만들어서 하드웨어를 효율적으로 활용하는 기술 이라 할 수 있다.

Docker의 주요 구성 요소

도커의 주요 구성 요소는 이렇게 이루어져 있다.

이미지(Image): 컨테이너 실행에 필요한 파일과 설정을 포함한 템플릿
컨테이너(Container): 이미지의 인스턴스로, 실제 애플리케이션이 실행되는 환경
도커 허브(Docker Hub): 도커 이미지의 저장소로, 필요한 이미지를 쉽게 내려받아 사용 가능

독립된 환경

도커는 이런 컨테이너에다 필요한 것만 담아서 구동 한다. 즉, 필요한 자원만 활용하게 되어 매우 효율적이다.

컨테이너 안에는 애플리케이션을 구동하는데 필요한 라이브러리 및 실행파일만 존재하기 때문에
컨테이너를 이미지로 만들경우 용량이 대폭 줄어든다!

도커의 장점

예를 들어, 어떤 프로젝트는 Spring 으로 되어있고, 또 다른 어떤 프로젝트는 Node JS 로 되어있다고 해보면 어떨까?

자바를 깔고 노드를 깔고 프로젝트를 깃허브에서 받아와 구동시키며 라이브러리 버전을 맞추고
오류나면 다시 버전을 확인하고 충돌도 막아야하는 등 개발자가 너무 많은 작업을 수행해야한다.
말로만 들어도 비효율 적인걸 알 수 있다.

(이러한 작업을 도커 파일을 통해서 수행한 뒤 그걸 이미지화 하여 서버에서 실행하는 것이 컨테이너 이미지)

그럼 도커를 활용하면 어떤 장점이 있을까?

  1. 가장 큰 장점은 역시 애플리케이션 독립성이다.
    호스트 OS와도, 다른 컨테이너와도 독립된 공간을 보장받을 수 있기 때문에 충돌 발생 위험 이 전혀 없다.
  2. 또한 컨테이너 내부에 작업을 한 후에 배포하려고 한다면,
    도커 이미지라는 패키지로 만들어서 운영서버에 전달만 하면 된다. 즉, 배포가 쉬워진다.
  3. 모놀리식 애플리케이션 방식에서 마이크로서비스 구조로 변화가 쉽다. 즉, 컨테이너 하나당
    하나의 기능만을 제공하는 모듈로 만들어서 부하가 많은 모듈은 여러개 더 만들고 하는등의 조정이 가능해진다.

컨테이너 이미지 하나면 어디서든 도커를 작동할 환경만 된다면 프로젝트 세팅을 아주 간단하게 할 수 있다.

VM VS Container?

VM과 컨테이너

위 그림을 보면, VM은 하이퍼바이저 위에 가상 머신마다 운영체제가 있고, 그 위에 애플리케이션이 있다.
반면, 컨테이너 구조에는 호스트 운영체제 위에 바로 컨테이너가 있고, 그 위에 애플리케이션이 위치한다.
이렇게 구조 레이어가 훨씬 간단한 컨테이너가 VM보다 성능을 높이기 쉽다!

공통점

  • 가상화 기술: 둘 다 물리적인 하드웨어 리소스를 효율적으로 사용하기 위해 가상화 기술을 활용한다.
  • 격리 환경 제공: 애플리케이션을 독립된 환경에서 실행하여 충돌이나 호환성 문제를 줄인다.
  • 배포 및 관리 용이: 가상화된 환경을 통해 애플리케이션의 배포, 관리, 확장이 용이하다.

차이점

- VM 가상화

  • 구조: VM은 하이퍼바이저 위에 각 가상 머신마다 독립적인 운영체제를 포함
    각 VM에는 게스트 OS, 가상 하드웨어, 그리고 그 위에 애플리케이션이 실행
  • 무게: 각 VM은 전체 운영체제를 포함하기 때문에 무겁고, 많은 시스템 자원을 소비
  • 격리 수준: VM은 높은 수준의 격리를 제공하여 거의 완벽하게 게스트와 호스트 분리 가능

- 컨테이너 가상화

  • 구조: 컨테이너는 호스트 OS의 커널을 공유하며, 필요한 애플리케이션과 그 종속성만 포함
    도커 엔진 위에 컨테이너가 직접 올라가고, 그 위에 애플리케이션 실행
  • 무게: 컨테이너는 운영체제를 공유하기 때문에 훨씬 가볍고 빠름
  • 격리 수준: 컨테이너는 프로세스 수준에서 격리되지만, 커널을 공유하기 때문에 VM보다 격리 수준 낮음

Docker 설치 및 실행

도커를 설치하는 방법은 여러 가진데

AWS (Ubuntu Linux) 일 경우

sudo apt update
sudo apt install docker.io 

이렇게 하면 자동으로 실행

MAC 일 경우
1. 이 사이트 에서 본인 맥북에 맞는거 dmg로 다운로드
2. 다운로드가 완료되면 Applications 폴더에서 Docker 실행

도커 기본 명령어

🎨 이미지 관련

  • 이미지 목록 보기
$ sudo docker images
  • 이미지 검색
$ sudo docker search [이미지 이름]
  • 이미지 받기
$ sudo docker pull [이미지 이름]:[버전]
  • 이미지 삭제
$ sudo docker rmi [이미지 id]

📦 컨테이너 관련

  • 컨테이너 목록 보기
$ sudo docker ps
  • 컨테이너 실행
$ sudo docker run [options] image[:TAG|@DIGEST] [COMMAND] [ARG...]
  • 컨테이너 시작
$ sudo docker start [컨테이너 id 또는 name]
  • 컨테이너 재시작
$ sudo docker restart [컨테이너 id 또는 name]
  • 컨테이너 접속
$ sudo docker attach [컨테이너 id 또는 name]
  • 컨테이너 정지
$ sudo docker stop [컨테이너 id 또는 name]
profile
주니어 백엔드 엔지니어, 최미래입니다.

4개의 댓글

comment-user-thumbnail
2024년 7월 7일

정리를 잘하시는것 같아요! 좋은글 감사합니다

1개의 답글
comment-user-thumbnail
2024년 7월 18일

생일 축하드려요! 정리 잘해주셔서 재밌게 읽고 갑니당..!

1개의 답글

관련 채용 정보