오늘은 DOCKER 개념 정리와 실습 포스팅을 해보겠습니다! DOCKER를 한번도 써본 적이 없는데, 사용할 필요성을 계속 느끼다가 이제서야 정리해봅니다. 사용하게 된 계기는 AWS LAMBDA에 TENSORFLOW 기반으로 작동되는 코드와 패키지들을 올리려고 하니, ZIP 파일 관련해서 250MB 제한이 있어서, 급히 공부 중입니다! 그러면 시작해보겠습니다.
오늘의 포스팅은 유튜브 '드림코딩'님의 영상을 참고하여 작성하였습니다. 이 글을 보기 보단, 영상으로 보시면서 실습해보시면, 이해가 빠르니 해당 영상으로 보시는 걸 더 추천 드립니다!
https://www.youtube.com/watch?v=LXJhA3VWXFA
1. DOCKER 개념
Docker란 어플리케이션을 패키징 할 수 있는 툴입니다. Container라고 하는 작은 Software Unit 안에, Application, System tools, Dependencies를 하나로 묶어서 다른 서버나 pc에서 돌아갈 수 있게 합니다. Node js를 예로 들어도, npm 등 외부 라이브러리 dependencies, configs 등 다양한 구동 환경 때문에, 버전이 맞지 않는 등 다양한 문제들이 생기는데요. 이러한 문제를 해결하기 위해서 Docker가 탄생했습니다. 하지만 Docker는 가상머신과는 차이가 있습니다.
1) Virtual Machine VS Container
가상머신은 하드웨어 같은 Infrastructure 위에 Hypervisor를 이용해서, 각각의 가상의 머신을 만들 수 있습니다. 한 운영체제 위에서 동일한 어플리케이션을 각각의 고립된 하나의 환경에서 구동하기 위해선 이렇게 구동해야만 했습니다. 이 가상머신은 OS를 포함하고 있기 때문에, 굉장히 무겁고 시작하는데 오래 걸리고 Infrastructure의 리소스를 많이 잡아먹는 원인이 될 수도 있습니다. 이를 경량화 시킨 방식이 Container입니다.
Container는 하드웨어에 설치된 운영체제, 즉 Host os에서 Container Engine이라는 소프트웨어만 설치하면, 개별의 어플리케이션을 고립된 환경에서 구동할 수 있게 해줍니다. 즉 컨테이너는 운영체제를 포함하지 않기 때문에, 훨씬 경량화시킬 수 있습니다. 다만 Container 엔진이 필요한데, 이 Container 엔진이 Host OS에 접근해서 필요한 것들을 수행해준다고 보시면 됩니다. 이 Container 엔진 중에 가장 많이 사용되는 것이 바로 Docker입니다.
2) DOCKER의 동작 순서
- Docker는 Dockerfile을 이용해서
- Image 파일을 만들고
- Container를 구동합니다.
첫번째로 Apllication을 구동하기 위해 꼭 필요한 file은 무엇이 있는지(Copy files), 두번째로 어떤 Framework이나 Library를 설치해야하는지, 외부 Dependencies를 명시 가능하며(Install dependencies) 세번째로 어떤 환경변수를 설정해야하는지,네번째로 어떻게 구동해야하는지 스크립트도 포함할 수 있습니다.
이렇게 작성한 Dockerfile을 이용해서 이미지를 만들 수 있습니다. 이 때 모든 세팅들이 포함되어있는 것들, 즉 실행되고 있는 appllication을 스냅샷으로 찍어서 저장해둡니다. 이는 불변의 상태입니다.
이후 이 Image들을 컨테이너에 넣어두고, 샌드박스처럼 잘 캡쳐해둔 어플리케이션의 이미지를 고립된 환경에서, 개별적인 파일시스템 안에서 실행할 수 있는 것을 말합니다. 컨테이너 안에서 어플리케이션이 동작한다고 생각하시면 됩니다!
이해를 쉽게 하기 위해선, 이 이미지를 CLASS로 생각하시면 되고, 이 이미지를 이용해서 실제로 어플리케이션이 동작하는 각각의 CONTAINER를 만들 수 있습니다.
이 이미지를 이용해서 여러개의 CONTAINER를 만들고, 이 각각의 컨테이너 안의 내용들은 개별적으로 수정이 가능합니다. 각각의 컨테이너에서 수정된 파일들이 있다면, 이미지에는 전혀 영향을 끼치지 않습니다.
2. DOCKER 이미지 배포 과정
Docker는 Local에서 이미지를 생성하고, Container Registry에 이를 등록한 뒤에, Server 혹은 다른 PC에서 이 이미지를 가져와서 그대로 사용한다고 보시면 됩니다. 그런데 반드시 이 Container를 구동하기 위해서, Docker와 같은 Container Engine이 설치되어 있어야합니다.
이 Image를 업로드 하기 위해서 Container Registry를 사용할 때, Public, Private으로 나뉘게 됩니다. 보통 Public으로 Image를 업로드할 때는 Docker hub를 많이 사용하며, 회사에서 프로젝트 등 image를 공개하고 싶지 않을 때, aws, gcp, azure를 사용합니다.
3. 총 정리
- Local Machine
- Docker file을 통해 Image를 Build
- Container Registry
- Image를 Container Registry로 Push
- Server
- Image를 Pull해오고, 이를 Server에서 RUN
다음 포스팅에선, node.js로 간단히 서버를 만들어보고 해당 서버를 위 과정을 거쳐서 Container로 실행해보는 실습을 진행하겠습니다!
https://dataengineerstudy.tistory.com/192
'데이터 엔지니어링 > Docker' 카테고리의 다른 글
[DOCKER] DOCKER 실습(feat. node.js) (0) | 2023.06.11 |
---|