2021 스택오버플로워에서 설문 조사에서 Git 다음으로 가장 많이 사용하는 툴이 Docker 이고요. 많은 개발자들이 Docker를 배워 보고 싶다고 합니다. 그렇다면 이 Docker라는게 정확하게 무엇일까 얼마나 유용하고 어떤 곳에서 사용하는지 궁금하시죠
도커의 정의
어플리케이션을 패키징 할 수 있는 툴이라고 생각합니다. 컨테이너라고 불리는 하나의 작은 소프트웨어 유닛안에 우리 어플리케이션과 그에 필요한 시스템 환경설정 모든 디펜던시를 하나로 묶어서 다른서버 다른PC 그 어떤곳에도 쉽게 배포하고 안정적으로 구동할 수 있게 도와주는 툴이라고 생각하는데요 테크놀로지가 발전함에 따라서 우리 어플리케이션을 구동하는데 꽤 많은 것들이 필요해졌습니다. node.js를 예를 들어보면 우리의 소스파일만 서버에 배포하는 것으로는 우리 어플리케이션을 구동하는데 문제점이 있습니다. npm 외부 라이브러리를 사용한다면 여러 디펜던시와 그리고 환경 설정하는것 환경변수 이런 모든것들을 다 설정을 해줘야 되는데요
서버마다 개발하는 개발자들의 pc마다 이런 모든것들을 설치하고 설정하는것은 꽤 번거롭고 오류도 많이 발생할 수 있습니다. 내가 node.js를 가지고 있고 서버에도 node.js가 있으니까 내소스 코드를 서버에 배포하면 자동으로 동작하겠지 하고 생각하다가는 에러가 발생할 수 있다는거죠. 디버깅을 하다보면 node.js 버전이 맞지 않아서 발생하는 경우도 있습니다. 번거러운 문제점을 해결해 주기 위해서 도커가 탄생했는데요 이 도커 컨테이너안에는 어플리케이션 뿐만 아니라 어플리케이션을 정상적으로 동작하기 위한 node.js, 환경설정, npm, 여러 라이브러리들의 디펜던시, 어플리케이션에 필요한 리소스들이 포함될 수 있습니다.
<잠시 알고가기>
VM은 하드웨어 Infrastructure 위에 vmware나 virtualBox와 같은 Hypervisor 소프트웨어를 이용해서요 각각에 가상에 머신을 만들 수 있습니다. 한 운영체제 위에서 동일한 어플리케이션을 각각에 고립된 다른 환경에서 구동하기 위해서는 이 VM을 이용해서 어플리케이션을 구동해야 했습니다. VM은 각각에 운영체제를 포함하고 있기 때문에 맥이라는 OS 위에서 VM을 이용하면 윈도우와 리눅스를 동시에 구동할 수 있습니다. 운영체제를 포함하고 있어서 굉장히 무겁습니다. 시작하는데도 오래걸리고 컴퓨터 운영체제 Infrastructure 리소스를 많이 잡아 먹는 범인이 될 수도 있습니다. VM에서 경량화된 컨셉이 컨테이너 입니다. 하드웨어에 설치된 운영체제 Host OS에서 Container Engine 소프트웨어를 설치만 하면 개별적인 컨테이너를 만들어서 각각에 어플리케이션을 고립된 환경에서 구동할 수 있도록 해 줍니다.
이 Container Engine에서 가장 많이 사용되는것이 Docker Engine 입니다.
Docker 구성
동작하는 순서에 대해서 이야기를 해볼게요. 컨테이너를 만들고 배포하고 구동한다. 이해하시면 되는데요 컨테이너를 만들기 위해서는 총 3가지가 필요합니다.
Dockerfile은 컨테이너를 어떻게 만들어야 되는지 설명되어 있습니다. 요리로 치면 레시피 같은건데요. 어플리케이션을 구동하기 위해서 꼭 파일들은 어떤것이 있는지. 디펜던시 파일은 무엇이 있는지, 환경변수를 설정할 수도 있고 어떻게 구동해야 되는지 스크립트도 포함할 수 있습니다.
이렇게 작성한 도커파일을 이용해서 이미지를 만들 수 있는데요. 이 이미지안에는 Application을 실행하는데 필요한 코드 런타임환경 시스템툴 시스템라이브러리들이 포함되어 있습니다. 한마디로 얘기하면 실행되고 있는 어플리케이션 상태를 찰칵 스냅샷해서 이미지로 만들어둔다 생각하면 좋을것 같은데요. 변경이 불가능한 불변의 상태로 볼 수 있습니다.
자, 마지막 단계인 Container 인데요. 샌드박스처럼 우리가 잘 캡처해둔 어플리케이션 이미지를 고립된 환경에서 개별적인 파일시스템안에서 실행할 수 있는것을 말합니다. 컨테이너안에서 어플리케이션이 동작한다 볼 수 있을것 같은데요 고로 이 컨테이너는 우리가 준비한 어플리케이션을 찰칵 스냅샷한 이미지를 이용해서 어플리케이션을 구동하게 되는거죠.
Reference
https://www.youtube.com/watch?v=LXJhA3VWXFA
'7.유용한팁 > >> IT용어' 카테고리의 다른 글
검색엔진 최적화 SEO (0) | 2022.12.19 |
---|---|
데브옵스.. 그거 어떻게 하는 건데..☆ (0) | 2022.12.19 |
CI/CD (0) | 2022.12.10 |
댓글