본문 바로가기
[Cloud & Infrastructure]/[Docker]

[Docker] Docker는 무엇인가?

by 코드몽규 2022. 3. 4.
반응형

[이전 글]

 

[가상화와 컨테이너] 가상화와 컨테이너의 차이점

이번 포스팅은 가상화와 컨테이너의 차이점을 다뤄보겠다. 우선 가상화에 대한 개념 혹은 하이퍼바이저(hypervisior)에 대한 개념이 없다면 해당 글을 먼저 읽고 오는 것을 추천한다. [가상화] [Docke

codemonkyu.tistory.com

위의 글에서 컨테이너의 개념에 대해 간단하게 정리했었다.

혹시 컨테이너의 개념을 모른다면 해당 글을 먼저 읽고 오는 것을 추천한다.


Docker 란?

Docker는 컨테이너 기반의 오픈소스 가상화 플랫폼이다.

 

즉, 컨테이너를 생성시켜주는 플랫폼이라고 생각하면 된다.

 

 

그럼 왜 Docker를 사용할까?

도커를 사용하는 이유는 도커의 등장 배경을 알면 이해하기 쉽다. 

 

과거에는 Server를 실행시키기 위해서는 사용자 추가, 가상 환경 구현, 네트워크 설정, 프로그래밍, 패키지 설치, DB 등등 앞서 말한 모든 것들이 하나의 환경에서 관리가 되었다. 

 

생각해보자 만약 앞서 말한 수많은 도구들 중 하나에 에러가 발생한다면 어디서 어떻게 왜 에러가 났는지 쉽게 찾을 수 없을 것이다. 즉 도커를 사용하기 전에는 서버의 유지보수 측면에서 많은 어려움이 있었다.

 

반면, 도커는 기능별로 컨테이너를 만들어서 올린다. 아래 그림을 참고해보자.

앞에서 말했듯이 보통 우리는 에러가 나면 코드를 수정하고 이를 다시 업데이트시켜야 하는데

이 과정에서 전체 서비스가 지연되며 이로 인해 또 다른 문제가 발생할 수 있다.

 

하지만 도커는 컨테이너별로 기능들을 잘게 쪼개 놓아서

내가 원하는 컨테이너만 수정하고 업데이트할 수 있다는 장점이 있다. 

 

그럼 docker의 컨테이너는 어떤 방식으로 가상 환경에서 사용되는 걸까?


Docker의 컨테이너 생성방법

 

아래 그램을 보고 docker를 이용한 컨테이너 가상 환경에 대해 이해해보자

docker 컨테이너의 생성과정

docker image란?

  이미지는 컨테이너 실행에 필요한 파일과 설정값을 포함하고 있는 dockerfile의 복사본이라고 생각하면 된다. 때문에 dockerfile에 필요한 정보를 기입하고 이를 build하여 image화 하면 file을 항상 사용하지 않아도 이미지만 사용하여 여러개의 container를 생성할 수 있는 것이다.

 

docker image만들기 

  docker이미지는 프로그램실행에 필요한 정보를 갖고 있기 때문에 용량이 무거워질 수 있다. 이를 방지 하기 위해 레이어라는 개념을 사용한다. 위 그림 처럼 이미지는 여러개의 레이어(layer)로 이루어져 있고 업데이트할때마다 새로운 레이어가 새로 더해진다.

 

이러한 이미지 파일을 컨테이너(Container)로 만들면 그 위 R/W layer(읽기/쓰기)가 추가된다. 때문에 컨테이너에서 이미지가 실행되어 생성하는 파일이나 변경되는 내용은 R/W layer에 저장되기 때문에 새로운 컨테이너와 내용이 추가되어도 최소한의 용량만 사용하게 된다.

 

dockerfile이란?

  도커는 이미지를 만들기위해 dockerfile을 준비해야한다. 즉 dockerfile은 이미지 빌드용 DSL(domain-specifit-Language)파일이다. 

docker 가상환경 설명

  • 이미지 및 컨테이너로 구성 
  • 설정된 값을 이미지로 구성하여 컨테이너에서 실행할  수 있다.
  • Hypervisor엔진 사용하지 않음, docker engine을 통해 guest os 없이 실행 가능

docker 가상 환경 특징

  • Docker에 이미지를 한번 생성해 놓으면 이후 매우 간편하게 동일한 환경을 쉽게 재현 가능 (자동화)
  • Docker 이미지를 통해 장애 발생에 빠르게 대처 가능 (장애 이전 이미지로 되돌아가는 느낌)
  • 웹 서버 환경 구축과 이에 관련된 수많은 반복 작업을 매우 간단하게 해결 가능 (자동화)

docker architecture

docker daemon

  • docker_host 내에서 도커 객체들을 관리하는 역할이다.

docker registry

  • 도커의 이미지를 저장
  • docker pull 혹은 docker run 명령어를 실행하는 경우 필요한 이미지를 Docker Registry 에서 꺼내서 사용합니다.
  • docker push 명령어를 실행하는 경우 이미지가 구성된 Registry 에 푸쉬합니다.

 

 


요약

1. 원하는 개발 환경을 파일(dockerfile)에 저장하면 docker는 어떤 머신에든 해당 환경을 시뮬레이션해줌(container생성)

2. docker를 통해 만든 환경은 각기 독립적으로 존재하기 때문에 모듈식으로 관리가 가능

 

 

 

 

반응형

댓글