일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 백준
- JavaScript
- 블록체인
- 컴퓨터공학
- 클라우드
- 웹
- CSS
- 백엔드
- TypeScript
- k8s
- 프론트엔드
- 이더리움
- docker
- AWS
- 쿠버네티스
- kubernetes
- 자바스크립트
- 파이썬
- 리액트
- 이슈
- node.js
- 솔리디티
- 알고리즘
- BFS
- es6
- 가상화
- 타입스크립트
- HTML
- next.js
- react
- Today
- Total
즐겁게, 코드
Docker - 01. 이미지와 컨테이너 본문
산학프로젝트 과목의 AWS 특강을 듣고 CI/CD와 인프라에 대한 내용에 관심이 생겨 찾아보던 중, "도커" 라는 플랫폼을 통해 개발과 운영 환경을 통합할 수 있음을 알게 되었습니다.
이번 글에서는 도커와 도커의 핵심 구성요소인 이미지와 컨테이너에 대해 간단히 정리해보도록 하겠습니다.
1. Why Docker?
당연하지만 회사나 조직에서 근무하는 모든 인원들의 개발 환경이 같을 수는 없습니다.
누구는 리눅스를, 누구는 맥을, 누구는 Node.js 14를, 누구는 Node.js 12를... 이렇게 모두 다른 환경에서는 설치 과정과 실행방법이 모두 다를 수밖에 없지만, 도커를 활용하면 어떤 환경에서든 동일한 조건과 방법으로 소프트웨어를 실행할 수 있습니다.
(※ 아마 여기서 버추얼박스같은 가상 OS를 떠올리신 분들도 계실 텐데, 도커의 컨테이너는 가상 OS보다 훨씬 빠르고 가볍습니다.)
2. 컨테이너
도커는 "컨테이너" 라는 환경에서 소프트웨어를 실행하는데요, 컨테이너에는 해당 소프트웨어를 실행하기 위한 모든 의존성 파일과 설정, 실행 환경의 이미지 등이 포함됩니다.
예를 들어 Node.js의 도커 이미지를 설치하면 리눅스의 경량 버전인 "알파인 리눅스(Alphine linux)" 이미지가 함께 설치되는데요, 따라서 컨테이너를 실행하면 Mac이든 Window든 "알파인 리눅스에서 노드를 실행해라" 라는 동일한 결과를 얻을 수 있는 것입니다.
3. 이미지
이미지는 컨테이너를 실행하기 위한 소프트웨어들의 소스 코드와 의존성 파일 등을 묶어놓은 형태로, 계층별 이미지들을 하나로 묶어 컨테이너를 구성하게 됩니다. (Ex. Node.js 이미지 = Alphine Linux 이미지(OS 계층) + Node.js 이미지(어플리케이션 계층))
잠깐 도커의 장점을 하나 소개하자면, 이런 이미지들은 컨테이너를 실행하기 위한 모든 정보와 의존성들을 포함하고 있기 때문에 용량이 몇백MB 단위로 큰 편입니다.
그런데 구글은 서비스 운영에 매주 약 20억 개의 컨테이너를 실행하고 있다고 하는데요, 아무리 구글이라도 100MB * 20억의 이미지 용량은 감당하기 버겁지 않을까요?
그러나 도커는 위에서 언급한 계층 구조를 활용해 동일한 계층의 이미지가 이미 설치되어 있다면 이를 새롭게 설치하지 않고 기존 이미지를 재활용할 수 있습니다.
이게 얼마나 혁신적인 거냐면, npm을 통해 패키지를 설치하면 node_modules에 셀 수 없이 많은 의존성들이 함께 설치되는 것을 자주 보셨을 것입니다. 그런데 도커에서는 새로운 이미지를 설치하더라도 해당 의존성이 로컬에 존재한다면 새로 설치하지 않아도 된다는 것이죠.
그럼 다음 번에는 컨테이너를 통해 어떻게 실제 소프트웨어를 실행하는지에 대해 알아보겠습니다! 😄
[함께 읽어보면 좋은 글들]
'☁️ 클라우드 > Docker' 카테고리의 다른 글
Docker tag 커맨드로 이미지 사본 생성하기 (0) | 2022.04.06 |
---|---|
Distroless 베이스 이미지를 활용해 초경량 이미지 빌드하기 (0) | 2022.04.05 |
레이어 캐싱을 활용해 이미지 빌드 최적화하기 (0) | 2022.04.04 |