Docker는 컨테이너 기술이다. -> 컨테이너를 생성하고 관리하기 위한 도구이다.
그럼 여기서 소프트웨어 개발에서 컨테이너란 무엇이며 왜 사용해야 하는가?
소프트웨어 개발에서 컨테이너는 표준화된 소프트웨어 유닛이다.
예를 들어 NodeJS Application을 구축하는 경우에 NodeJS는 서버에서 JavaScript 코드를 실행하는데
사용할 수 있는 JS runtime 이다.
Docker로 bulid된 컨테이너가 있는 Application이 있는 경우 그 컨테이너에는 소스 코드 뿐만 아니라 NodeJS runtime과 코드를 실행하는데 필요한 기타 도구가 있을 수 있다.
동일한 NodeJS 코드와 도구를 사용하는 컨테이너는 NodeJS runtime에 항상 동일한 동작과 결과를 제공한다.
약간 쉽게 말하자면 학교에 갈 때 필요한 것들을 가방에 넣는 다는 느낌이다.
가방에 필요한 것을 다 넣고 친구와 만나고 내 가방안에 있는 것들을 친구와 공유 할 수 있다.
핸드폰 배터리가 부족할 때 내 가방에 있는 충전기로 충전을 해결하듯이 필요한걸 꺼내서 사용 할 수 있다!
컨테이너를 직관적으로 실제 선박에 있는 컨테이너와 비교해도 이해하기 쉬울 것 이다.
하나의 컨테이너는 다른 컨테이너와 섞이지 않고 standalone으로 작동한다.
컨테이너에 소프트웨어 패키지 및 코드의 종속성을 보관하며 도커가 실행되는 모든 곳에서 가져 올 수 있다.
그렇기에 동일한 환경에서 정확히 동일한 Application을 실행 시킬 수 있다.
도커는 이런 컨테이너를 구축하기 위한 도구이다.
컨테이너를 만들어 두면 작업이 편해지기에 만드는 것이 좋을 것이다.
여기서 질문
왜 소프트웨어 개발에서 독립적인 표준화된 Application 패키지을 원할까?
만약 내가 만든 NodeJS 앱의 코드를 실행하려면 최신 버전 ex) 14.3 이상이 필요하다.
근데 내가 배포하여 전 세계의 사람들이 연결 할 수 있게 했는데 다른 사람들의 버전이 더 낮아 그 코드가 실행이 되지 않는다면 문제를 파악하는데 시간이 꽤 걸릴 것이다.
이는 회사나 팀 프로젝트 환경에서도 일어 날 수 있을 것 이다.
이때 도커와 컨테이너가 도움을 준다. 도커는 특정 버전을 컨테이너에 lock 할 수 있기 때문에 코드가 항상 정확한 버전으로 실행 되게 할 수 있다.
또한 내가 프로젝트를 동시에 여러 가지를 하는 경우 다른 버전을 각각 써서 진행해야 하는 경우 각 프로젝트를 진행할 때마다 버전을 다르게 설치하는 번거로움을 도커와 컨테이너가 해결 할 수 있다.
각 버전을 각 컨테이너에 넣어 관리한다면 컨테이너 별의 시작으로만 프로젝트를 전환 할 수 있을 것이다.
'DevOps > Docker' 카테고리의 다른 글
Docker Compose (2) | 2024.02.06 |
---|---|
컨테이너 교차 통신, Docker로 다중 어플리케이션 구성하기 (0) | 2024.02.06 |
Docker 이미지와 컨테이너 내부의 데이터 관리 방법 (1) | 2024.02.06 |
Docker 이미지 & 컨테이너 (0) | 2024.02.06 |
컨테이너 만들어 보기 (1) | 2024.01.14 |