본 글은, 프로젝트 배포에 있어서 Docker를 어떻게 사용할 수 있는지를 다루고 있습니다.
프로젝트를 제작하고 배포하는 방법은 여러가지가 있지만, 개발, 스테이징, 운영 환경은 모두 다릅니다. 이런 환경에 대한 설정과 배포를 Docker 관련 기술을 통해서 쉽게 운영, 배포할 수 있습니다.
Docker가 무엇인지 모르시는 분, Docker를 이용해서 어떻게 프로젝트 배포를 할 수 있는지 궁금하신 분들이 보시면 좋을 것 같습니다.
본 내용은 1~3단계로 구성되어 있습니다.
1. Docker 개요와 동작하는 Flow
2. Docker 관련 기술 세부 소개와 사용하는 Flow
3. Docker를 이용한 배포 예제
그 중 Docker 관련 기술 세부 소개와 사용하는 Flow와 관련된 내용을 다루고 있습니다.
이전에 설명했던 Docker는 기장 기초적인 동작을 설명하기 위함이었습니다.
하지만 Docker를 이용해서 자동 배포를 구현하기 위해서는
이러한 역할을 하는 기술들을 추가로 소개하겠습니다.
Docker Registry
Docker Registry는 도커 이미지를 저장하고 배포하는데 사용되는 온프레미스 이미지 저장소입니다. 도커 이미지를 빌드하고 푸시하여 다른 사람이 해당 이미지를 다운로드할 수 있도록 합니다.
이전에 설명했던 Docker Hub가 이에 해당하고, Docker에서 공식 지원합니다.
그러나 실제 개발에서는 보안 및 정책 등의 이유로 이미지를 공개하지 않아야 하는 경우, 개인적인 Docker Registry를 구축하여 사용하기도 합니다.
개인적인 Docker Registry를 구축할 때는, Docker Registry 서버를 구축하고 해당 서버에 Docker 이미지를 업로드하여 배포할 수 있습니다. 이를 통해, 개발팀이나 조직 내에서 도커 이미지를 공유하고 재사용할 수 있습니다.
Docker Registry 종류는 다음과 같습니다.
Docker Compose
Docker Compose는 여러개의 도커 컨테이너를 정의하고 실행하는 도구로, YAML 파일에 컨테이너, 네트워크, 볼륨 등의 설정을 정의하여 여러 컨테이너를 쉽게 실행, 관리할 수 있습니다.
version: '3'
services:
web:
build: ./web
ports:
- "3000:3000"
api:
build: ./api
ports:
- "8080:8080"
depends_on:
- db
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: mydb
ports:
- "3306:3306"
위의 Docker Compose 파일은 다음과 같은 서비스를 포함합니다.
이 예시를 실행하면 각 서비스가 독립적인 컨테이너로 실행되며, 각 컨테이너는 서로에게 액세스할 수 있습니다.
예를 들어 web 컨테이너는 api 컨테이너에게 API 요청을 보낼 수 있으며, api 컨테이너는 db 컨테이너에게 데이터베이스 연결을 처리할 수 있습니다. 이러한 구성을 통해 전체 서비스를 동시에 실행하고 테스트할 수 있습니다.
Container Ochestration
Container Orchestration은 여러 대의 서버에서 동작하는 컨테이너들을 관리하는 작업을 자동화하는 기술입니다.
컨테이너 기술은 애플리케이션을 가상화하여 여러 대의 서버에서 쉽게 이동하고 배포할 수 있도록 해줍니다. 그러나 수동으로 컨테이너들을 관리하는 것은 복잡하고 시간이 많이 소요됩니다. 이러한 문제를 해결하기 위해 컨테이너 오케스트레이션 도구가 등장하게 되었습니다.
컨테이너 오케스트레이션 도구는 여러 대의 서버에서 컨테이너를 배포하고 관리하는 작업을 자동화합니다. 이를 통해 컨테이너들이 안정적으로 동작하며, 로드 밸런싱, 확장성, 안정성 등의 요구사항을 충족시킬 수 있습니다. 컨테이너 오케스트레이션 도구에는 Kubernetes, Docker Swarm, Apache Mesos 등이 있으며, 이 중에서 Kubernetes가 가장 인기 있는 컨테이너 오케스트레이션 도구입니다.
앞서 말한 Docker Compose도 컨테이너 관리를 할 수 있지만, 규모 측면에서 다릅니다. Docker Compose는 단일 호스트의 여러 Container를 관리할 수 있는 기술이지만 Container Ochestration의 경우 여러 호스트의 수 많은 Container를 관리할 수 있는 기술입니다.
Container Ochestration의 종류는 다음과 같습니다.
CICD Tool
CICD Tool은 Continuous Integration, Continuous Delivery, Continuous Deployment를 지원하기 위한 자동화 도구입니다. 개발자들이 코드 변경 사항을 자동으로 통합, 빌드, 테스트하고, 자동화된 배포 프로세스를 통해 신속하게 제품을 출시할 수 있도록 돕습니다.
CICD Tool 종류는 다음과 같습니다.
다양한 종류의 CICD Tool이 있으므로, 프로젝트의 요구사항과 여러 조건을 고려해서 선택할 수 있습니다.
이러한 기술들을 이용해서 어떻게 배포가 이루어지는지, 간단하게 그림으로 설명해보도록 하겠습니다.
Docker Registry, Docker Compose를 이용한 명시적 배포가 의미하는 것은 App을 만들고 이를 운영 서버에 배포하는 과정에 개발자가 직접 관여하는 것을 말합니다.
해당 Flow는 다음과 같습니다.
하지만 운영서버에 직접 접근할 수 있는 경우는 많지 않겠죠?
그래서 로컬서버에서 운영서버에 원격으로 접속해 명령을 내립니다.
이런 접근 방식은 프로덕션 환경에 직접 접근한다는 점과, 자동화할 수 있는 부분을 수동으로 하고 있다는 점때문에 실제로는 잘 사용하지 않습니다.
Docker Compose와 CICD Tool을 이용한 자동 배포가 의미하는 것은, 개발자가 배포 과정에 대해서 관여하지 않는 것을 의미합니다.
해당 Flow는 다음과 같습니다.
이제는 개발자는 Git으로 업로드만 하면 나머지 부분은 CICD Tool을 이용에서 자동화할 수 있습니다. 😃
추가 예정
다음 3편에서는 실제로 Docker를 이용해서 서비스를 배포하는 실습을 만들어보도록 하겠습니다.
멋잇다 이국준!!!!