
귀엽게 생긴 도커 로고, 보기와 달리 개념을 처음 들여다 보면 이해가 어려운 부분이 많다. 핵심 개념 위주로 빠르게 이해해 보자.
도커는 '데이터 또는 프로그램을 격리시키는 기능'을 제공함으로써 앱을 신속하게 구축(build), 테스트(run), 배포(share)할 수 있는 소프트웨어 플랫폼이다.
개인용 컴퓨터나 서버에는 여러 프로그램이 함께 동작하고 있는데, 도커는 이렇게 다양한 프로그램과 데이터를 각각 독립된 환경에 격리하는 기능을 제공한다.
격리하는 것의 이점은 뒤에서 자세히 설명하겠다.
위에서 도커가 데이터나 프로그램을 격리시킨다고 했다. 이때, 격리되어 독립된 것을 창고, 즉 '컨테이너'라고 한다. 결국 컨테이너를 다루는 기능을 제공하는 소프트웨어가 도커인 것이다.
도커를 사용하려면 도커 소프트웨어의 본체인 도커 엔진을 설치해야 한다. 그래야 도커 엔진을 사용해 컨테이너를 생성하고 구동시킬 수 있다.
컨테이너를 만들려면 도커 엔진 외에도 컨테이너 빵틀과 같은 역할을 할 이미지가 필요하다. 담고 있는 소프트웨어의 종류에 따라 다양한 이미지를 사용한다. 용량이 허락하는 한 하나의 도커에서 컨테이너를 여러 개 만들 수도 있다.
도커를 사용하는 데는 리눅스 운영체제가 필요하다. 컨테이너에서 작동시킬 프로그램도 리눅스용 프로그램이다. 이는 도커가 리눅스 운영체제에서 사용하는 것을 전제로 만들어졌기 때문이다.

앞에서 도커는 주로 서버 환경을 격리하기 위해 사용된다고 설명했다. 그렇다면 왜 격리하는가?
대부분의 프로그램은 프로그램 단독으로 동작하는 것이 아니라 어떤 실행 환경이나 라이브러리, 다른 프로그램을 이용해 동작한다. 예를 들어, 파이썬으로 작성된 프로그램은 pandas, numpy, tensorflow 등 여러 라이브러리를 사용한다.
소프트웨어 역시 단일 프로그램이 아니라 여러 개의 프로그램으로 구성된 경우가 많다. 또한 다른 프로그램과 특정한 폴더 또는 디렉터리를 공유하거나 같은 경로에 설정 정보를 저장하는 경우도 있다. 이 때문에 프로그램 하나를 업데이트하면 다른 프로그램에도 영향을 미친다.
예를 들어, 시스템 A와 B 모두 MySQL을 사용할 때, 시스템 A는 Python 3.8 버전이어야만 동작 가능한데, 시스템 B를 위해 Python 3.11로 업데이트했다면 시스템 A는 동작하지 않을 것이다.
실행 환경이나 라이브러리, 디렉터리나 설정 파일에서도 같은 일이 일어날 수 있다. 공유하는 대상을 어느 한쪽만을 위해 수정하면 다른 쪽에서 오류가 발생하게 된다.
업데이트뿐 아니라 설계할 때는 문제가 없더라도 실제로 설치해 보면 프로그램 간 공유 문제로 오류를 일으키기도 한다.
이런 상황에서 도커 컨테이너를 사용해 프로그램을 격리하면 여러 프로그램이 한 서버에서 실행되면서 발생하는 문제를 대부분 해결할 수 있다. 시스템 A가 Python 3.8 버전을 사용하고, 시스템 B는 Python 3.11 버전을 사용해야 하는 상황이라면 이들을 세트로 묶어 따로 격리하면 된다.

일반적인 환경에서는 한 대의 서버 혹은 컴퓨터에서 한 벌만 설치할 수 있는 소프트웨어가 대부분이다. 그러나 도커 컨테이너는 완전히 독립된 환경이므로 여러 컨테이너에서 같은 프로그램을 실행할 수 있다. 버전이 동일해도 상관 없다.
정리하자면, 컨테이너 서비스(독립된 환경에 프로그램을 격리)를 사용하는 이유는 다음과 같다.
• 일관성 있고 독립적인 환경
• 반복적인 어플리케이션 배포 가능
• 확장 가능성/유연성 보장
• 한대의 물리 서버에 여러 서비스 배포 가능
이러한 컨테이너를 다루는 도커는 언제 필요할까?
• 같은 팀 내에 협업이 필요하고, 서로 다른 환경에서 app이 실행될 때
• 확장 가능한 앱 배포를 원할 때
• 호스팅된 컴퓨터에 머지않아 많은 환경이 변경될 때(Migration, OS 업그레이드, ...)
• 새로운 기술을 시도하고 싶을 때
그러나 도커를 사용할 때 주의해야 할 점도 분명히 있다.
• 리눅스용 소프트웨어만 지원 가능
• 호스트 서버에 문제 생기면 모든 컨테이너에 영향을 미침
• 서비스가 작은 경우, 컨테이너 하나만 장기간 걸쳐 사용할 경우 큰 장점을 느끼기 어려움
📖'위키북스'의 '그림과 실습으로 배우는 도커 & 쿠버네티스'와 '천재교육'의 '프로젝트 기반 빅데이터 서비스 개발자 양성 과정' 내용을 바탕으로 작성하였습니다.
개추 드렸습니다~~