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.