2. 도커

1) 도커는 컨테이터 생성을 도와주는 소프트웨어

도커를 사용하면 CPU와 메모리의 할당량이 각각 격리된 컨테이터라는 환경으로 구분할 수 있다. 이것이 가능한 이유는

리눅스 커널의 cgroups, namespace 기능이 사용되기 때문이다.

  • cgroups : CPU, 메모리, 디스크, 네트워크 자원을 할당하여 완전히 격리된 가상 공간을 제공한다.
  • namespace : 파일시스템, 사용자 계정 등을 호스트 OS(하드웨어에 설치된 OS)와 분리시킨다.

도커를 활용하면 이러한 리눅스 커널 기능들을 활용한 격리 공간, 컨테이너를 쉽게 생성 및 관리하도록 돕는다.

 

etc-image-0
https://www.altexsoft.com/blog/docker-pros-and-cons/

 

이전 포스팅에서 언급한 전가상화, 반가상화와는 다르게 하드웨어에 설치된 OS가 한 개밖에 없다. 기존의 가상화 기술에서는 호스트 OS(하드웨어에 설치된 OS)와 게스트 OS(가상머신에 설치된 OS)끼리 주고 받는 명령어를 해석하는 하이퍼바이저가 존재했다. 이는 하드웨어의 자원을 사용하기 위한 시스템 콜이 각 OS마다 다르기 때문에 이를 해결하기 위함이다.

 

하지만 도커는 하나의 OS를 통해 여러 컨테이너를 구동시킨다. 따라서 각 프로세스마다 게스트 OS를 설치할 필요도 없고, 하드웨어 자원을 사용하기 위한 시스템 콜 절차도 비교적 간단하다. 가상화에 비해 가벼운 가상화 기술을 제공하는 도커는 가볍기 때문에 확장성이 용이하다. 내가 필요한 기능이 있다면 얼마든지 컨테이너로 만들고, 필요없다면 손쉽게 삭제할 수 있기 때문이다.

 

이는 애플리케이션을 테스트할 때도 유용하다. 보통 AWS, GCP 등을 활용하여 운영서버를 사용할 경우, 리눅스 운영체제를 사용한다. 하지만 개발용 컴퓨터에는 윈도우나 맥이 깔려있을 것이며, 여기에서부터 벌써 개발환경에 큰 차이가 발생한다. 소위 말해, 내 컴퓨터에서는 잘 돌아가는데요?라고 우길 수 있는 것이다. 하지만 컨테이너를 사용하면 운영 컴퓨터나 개발 컴퓨터나 동일한 환경으로 동작시킬 수 있다. 필자 또한 지난 해 처음으로 팀 프로젝트를 하면서 프론트엔드와 협업을 하였는데 React 구동에 필요한 VsCode와 SpringBoot 구동에 필요한 IntelliJ를 따로따로 실행시켜 테스트를 하면서 골치아팠다. 이를 하나의 에디터로 합치고, 도커의 컨테이너 기술을 활용하였다면 손쉽게 테스트가 가능했을 것이다.

 

2) 도커의 명령어를 사용함으로써 얻을 수 있는 이점

etc-image-1
https://dockerlabs.collabnix.com/beginners/components/server_client.html

도커의 실행 구조는 웹 서버 통신과 마찬가지로 클라이언트와 서버 구조이다. 따라서 도커를 사용하는 개발자는 도커에서 개발한 API를 사용하는 것이다. 이는 어쩌면 당연하다. 당연히 도커를 만들기 위해서는 이에 사용된 개발 언어가 있을 것이며, 사용자가 여러 기능을 사용할 수 있는 API가 있을 것이기 때문이다. (이를 런타임이라고도 한다) 이러한 도커의 API를 사용하는 방법은 공식 문서를 통해 확인할 수 있다.

https://docs.docker.com/engine/api/

 

Develop with Docker Engine API

Learn how you can use Docker Engine API and SDKs in the language of your choice.

docs.docker.com

하지만 우리는 도커를 사용하면서 해당 API를 호출하지 않고, CLI 명령어를 활용한다. 이것이 가능한 이유는 Docker CLI를 통해 명령어를 입력했을 때, 이것이 해당 API를 도커 서버(데몬이라고도 한다)에 호출하기 때문이다. 따라서 Docker CLI (도커 명령어) 만으로도 도커 API에 맞는 요청을 보낼 수 있다.

 

3) 도커를 사용하면서 인지해야 할 점

  • 도커의 기본 요소인 이미지와 컨테이너에 대해서 정확히 알고 그 쓰임새를 이해해야 한다.
  • CLI에 --help를 입력하면 각 명령어가 어떠한 기능을 하는지 소개하고 있다.
    • 이를 Docker CLI 문서와 함께 보면서 이해하는 것이 중요하다.

개발 공부를 하면서 가장 흥미를 느낄 때가 특정 기술이 왜 필요하며, 많이 사용되는지 알았을 때이다.

도커에 대해 관심만 있었지 필요 이유에 대해 몰랐는데 좋은 강의와 책들을 참고하면서 그 이유를 서서히 알아가고 있다.

그리고 애플리케이션 서버를 어떻게 구성하고, 아키텍처를 설계해야할 지에 대해서도 점점 감이 잡히고 있다.

 

 

출처 :

https://search.shopping.naver.com/book/catalog/32466572585?cat_id=50010766&frm=PBOKPRO&query=%EA%B0%80%EC%9E%A5+%EB%B9%A8%EB%A6%AC+%EB%A7%8C%EB%82%98%EB%8A%94+docker&NaPm=ct%3Dlrt6h7oo%7Cci%3D4730aa73a1511e132aae725244afcefb340d7f86%7Ctr%3Dboknx%7Csn%3D95694%7Chk%3Dff01b3c6704a2c7a0f5cbfe064eb9474340dd3fb

 

가장 빨리 만나는 도커(Docker) : 네이버 도서

네이버 도서 상세정보를 제공합니다.

search.shopping.naver.com

https://search.shopping.naver.com/book/catalog/32490361831?cat_id=50010920&frm=PBOKPRO&query=%EC%8B%9C%EC%9E%91%ED%95%98%EC%84%B8%EC%9A%94+%EB%8F%84%EC%BB%A4&NaPm=ct%3Dlrt6hk14%7Cci%3D93d2879c405ed614aa03826ff05141ccf2d782fd%7Ctr%3Dboknx%7Csn%3D95694%7Chk%3D9a4b3c304fbe4e0271eb0c7f7089a6dcf8d17c80

 

시작하세요! 도커 : 네이버 도서

네이버 도서 상세정보를 제공합니다.

search.shopping.naver.com

https://www.inflearn.com/course/%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%A5%BC-%EC%9C%84%ED%95%9C-%EC%89%AC%EC%9A%B4-%EB%8F%84%EC%BB%A4/dashboard

 

[2024 NEW] 개발자를 위한 쉬운 도커 강의 - 인프런

현업 개발자가 도커를 사용한 경험을 녹여낸 새로운 커리큘럼으로 기존 교재 및 강의와 차별된 강의를 제공합니다. 단순한 명령어 사용법이 아닌 도커를 왜 사용해야하는지 대한 근본적인 질문

www.inflearn.com