본문 바로가기
DevOps/Docker

Docker와 container

by 민우's 코딩 2024. 1. 11.

Docker는 컨테이너 기술이다.  -> 컨테이너를 생성하고 관리하기 위한 도구이다.

 

그럼 여기서 소프트웨어 개발에서 컨테이너란 무엇이며 왜 사용해야 하는가?

 

소프트웨어 개발에서 컨테이너는 표준화된 소프트웨어 유닛이다.

 

예를 들어 NodeJS Application을 구축하는 경우에 NodeJS는 서버에서 JavaScript 코드를 실행하는데

사용할 수 있는 JS runtime 이다.

 

Docker로 bulid된 컨테이너가 있는 Application이 있는 경우 그 컨테이너에는 소스 코드 뿐만 아니라 NodeJS runtime과 코드를 실행하는데 필요한 기타 도구가 있을 수 있다.

 

동일한 NodeJS 코드와 도구를 사용하는 컨테이너는 NodeJS runtime에 항상 동일한 동작과 결과를 제공한다.

약간 쉽게 말하자면 학교에 갈 때 필요한 것들을 가방에 넣는 다는 느낌이다.

 

가방에 필요한 것을 다 넣고 친구와 만나고 내 가방안에 있는 것들을 친구와 공유 할 수 있다.

핸드폰 배터리가 부족할 때 내 가방에 있는 충전기로 충전을 해결하듯이 필요한걸 꺼내서 사용 할 수 있다!

 

컨테이너를 직관적으로 실제 선박에 있는 컨테이너와 비교해도 이해하기 쉬울 것 이다.

 

하나의 컨테이너는 다른 컨테이너와 섞이지 않고 standalone으로 작동한다.

컨테이너에 소프트웨어 패키지 및 코드의 종속성을 보관하며 도커가 실행되는 모든 곳에서 가져 올 수 있다.

그렇기에 동일한 환경에서 정확히 동일한 Application을 실행 시킬 수 있다.

 

도커는 이런 컨테이너를 구축하기 위한 도구이다.

 

컨테이너를 만들어 두면 작업이 편해지기에 만드는 것이 좋을 것이다.

 

여기서 질문

왜 소프트웨어 개발에서 독립적인 표준화된 Application 패키지을 원할까?

 

만약 내가 만든 NodeJS 앱의 코드를 실행하려면 최신 버전 ex) 14.3 이상이 필요하다.

근데 내가 배포하여 전 세계의 사람들이 연결 할 수 있게 했는데 다른 사람들의 버전이 더 낮아 그 코드가 실행이 되지 않는다면 문제를 파악하는데 시간이 꽤 걸릴 것이다.

 

이는 회사나 팀 프로젝트 환경에서도 일어 날 수 있을 것 이다.

 

이때 도커와 컨테이너가 도움을 준다. 도커는 특정 버전을 컨테이너에 lock 할 수 있기 때문에 코드가 항상 정확한 버전으로 실행 되게 할 수 있다.

 

또한 내가 프로젝트를 동시에 여러 가지를 하는 경우 다른 버전을 각각 써서 진행해야 하는 경우 각 프로젝트를 진행할 때마다 버전을 다르게 설치하는 번거로움을 도커와 컨테이너가 해결 할 수 있다.

 

각 버전을 각 컨테이너에 넣어 관리한다면 컨테이너 별의 시작으로만 프로젝트를 전환 할 수 있을 것이다.