본 글은, 프로젝트 배포에 있어서 Docker를 어떻게 사용할 수 있는지를 다루고 있습니다.
프로젝트를 제작하고 배포하는 방법은 여러가지가 있지만, 개발, 스테이징, 운영 환경은 모두 다릅니다. 이런 환경에 대한 설정과 배포를 Docker 관련 기술을 통해서 쉽게 운영, 배포할 수 있습니다.
Docker가 무엇인지 모르시는 분, Docker를 이용해서 어떻게 프로젝트 배포를 할 수 있는지 궁금하신 분들이 보시면 좋을 것 같습니다.
본 내용은 1~3단계로 구성되어 있습니다.
1. Docker 개요와 동작하는 Flow
2. Docker 관련 기술 세부 소개와 사용하는 Flow
3. Docker를 이용한 배포 예제
그 중 Docker 개요와 동작하는 Flow와 관련된 내용을 다루고 있습니다.
도커(Docker)는 컨테이너 기반의 오픈소스 가상화 플랫폼입니다.
Docker의 핵심 개념은 이미지(image)와 컨테이너(container)입니다. 이미지는 애플리케이션을 실행하기 위한 모든 파일과 설정 정보 등을 포함한 패키지입니다. 이 이미지를 기반으로 컨테이너를 생성하여 실행합니다. 컨테이너는 격리된 환경에서 애플리케이션을 실행할 수 있는 가상 공간을 제공합니다.
이를 통해 애플리케이션은 호스트 OS와는 독립적으로 실행되며, 컨테이너 간에도 서로 완전히 격리됩니다.
지금 작성하는 문서 및 실습을 위해 꼭 알아야하는 Docker 관련 용어에 대해 정리하겠습니다.
Docker Hub
Docker Hub는 Docker 이미지를 공유하고 저장하는 저장소입니다. Docker Hub는 다양한 언어, 런타임, 데이터베이스, 프레임워크 등에 대한 공식 및 커뮤니티 지원 이미지를 제공합니다.
Docker Engine
Docker Engine은 Docker의 핵심 컴포넌트로서, 컨테이너를 생성하고 관리하는 데 사용됩니다. 이는 Docker CLI(Command Line Interface)를 통해 상호작용하거나, RESTful API를 사용하여 프로그래밍 방식으로 조작할 수 있습니다.
Image
Docker 이미지는 Docker 컨테이너를 만들기 위한 파일 시스템, 실행 파일 및 설정 등을 포함하는 템플릿입니다. Docker 이미지를 사용하여 Docker 컨테이너를 시작하고 실행할 수 있습니다.
Container
Docker 컨테이너는 격리된 환경에서 실행되는 애플리케이션입니다. 컨테이너는 호스트 운영 체제와 완전히 격리되며, 필요한 라이브러리 및 종속성을 포함하여 실행 가능한 모든 것을 포함합니다.
Docker File
Dockerfile은 Docker 이미지를 만들기 위한 빌드 파일입니다. Dockerfile은 이미지를 생성하기 위한 명령어 집합을 포함합니다. 이 명령어를 사용하여 이미지를 생성하고 Docker 호스트에서 실행할 컨테이너에 필요한 파일 및 설정을 구성할 수 있습니다.
Orchestration
오케스트레이션은 여러 컨테이너 및 서비스를 자동으로 배포하고 관리하는 작업입니다. 이는 컨테이너화된 애플리케이션을 실행하는 데 필요한 모든 요소를 자동으로 배치하고, 관리하며, 스케일링하고, 로드 밸런싱하고, 네트워크 및 저장소를 관리하는 등의 작업을 수행합니다. Docker Swarm과 Kubernetes는 대표적인 Docker 오케스트레이션 도구입니다.
우리는 Docker를 이용해서 여러가지 작업을 진행할 수 있습니다. 간단한 예시를 정리해보겠습니다.
Docker Hub에서 받아온 Image를 Docker Engine위에 Container로 띄우기
Docker Hub에서 받아온 Image를 사용하는 방법입니다.
그림으로 표현하면 다음과 같습니다.
Local에서 Docker Image를 만들어서 Docker Hub에 올리기
우리가 만든 App을 Container화 할 수 있는 이미지로 만들어서 Docker Hub에 저장하는 방법입니다.
그림으로 표현하면 다음과 같습니다.
기본적으로 이러한 동작 과정을 가지고 있습니다.
이렇게 보면 단순하지만, 이를 이용해서 여러가지 자동화와 서비스들을 구현할 수 있습니다. 😃
--- 2편에서 계속