Notice
Recent Posts
Recent Comments
관리 메뉴

즐겁게, 코드

Docker - 01. 이미지와 컨테이너 본문

☁️ 클라우드/Docker

Docker - 01. 이미지와 컨테이너

Chamming2 2021. 4. 20. 23:34

산학프로젝트 과목의 AWS 특강을 듣고 CI/CD와 인프라에 대한 내용에 관심이 생겨 찾아보던 중, "도커" 라는 플랫폼을 통해 개발과 운영 환경을 통합할 수 있음을 알게 되었습니다.

 

이번 글에서는 도커와 도커의 핵심 구성요소인 이미지와 컨테이너에 대해 간단히 정리해보도록 하겠습니다.

1. Why Docker?

당연하지만 회사나 조직에서 근무하는 모든 인원들의 개발 환경이 같을 수는 없습니다.

누구는 리눅스를, 누구는 맥을, 누구는 Node.js 14를, 누구는 Node.js 12를... 이렇게 모두 다른 환경에서는 설치 과정과 실행방법이 모두 다를 수밖에 없지만, 도커를 활용하면 어떤 환경에서든 동일한 조건과 방법으로 소프트웨어를 실행할 수 있습니다.

(※ 아마 여기서 버추얼박스같은 가상 OS를 떠올리신 분들도 계실 텐데, 도커의 컨테이너는 가상 OS보다 훨씬 빠르고 가볍습니다.)

2. 컨테이너

도커는 "컨테이너" 라는 환경에서 소프트웨어를 실행하는데요, 컨테이너에는 해당 소프트웨어를 실행하기 위한 모든 의존성 파일과 설정, 실행 환경의 이미지 등이 포함됩니다.

Node 14 버전의 도커 이미지를 설치하는 모습으로, 396c... 등 각 해시에 대응하는 것이 바로 "도커 이미지" 입니다.

예를 들어 Node.js의 도커 이미지를 설치하면 리눅스의 경량 버전인 "알파인 리눅스(Alphine linux)" 이미지가 함께 설치되는데요, 따라서 컨테이너를 실행하면 Mac이든 Window든 "알파인 리눅스에서 노드를 실행해라" 라는 동일한 결과를 얻을 수 있는 것입니다.

3. 이미지

이미지는 컨테이너를 실행하기 위한 소프트웨어들의 소스 코드와 의존성 파일 등을 묶어놓은 형태로, 계층별 이미지들을 하나로 묶어 컨테이너를 구성하게 됩니다. (Ex. Node.js 이미지 = Alphine Linux 이미지(OS 계층) + Node.js 이미지(어플리케이션 계층)

잠깐 도커의 장점을 하나 소개하자면, 이런 이미지들은 컨테이너를 실행하기 위한 모든 정보와 의존성들을 포함하고 있기 때문에 용량이 몇백MB 단위로 큰 편입니다.

그런데 구글은 서비스 운영에 매주 약 20억 개의 컨테이너를 실행하고 있다고 하는데요, 아무리 구글이라도 100MB * 20억의 이미지 용량은 감당하기 버겁지 않을까요?

Node 15 버전으로 도커 이미지를 업데이트하는 모습인데요, 동일한 계층 이미지는 새로 설치하지 않습니다(!)

그러나 도커는 위에서 언급한 계층 구조를 활용해 동일한 계층의 이미지가 이미 설치되어 있다면 이를 새롭게 설치하지 않고 기존 이미지를 재활용할 수 있습니다.

이게 얼마나 혁신적인 거냐면, npm을 통해 패키지를 설치하면 node_modules에 셀 수 없이 많은 의존성들이 함께 설치되는 것을 자주 보셨을 것입니다. 그런데 도커에서는 새로운 이미지를 설치하더라도 해당 의존성이 로컬에 존재한다면 새로 설치하지 않아도 된다는 것이죠.

 

그럼 다음 번에는 컨테이너를 통해 어떻게 실제 소프트웨어를 실행하는지에 대해 알아보겠습니다! 😄

[함께 읽어보면 좋은 글들] 

 

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

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

subicura.com

 

Docker란 무엇입니까? | AWS

Q: Docker로 어떤 작업을 할 수 있습니까? Docker를 사용하면 환경에 구애받지 않고 애플리케이션을 신속하게 배포 및 확장할 수 있으며 코드가 문제없이 실행될 것임을 확신할 수 있습니다. 이는 Doc

aws.amazon.com

 

반응형
Comments
소소한 팁 : 광고를 눌러주시면, 제가 뮤지컬을 마음껏 보러다닐 수 있어요!
와!! 바로 눌러야겠네요! 😆