도커란 무엇이고 왜 사용할까?

CJY·2023년 6월 24일
0

Docker

목록 보기
1/2

도커

도커는 컨테이너 기술이다. 컨테이너를 만들고 관리하는 도구를 도커라고 보면 된다.

컨테이너

컨테이너는 소프트웨어의 표준화된 단위이다. 우리가 짠 코드와 코드 실행에 필요한 dependencies의 묶음이다.

특징

  • 같은 컨테이너는 완전히 똑같은 application을 실행하고 같은 실행 동작을 수행한다.
  • 요즘 OS에서 컨테이너 기술을 지원한다
  • 도커는 그 컨테이너를 생성하고 관리하는 것을 쉽게 도와준다.

예시를 들어보면 컨테이너는 피크닉을 갈 때 사용할 수 있는 피크닉 배스킷이라 할 수 있다. 우리가 짠 코드를 피크닉에서 먹을 수 있는 음식들이라 생각하고 그 음식을 먹을 수 있도록 도와주는 접시나 도구들이 코드에 필요한 dependencies라고 생각하면 된다. 즉 basket만 있다면 어디서든 피크닉을 즐길 수 있는 것이다.

  • 휴대 가능 -> portable
  • basket에 필요한 모든게 있고 어디서든 나눠 먹을 수 있다. -> 필요한 환경 설정이나 도구가 없어도 된다.

왜 사용할까?

그럼 왜 독립적이고 표준화된 "application packages"가 필요할까?

  • 개발 환경 vs 배포 환경
    • 나중에 개발한 환경을 다시 실행할 때도 동일한 환경으로 빌드하고 테스트하고 싶다.
  • 팀원끼리 다른 개발환경을 가질 떄
    • 모든 팀원이 완전히 동일한 개발환경을 세팅해야 한다.
  • 프로젝트마다 다른 툴과 버전 사용
    • 개발하는 프로젝트마다 내가 사용하는 툴과 버전을 바꿔줘야 한다.

여기서 말하는 환경은 런타임, 언어, 프레임워크 등을 말한다.

즉, 개발과 배포
팀원간
프로젝트간

서로 다른 환경을 가지고 있어 골치가 아프다.

위 문제를 해결할 수 있도록 해주는게 컨테이너 기술이고 도커는 이 컨테이너 기술을 도와주는 툴이다.

다른 해결책?

그럼 내 OS 위에 가상 OS를 프로젝트마다 띄우면 해결할 수 있는 문제 아닌가?

장점

  • 어플리케이션마다 완전히 분리된 환경을 가질 수 있다.
  • 개별 환경 설정이 가능하다.
  • 환경 설정을 공유할 수 있고 의존적으로 재생성이 가능하다.

단점

  • 중복 복제가 많아 공간 낭비가 있다.
  • 성능 저하, 부팅 시간 지연
  • 다른 컴퓨터나 서버에 재생산이 가능은 하겠지만 쉽지 않음

해결책 컨테이너


컨테이너마다 코드와 디펜던시만 가지고 있다면 어플리케이션마다 다른 환경 설정을 가능하게 한다.

비교하자면

Docker ContainersVirtual Machines
OS에 거의 영향을 미치지 않음. 빠르고 적은 디스크 공간 사용OS에 큰 영향. 느리고 많은 디스크 공간 사용
공유, re-building, distribution이 쉬움공유, 리빌딩, distribution이 어려움
machine 전체 대신 앱과 환경만 encapsulation"whole machines"를 캡슐화

정리

개발 환경이 제각각인 문제를 해결해주는 기술 중 하나가 컨테이너 기술이고 이를 도와주는 툴인 도커에 대해 알아봤다.
현재 사용중인 OS는 윈도우이지만 10 Edu 버전을 사용중이다. 도커 desktop으로 도커 엔진을 실행하고 도커 허브와 도커 콤포즈에 대해 배우고 실습 중에 있다. 나중엔 쿠버네티스에 대해 알아볼 것이다.

참고

유데미 Academind
도커 공식 문서 https://docs.docker.com/

profile
열심히 성장 중인 백엔드

0개의 댓글