현업에서 개발하다 보면 동일 서버를 사용하는 개발자들 간에 버전 이슈가 생기기도 하고,
새로운 툴이나 기술들을 테스트할 때 관련 패키지들을 설치하느라 애를 먹기도 한다. 그럴 때마다 새로운 버전을 설치했다가 다른 테스트 후 기존 버전으로 돌아갈 수도 없고, 새로운 서버를 생성한다면 그 서버로 데이터를 이동하는데 비용이 들뿐 들어 새로운 서버 비용은 어떻게 감당하겠는가. 하여 이런 통합적인 솔루션을 제공하기 위해서 나온 솔루션이 docker이다. 이번 글에는 docker에 대한 간략한 설명을 하고자 한다.
사실 나도 도커가 있다는 것만 알았지 사용해본 적이 없다. docker관련 글을 쓰면서 docker를 쓰는 습관을 길러보자.
Docker란 무엇인가?
도커(Docker)는 컨테이너를 이용하여 어플리케이션을 쉽게 생성(create), 전개(deploy), 실행(run)할 수 있도록 설계된 툴이다. 컨테이너는 개발자가 라이브러리나 기타 종속성 등 필요한 모든 부분으로 어플리케이션을 패키징하여 하나의 패키지로 배포할 수 있도록 한다. 그렇게 함으로써, 개발자 동일한 도커 컨테이너라면 다른 리눅스 머신에서도 사용자 설정과 관련 없이 실행될 수 있다는 확신을 가질 수 있다.
즉, 다른 리눅스 머신에서 동일한 실행 환경을 제공해주는 툴이라는 뜻이다.
어떻게 보면 도커는 가상 머신과 약간 비슷하다. 그러나 가상 시스템과는 달리, 도커는 어플리케이션들이 자신이 실행 중인 시스템과 동일한 Linux 커널을 사용할 수 있도록 허용하며, 호스트 컴퓨터에서 아직 실행되지 않은 것들로만 어플리케이션을 출고하면 된다.
그리고 중요한 건, 도커가 오픈 소스라는 것이다. 그 말은 즉슨, 즉시 사용할 수 없는 추가 기능이 필요할 경우 누구나 도커에 기여하고 자신의 필요에 맞게 확장할 수 있다는 뜻이다.
컨테이너(Container)는 무엇인가?
컨테이너는 개발(development), shipment, 배포(deployment)를 하기 위한 소프트웨어 표준 단위라고 보면 된다. 도커 컨테이너 이미지에는 코드, 런타임, 시스템 도구, 시스템 라이브러리 패키지 같은 모든 정보들이 포함되어있다.
컨테이너 이미지는 런타임에 컨테이너가 된다. 프로그램과 프로세스의 관계 정도라고 이해하면 될 것 같다.
가상 머신과 도커 컨테이너의 차이/비교
컨테이너와 가상 머신은 리소스 분리 및 할당이 유사하다. 하지만 컨테이너가 하드웨어 대신 운영체제를 가상화하기 때문에 작동하는 방식이 다르다. 이 차이 덕분에 컨테이너가 더 휴대성이 좋고 효율적이다.
컨테이너는
코드와 종속성을 함께 패키징 하는 어플리케이션 계층의 추상화이다. 여러 컨테이너가 동일한 시스템에서 실행될 수 있고 OS 커널을 다른 컨테이너와 공유할 수 있으며, 각각은 사용자 공간에서 격리된 프로세스로 실행된다. 컨테이너가 VM보다 더 적은 공간(컨테이너 이미지는 일반적으로 수십MB의 크기), 더 많은 어플리케이션을 처리할 수 있고 더 적은 VM 및 운영 체제를 필요로 한다.
가상 머신은
물리적 하드웨어를 추상화하여 하나의 서버를 많은 서버로 전환하는 것이다. 하이퍼바이저를 통해 단일 시스템에서 여러 VM을 실행할 수 있음 각 VM에는 운영 체제, 어플리케이션, 필요한 이진 파일 및 라이브러리의 전체 복사본이 포함되며, 여기에는 수십 GB가 소요된다. VM의 부팅 속도도 느릴 수 있다.
Reference
'DevOps > Docker' 카테고리의 다른 글
Docker (4) - 3줄로 간단히 머신러닝/딥러닝 환경 구축하기(docker kaggle image 설치/활용하기) (1) | 2020.07.20 |
---|---|
Docker (3) - 기본 명령어 Cheat sheet(설치/삭제/실행 등) (0) | 2020.07.20 |
Docker (2) - Ubuntu에 Docker 설치하기 (0) | 2020.07.20 |
댓글