본문 바로가기
Back-end/Docker

Docker : 도커란 무엇일까? [1/2]

by somlang_bba 2023. 4. 7.
728x90

 

 세계적인 개발자 커뮤니티 Stack Overflow의 2022년 말 기준으로 통계자료를 보았을 때, 개발자들의 개발 플랫폼으로 부동의 1위인 Linux, 사용자가 많은 Windows와 함께 Docker가 각광을 받고 있다. 참고로 도커는 Go언어로 작성되어 있다고 한다.

 

Stack Overflow의 데이터로 통계를 낸 99Firms.com의 그래프

 

 불과 몇년 전까지만 해도 저연차의 개발자들이나 데브옵스에 관심이 없는 개발자들은 알지 못해도 크게 문제가 없던 도커라는 기술이 왜 이렇게까지 인기가 많은 것인지, 그리고 소프트 웨어 개발자라면 Docker를 꼭 배워야 하는 것인지 궁금해졌다.

 

 

 

Docker를 이용하는 방법


우선 무엇보다 이 기술을 공부해야 할지부터 판단해보기로 하자. 도커라는 기술을 배우고 익히더라도 사용처가 불분명하다면 시간을 들여 공부를 할 필요가 없겠다 생각이 들었기 때문에 도커를 이용하여 무엇을 할 수 있을지가 궁금했다.

 

1. 배포환경과 개발환경의 동일화

 Docker를 이용하면 Image를 기반으로 동일한 환경을 조성할 수 있기 때문에 배포환경과 개발환경이 같아지므로 환경에 의한 에러(휴먼에러)들을 최소화 할 수 있다. 예를 들자면 Windows OS에서 개발을 한 어플리케이션을 구동하려 Linux환경의 배포환경에 배포를 시도하다가 어떠한 라이브러리를 누락하거나 환경설정 등에서 동일하지 않은 부분이 발생하여 어플리케이션 구동에 문제가 생길 수 있다. 하지만 Docker를 이용하면 Image기반으로 동일한 환경을 구성하여 배포할 수 있기 때문에 환경설정까지도 동일하게 맞출 수 있다.

 

2. 개발하면서 테스트 환경을 쉽게 구성했다가 삭제할 수 있다.

 특히나 백엔드 개발자의 경우 DB를 이용한 테스트코드를 작성하는 경우가 종종 발생한다. 하지만 DB 서버를 자신의 컴퓨터에 설치하기가 꺼려지는 경우들이 있을 것이다. 이러한 경우 Docker에서 제공하는 DB-server 이미지를 바탕으로 컨테이너를 생성하고 운영하면 서버를 따로 설치하지 않고 도커와 통신하며 DB를 사용할 수 있다.

*참고: DB컨테이너를 생성할 때 볼륨 옵션을 주면 Container를 삭제하거나 내려도 DB에 쌓인 데이터를 유지 가능하다.

 

3. Toy Project에 이용하기 용이하다.

 Docker hub에 가보면 이미 여러가지 기술들을 이용하여 환경설정을 해놓은 이미지들을 공유하고 있다. 평소에 관심이 있었던 기술들을 하나하나 찾아가며 설치하는 것이 아닌 마치 Maven이나 Gradle처럼 의존성을 끌어다 쓰듯이 개발환경을 조성할 수 있게 되는 것이다.

 

 

그래서 Docker가 뭐야?


Docker를 배워두면 쓸모있는 것은 알겠다. 그럼 Docker가 무엇인지 하나하나 파헤쳐보자.

우성 어떤 기술이던지 공식문서를 보는것이 중요하므로 도커의 공식홈페이지에 가보도록 하자.

 

대충 "똑같은 개발환경을 만들어서 개발자가 개발하기에도, 배포하기에도 편리함"이라는 말

 

위의 말은 개발환경을 배포환경에 운송(shipping)한다는 얘기다. 소스코드까지도 함께 이미지에 실어서 보낼 수 있기 때문에 개발환경에서 테스트를 열심히 하고 배포환경에 소스를 배포해서 운영해도 되는 것이다.(물론 물리적인 네트워크환경이나 그 이외의 것들까지 고려한다면 안되겠지만..)

728x90

가상화


 도커의 핵심은 가상화로 인한 Host OS와의 분리이다. 예를들어 여러버전의 DB를 설치하려할 때, 보통 특정 DB는 default port라던지 환경변수 path를 가지기 때문에 같은 DB의 다른 버전이라면 여기서 충돌이 일어나기 쉽다. 하지만 도커를 이용하면 Host OS와는 별도의 환경설정(Path)와 Port등을 가지기 때문에 이런 고민을 덜 수 있다.

 그렇다면 가상화를 구현하는 건 도커만이 가능한 것일까? 그렇지 않다. 이전에 이미 Hyper-V(Hypervisor) 라는 기술을 이용해서 가상화를 통한 OS 분리는 하고 있었다. 그렇다면 도커가 가진 장점이 무엇이길래 갑자기 뜨는 기술이 된 것일까?

 

하이퍼 바이저는 하드웨어나 운영 체제 위에서 작동하는 가상화 기술로 여러개의 Guest OS를 새로 만들어서 서로다른 환경을 만든다. 반면 도커의 경우에는 리눅스의 커널 위에 새로운 OS가 아닌 Container를 띄워 공간을 분리한다.

Hyper-V(왼쪽)과 Docker(오른쪽)의 구현 차이

따라서 OS를 만드는 하이퍼바이저는 필요한 라이브러리나 환경설정들이 도커의 컨테이너에 비해 많기 때문에 부팅시간이 더 필요 할 수밖에 없다. 또한, 리소스를 사용하는 측면에서도 도커가 유리하다.

 

(이게 맞는 표현인지는 모르겠지만) 쉽게 말하자면 Hyper-V는 자녀가 독립을 원할 때, 자신이 가진 사유지에 건물을 하나 더 만들어서 거기에 살라고 하는 것이고 도커는 같은 건물 내에 옥탑방을 만들어주는 정도로 볼 수 있다.

 

 

출처1: 개요 (docker.com)

출처2: 하이퍼바이저와 도커: 둘의 완전한 비교 (hitechnectar.com)

출처3: 하이퍼바이저(hypervisor) 와 도커(docker) :: 이것저것 (tistory.com)

728x90

'Back-end > Docker' 카테고리의 다른 글

Docker : 도커란 무엇일까? [2/2]  (2) 2023.04.10
Docker : cli를 통한 컨테이너 생성  (0) 2023.01.19
Docker : 컨테이너 관리  (0) 2023.01.19