Published 2023. 2. 3. 17:33
728x90
반응형

도커에 대해서 이해한 내용을 적어보려고 한다.
솔직히 도커는 이렇다! 라고 잘 설명하기가 쉽지 않은 것 같다. 뭔가 알 것 같은데 잘 모르겠는 느낌?
그냥 도커는 컨테이너를 기반으로 하는 오픈 소스 플랫폼이고 이미지를 생성해 컨테이너를 실행한다.
그리고 컨테이너에 원하는 애플리케이션을 실행할 수 있다. 정도로만 이해하고 있는 것 같다.
하지만 누군가에게 설명할 때 도커는 이렇다라고 설명하기가 어려운 건 왜일까? 라는 생각에 다시 한번 정리해보는 시간을 가졌다.

 

Docker

도커가 무엇인지 여러 블로그와 사이트들을 찾아보았다. 찾아본 결과 도커에 대한 정의는 다음과 같았다.

 

  • 애플리케이션을 신속하게 구축하고 테스트하고 배포할 수 있는 소프트웨어 "플랫폼"
  • 가상 머신처럼 독립된 실행환경을 만들어주는 "도구"
  • 컨테이너형 애플리케이션의 빌드, 배치 및 관리를 위한 오픈 소스 "플랫폼"
  • 컨테이너 기반의 오픈소스 가상화 "플랫폼"

 

내가 적어놓은 정의들 말고도 여러 블로그들에서 도커에 대해서 소개할 때
"컨테이너", "독립된", "가상화", "신속한 빠르게" 라는 단어들이 주로 보였다.

 

그래서 내가 생각해본 도커는 이렇다.
컨테이너를 기반으로 애플리케이션을 실행하는데 격리되어 있어 독립적인 실행 환경을 가지고 있고 가상 머신보다 신속하고 빠르게 만들 수 있는 플랫폼을 제공해준다.

컨테이너 기반의 애플리케이션을 독립적인 실행 환경을 신속하고 빠르게 만들어주는 오픈 소스 가상화 플랫폼

 

 

컨테이너가 뭐야

여기서 도커를 이해하기 위해서는 "컨테이너" 가 무엇인지 잘 이해하고 있어야 한다.
도커에서 말하는 컨테이너는 격리된 공간에서 프로세스가 동작하는 기술 을 말한다.

 

컨테이너에 대해서 설명할 때 기존의 가상화 방식과 지금 컨테이너를 활용하는 방식에 대해서도 이해하고 넘어가면 좋다고 생각한다.
면접을 보다보면 기존의 가상화 방식인 가상 머신과 도커의 차이점에 대해서 잘 이해하고 있는지 물어보는 경우도 많았다.

 

먼저 가상 머신은 호스트 OS 에 하이퍼바이저를 통해 게스트 OS 를 가상화해서 사용하는 방식이다.
그래서 가상머신을 사용하기 위해서는 호스트 OS 위에 게스트 OS 를 설치해야하고 별도의 환경을 다시 구축해서 사용해야 하기 때문에
많이 무겁고 느리다는 얘기를 많이 한다. 이러한 부분을 보완하기 위해 XEN 과 같은 반가상화 방식이 등장했다고 하지만 그래도 성능면에서 많은 문제가 있다고 한다. 이런 점을 개선하기 위해서 프로세스를 격리하는 방식이 나왔다.

 

프로세스를 격리하는 방식에는 다양한 방식이 있고
리눅스에서 리눅스 컨테이너를 통해 단순히 프로세스를 격리시키기 때문에 가볍고 빠르게 동작한다고 한다.
리눅스 컨테이너는 리눅스의 cgorup 과 namespace 를 이용한다고 하니 이 부분에 대해서도 별도로 공부하면 좋을 것 같다.

 

 

이미지(image)

도커에서는 컨테이너와 함께 이미지에 대해서도 잘 알아야 한다.
이미지는 컨테이너를 실행하는데 필요한 파일과 설정값 등을 가지고 있는 것을 말한다.
이미지는 상태값을 가지지 않고 변하지 않는다.
컨테이너는 이런 이미지를 실행한 상태라고 볼 수 있다. 이미지를 통해 여러 컨테이너를 생성할 수 있고 컨테이너를 실행한 이후 변경된 설정 값이나 상태에 대해서는 컨테이너에 저장되기 때문에 이미지를 통해 다시 컨테이너를 실행하게 되면 변경했던 설정 값이나 상태가 사라지게 된다. 그리고 컨테이너를 삭제하더라도 이미지는 삭제되지 않는다.

 

이러한 이미지를 누구나 쉽게 만들고 배포할 수 있고 도커 허브 라는 저장소를 통해서 이미지를 공유하기도 하고 관리할 수도 있다.
도커 허브에 들어가보면 정말 많은 이미지가 있는 것을 확인해볼 수 있다.

 

 

Dockerfile

이미지를 만들기 위해서 Dockerfile 이라는 파일을 통해 이미지를 생성할 수 있다.
Dockerfile 을 작성하기 위한 문법이 따로 있어 문법에 대해서도 알아야 한다.
이 문법에 대해서는 따로 정리해봐야겠다.

 

 

레이어 저장 방식

도커 이미지는 컨테이너를 실행하기 위한 모든 정보를 가지고 있다.
처음에 이미지를 통해 컨테이너를 실행하고나서 이미지를 수정후에 다시 실행했을 때 이미지를 처음부터 다시 실행하게되면 정말 비효율적이라고 생각한다. 그래서 도커는 이런 문제를 해결하기 위해서 레이어 라는 개념을 사용했다.

 

레이어라고 하면 일반적으로 포토샵으로 그림 그릴때 각 레이어에 그려서 합치고 하는 게 생각난다.
도커에서도 마찬가지로 각 레이어를 생성하고 레이어를 합쳐서 사용할 수 있게 해준다.

 

그래서 이미지는 여러개의 레이어로 구성되어있고 이미지에 추가하거나 변경되는 경우 레이어가 추가되거나 변경되게 된다.
따라서 추가되거나 변경된 레이어만 다운로드 받아 실행하면 된다.
확실히 처음부터 다시 다운로드 받아 실행하는 것보다 수정된 내용에 대해서만 다운로드 받아 실행하게 되면
매우 효율적으로 이미지를 생성하고 관리할 수 있을 것 같다.

 

 

이미지 경로

이미지는 url을 통해 관리할 수 있다. 그리고 이미지의 이름과 함께 콜론(:) 으로 태그를 붙일 수 있다.
수정할 때마다 이미지의 버전을 다르게 해주어 버전 관리가 가능하고 롤백도 쉽게 할 수 있다.

 

 

그럼 도커는 왜 사용하지?

내가 생각하는 도커를 사용하는 이유는 도커 이미지를 통해 설정값이나 필요한 파일들을 관리할 수 있다는 점이다.
기존에 사용하던 설정을 통해 이미지를 만들어 도커 허브에 올리고 다른 서버에서 도커를 설치해 허브에서 이미지를 다운로드 받아 실행하면 기존에 사용하던 설정을 그대로 가져와 실행해주기 때문에 쉽게 개발 환경을 만들 수 있기 때문에 별도의 환경 설정을 할 필요도 없고 동일한 환경을 쉽게 구축해서 작업을 진행할 수 있다.
매번 동일한 환경을 설정해야하는 번거로움이 줄어들고 이미지를 통해 관리가 가능하고 가상 머신보다 성능적으로 효율적이기 때문에 도커를 사용하는 게 아닐까 생각한다. 이 외에도 도커를 사용하는 다양한 이유들이 있다고 생각한다.

 

 

마무리

도커에 대해서 정리하려고 했는데 더 어수선해진 기분은 뭘까... 도커가 무엇인지 그리고 컨테이너가 무엇이고 이미지를 왜 사용하는 지에 대해서 어느 정도 이해하고 있다고 생각했는데 배경지식이 부족한걸까 아니면 깊게 이해하기 위한 시간이 부족한걸가 하는 생각이 든다.
오늘은 이쯤에서 마무리하고 나중에 도커에 대해서 다시 처음부터 정리해보는 시간을 가져야겠다.

 

- 참고 사이트

https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html

 

초보를 위한 도커 안내서 - 도커란 무엇인가?

도커를 처음 접하는 시스템 관리자나 서버 개발자를 대상으로 도커 전반에 대해 얕고 넓은 지식을 담고 있습니다. 도커가 등장한 배경과 도커의 역사, 그리고 도커의 핵심 개념인 컨테이너와 이

subicura.com

https://tecoble.techcourse.co.kr/post/2021-08-14-docker/

 

docker 이해하기

tecoble.techcourse.co.kr

 

728x90
반응형
복사했습니다!