모카스터디/ETC 개발 지식

Docker란? [파이썬 가상환경 vs 도커 컨테이너]

softmoca__ 2024. 1. 24. 16:38
목차

 

우선 참빛 설계의 사회적 약자를 위한 '음성인식 키오스크'를 주제로 UMC2기 Node 서버 팀원들과 프로젝트를 하던 중 필요성을 느꼈다.

그래서 Docker가 무엇인지 간단하게 알아 보자 !

 

프론트와 백엔드에서 노드 서버 구축 후 ai 라이브러리들을 사용하여 자연어처리를 하기 위해  파이썬으로 flask 서버를 구축 하기로 했다.

 

파이썬을 사용하기 위해 셋업을 하던 중 결국 개발 환경 문제를 해결 하지 못하였다.
파이썬 코드를 플라스크 서버에서 사용하기 위해  파이썬 가상환경 세팅을 통일을 하는 부분에서 문제를 직면하였다.

 

아나콘다로 배포할 경우 mac사용자가 제작한 환경을 윈도우 사용자에게 공유할 수 없었다.

또한 같은 mac 유저 끼리도 pip 버전이 차이가 나면 pip명령어로 설치한 konly, Mecab 라이브러리들을 공유가 안되었다.

 

 

python -m venv 명령어로 배포할 경우 깃 레포지토리의 디렉토리에 venv 가상환경을 올려 진행 할 경우

버전 관리에 불필요한 방대한 용량과 파일들도 자동으로 올라가게된다.

mac사용자 끼리는 환경이 공유가 되었지만 mecab-ko-dic의 사용자 정의 사전은 공유가 되지 않았다..

또한 아나콘다에서 발생한 것과 같이 mac,window, Linux와 같이 다른 운영체제 간의 호환성 문제가 생긴다.

결국 도돌임표가 되는것이다.

 

결국 위 와같은 이슈로 인해 도커를 도입하게 되었다.

 

 

 

자 그럼 도커란 무엇이고 왜 사용하는 것일까?

도커는 environment disparity(환경격차) 문제점을 해결해준다.


예를 들면 나의 컴퓨터는 윈도우이고 서버는 리눅스인 경우이다.
이런 경우에 도커를 통해 다른 머신에서도 같은 환경을 구현할 수 있다.

1.윈도우에 도커 설치 

2.서버에 도커 설치

3.docker파일 생성
4. 구현하고자 하는 환경을 설정한다.(예를 들면 우분투,파이썬, 깃 ,,등등)
5.이 파일을 서버,그리고 컴퓨터 둘다 에게 공유한다.
6.도커는 그 파일을 읽고, 필요한것들을  다운로드받고 해당 설정한 환경과 같은 버츄얼 컨테이너(가상 박스)를 컴퓨터에 만든다.

 

위와같은 일련의 과정으로 서로다른 환경에서도 동일한 환경으로 개발이 가능하다.

 

 


도커의컨테이너들은 독립적이다. 그래서 하나의 서버에 다른 많은 수의 컨테이너를 가질 수 있다.
즉, 도커 덕분에 매번 새로 개발을 할때 마다 새로운 서버를 구축(구매)하고, 설정을 할 필요가 없다.

1.원하는 개발 환경을 파일에 저장하면, docker는 이를 내가 원하는 어떤 머신에든 해당 환경을 시뮬레이션 해준다.
2.이러한 환경들은 각기 독립적으로 존재하기 때문에, 원하는 무슨 환경이든 모듈식으로 관리가 가능한다.
그래서 파이썬 서버, 자바서버, 데이터베이스 서버 등등 이렇게 모두 추가로 구매할 필요가 없다 

 

 

도커는 각 요소들이 설치된 모습을 '이미지'라는 형태로  저장을 한다.
각제품마다 공식적으로 제공되는 이미지도 있고 자신이 원하는대로 만들 수도 있다.

git으로 저장된 내용들이 Github에 올려지는것처럼  dockr이미지들은 dockerhub라는 곳에 업로드 되어 공유되고 다운받아 질수 있다.

 


그리고 이렇게 이미지로 저장된 항목들이 함께 연결되어 동작하도록 설정된 상태를 명령어 택스트나 문서 형태로 저장 할수도 있다. 

도커는 이것들을 바로 컴퓨터에 설치하지 않고 컨테이너라고 하는 독립된 가상공간을 만들어내서 복원을 한다.

 

 

 

도커는  가상 컴퓨터와는 다른 개념이다.

 

가상컴퓨터는 한 물리적 컴퓨터 안에 각각 OS를 가동하는 가상 컴퓨터들이 물리적 자원을 분할해서 써 성능에 한계가 생긴다.

 

하지만 도커는 OS단까지 내려가는게 아니라 실행 환경만 독립적으로 돌리는 것이어서 컴퓨터에 직접 요소들을 설치한거랑 별차이 없는 성능을 낼 수 있고 가상 컴퓨터보다 훨씬 가볍고 빠르게 각각을 설치하고 켜고 끄고 서로 연동할 수 있다.

 

즉, VM은 GuestOS를 각각 할당하고, Docker는 GuestOS를 할당하지않는다.

 

파이썬 가상환경 VS 도커 컨테이너

파이썬 가상환경은  파이썬 버전과 파이썬 라이브러리들의 버전 종속성을 저장한다.

그로 인해 배포시 VM을 만든 사용자의 OS와 관련 라이브러리가 다른 새로운 사용자의 로컬 PC의 OS와 패키지 버전이 다를 경우

그 공유된 해당 가상환경이 새롭게 정착한 PC의 가상환경에 맞혀 가상화 하는 과정에서 가상환경 세팅이 불안정해진다.

 

하지만 도커 컨테이너는 OS단 까지 내려가지 않아 호스트 시스템과 독립적으로 실행이 된다.

고로, 서로 다른 환경에서 원활하게 공유하여 사용이 될 수 있다.