Skip to content

Docker란 무엇인가?



들어가며

오랫동안 개발자로 일하면서 Docker가 무엇인지 모르는 사람들이 많습니다. 게다가 최근 회사 채용 정보들을 보면 자격요건이나 우대사항에 Git과 Docker 항목이 심심치 않게 등장하는 것을 볼 수 있습니다. 이 포스트에서는 Docker가 무엇인지 간략하게 알아보는 시간을 갖도록 하겠습니다.

Docker란?

Docker 공식 사이트에 접속하면 메인 화면에 아래와 같은 문구가 있습니다.

Docker는 개발자가 지루한 환경 구성이나 관리 없이 어디서나 애플리케이션을 구축, 공유, 실행 및 확인할 수 있도록 도와줍니다

Docker는 애플리케이션을 개발, 제공 및 실행하기 위한 개방형 플랫폼입니다. Docker를 사용하면 애플리케이션을 인프라에서 분리하여 소프트웨어를 신속하게 제공할 수 있습니다. Docker를 사용하면 애플리케이션을 관리하는 것과 동일한 방식으로 인프라를 관리할 수 있습니다. 코드 전송, 테스트 및 배포에 대한 Docker의 방법론을 활용하면 코드 작성과 프로덕션 환경 실행 사이의 지연 시간을 크게 줄일 수 있습니다.

회사나 개인 프로젝트를 진행하다 보면 실제 서비스 제공을 위해 배포를 해야 하는 할 일이 생기곤 합니다. 개발자로 일하면서 누구나 한 번쯤은 배포를 하거나 들어본 경험이 있을 텐데요. 제 기억 속에 배포는 정말 지루하고 귀찮은 업무 중 하나였습니다.

  • 빌드하고
  • 압축하고
  • 서버에 붙어 파일을 옮기고
  • 기존 서비스를 중지하고
  • 백업을 하고...

거기다 서버를 이전해야 하는 일이 생기면... 추가로 서버 설치부터 설정까지 모두 다시 해야 하는 것과 더불어 기존 서버와 똑같이 정상적으로 실행된다는 보장을 할 수 없습니다.
Docker는 이런 일련의 복잡한 작업들을 매번 반복하지 않도록 도와주는 역할을 합니다. 그럼 우선 왜 Docker를 사용해야 하는지 알아봅시다.

왜 Docker를 사용해야 할까요?

도대체 Docker가 무엇이기에 개발 환경에서 자주 언급되는지 무척 궁금했습니다. 그렇게 찾아 헤매다 좋은 글을 발견했습니다. 꼭 한번 읽어보세요.

Docker를 사용하면 위에서 언급한 서버 설치, 설정부터 배포, 배포 이후 일련의 작업들까지 모두 코드로 구성하고 이미지화하는 것이 가능합니다. 우리는 서버에 Docker를 설치하고 만들어둔 이미지로부터 컨테이너들을 구동시키기만 하면 됩니다.

Docker 이미지

Docker 이미지는 Docker 컨테이너를 생성하기 위한 지침이 포함된 읽기 전용 템플릿입니다. 어떤 이미지는 사용자가 추가 정의한 부분이 포함된 또 다른 이미지를 기반으로 합니다. 예를 들어, 우분투 이미지를 기반으로 Apache 웹 서버와 애플리케이션을 추가로 설치하고 애플리케이션을 실행하는 데 필요한 세부 구성 정보를 포함하는 이미지를 빌드할 수 있습니다.

좀 더 쉽게 설명하자면, 순정 윈도우 설치 CD를 이용해 자주 애용하는 브라우저나 백신과 같은 프로그램이 포함된 윈도우 설치 CD를 새롭게 만들 수 있다는 얘기와 비슷합니다.

Docker 컨테이너

컨테이너는 애플리케이션이 한 컴퓨팅 환경에서 다른 컴퓨팅 환경으로 빠르고 안정적으로 실행될 수 있도록 코드와 모든 종속성을 패키지화하는 소프트웨어의 표준 단위입니다. Docker 컨테이너 이미지는 코드, 런타임, 시스템 도구, 시스템 라이브러리 및 설정 등 애플리케이션을 실행하는 데 필요한 모든 것을 포함하는 가벼운 독립 실행 가능 소프트웨어 패키지입니다.

컨테이너 이미지는 런타임 시 컨테이너가 되며, Docker 컨테이너의 경우 이미지가 Docker 엔진 에서 실행될 때 컨테이너가 됩니다. Linux 및 Windows 기반 애플리케이션 모두에서 사용할 수 있는 컨테이너화된 소프트웨어는 인프라에 관계없이 항상 동일하게 실행됩니다. 컨테이너는 소프트웨어를 해당 환경에서 격리하고 개발과 스테이징 간의 차이에도 불구하고 소프트웨어가 균일하게 작동하도록 보장합니다.

Docker를 이용한 앱의 컨테이너화
출처 : Docker 공식 사이트

컨테이너란 한마디로, 미리 만들어 둔 이미지(그것이 OS나 App 등 무엇이 되었든지)로부터 단독으로 만들어져 구동되는 가상의 머신이라고 생각하면 될 것 같습니다.
물론 실제 컨테이너는 가상 머신이 아닙니다.

Made with VitePress.