본문으로 건너뛰기

Docker 배포

빌드된 컨테이너 이미지를 Docker 또는 Podman 런타임에 배포하는 방법을 안내합니다. KIOPS의 Docker 배포는 docker-compose 기반으로 동작하며, 단일 서비스부터 여러 컨테이너가 결합된 멀티 서비스 스택까지 동일한 흐름으로 배포할 수 있습니다.

왜 이 가이드를 읽어야 하는가

이 가이드를 따라가면 K8s 클러스터 없이도 단일 서버에 docker-compose 기반으로 서비스를 배포하고, 배포 직전 자동 백업으로 안전망을 확보할 수 있습니다. 비개발 운영팀은 "이미지 버전 선택 → 자동 백업 확인 → 배포 버튼" 3단계만 따라가면 되며, 세부 설정이 필요할 때만 docker-compose 편집 모드를 사용합니다.

Docker vs Kubernetes 배포

Docker 배포

  • 복잡도: 간단함
  • 확장성: 제한적
  • 고가용성: 수동 구성 필요
  • 추천 환경: 개발, 테스트, 소규모

Kubernetes 배포

  • 복잡도: 복잡함
  • 확장성: 자동 확장 지원
  • 고가용성: 기본 지원
  • 추천 환경: 스테이징, 프로덕션

Docker 배포 탭


시작하기 전에: 알아둘 용어

본문에 들어가기 전에 자주 등장하는 용어를 한 줄씩 정리합니다. 본문에서 처음 등장할 때 "(용어 사전 참고)" 안내를 함께 표시합니다.

용어정의 + 일상 비유
컨테이너앱 하나를 격리해서 실행하는 격리 박스. 도시락 한 칸처럼 안의 음식(앱)은 옆 칸과 섞이지 않습니다.
이미지컨테이너를 만들기 위한 스냅샷(틀). 붕어빵 틀과 같습니다. 같은 틀로 여러 개를 찍어낼 수 있습니다.
Docker Compose여러 컨테이너의 실행 정의를 한 YAML 파일로 묶어 한 번에 띄우는 도구. 여러 가전제품을 하나의 멀티탭에 연결해 한 번에 켜는 것과 비슷합니다.
볼륨컨테이너 재시작 후에도 유지되는 데이터 저장 공간. 외장 하드처럼 컨테이너가 사라져도 안의 파일은 살아남습니다.
환경 변수컨테이너 실행 시 주입되는 설정값(예: DATABASE_URL). 요리할 때 마지막에 추가하는 양념과 같습니다. 같은 코드라도 양념(환경 변수)에 따라 동작이 달라집니다.
자동 백업배포 직전 현재 컨테이너/볼륨 상태를 보관하는 KIOPS 기능. 공사 시작 전에 찍어두는 비포 사진과 같습니다. 문제가 생기면 그 상태로 되돌릴 수 있습니다.

사전 요구사항

배포를 시작하기 전에 다음을 확인하세요:

  • Docker/Podman 런타임 등록: [런타임 환경] 페이지에 Docker 또는 Podman 런타임이 등록되어 있어야 합니다.
  • 이미지 빌드 완료: 배포할 이미지가 레지스트리에 푸시되어 있어야 합니다.
  • docker-compose.yml 정의: 서비스의 배포 구성은 docker-compose.yml에서 관리됩니다. 단일 컨테이너든 멀티 컨테이너든 동일하게 적용됩니다.

Step 1: Deploy 단계로 이동

  1. [서비스 관리] 페이지로 이동합니다.
  2. 배포할 서비스를 선택합니다.
  3. 파이프라인에서 Deploy 단계를 클릭합니다.

Step 2: Docker 배포 선택

  1. 배포 유형에서 Docker를 선택합니다.
  2. 배포 대상 런타임을 선택합니다.
  • Docker: Docker Engine 기반입니다. 가장 일반적이며 넓은 호환성을 가집니다.
  • Podman: Rootless 컨테이너 런타임입니다. 보안이 강화되어 있고 데몬 없이 동작합니다.
Podman이란?

Podman은 Docker와 호환되는 컨테이너 런타임이지만 데몬 없이 동작하며 rootless 모드를 지원합니다. 보안이 중요한 환경에서 권장됩니다.


Step 3: 배포 옵션 입력

Docker 배포 모달에서는 다음 항목만 입력합니다. 실제 UI 라벨은 이미지 버전이며, 본 문서에서는 의미를 명확히 하기 위해 이미지 태그/버전을 혼용합니다. (이미지, 자동 백업 참고)

옵션설명
이미지 버전배포할 컨테이너 이미지의 태그(버전)를 선택합니다. 빌드 이력에 등록된 이미지 목록에서 선택하거나 직접 입력할 수 있습니다.
배포 전 자동 백업기본값 켜짐(ON) 상태이며, 배포 직전에 현재 컨테이너/볼륨의 백업을 자동으로 생성합니다. 배포 실패 시 이전 상태로 복원할 수 있어 운영 환경에서 권장됩니다.
자주 하는 실수: 외부 저장소 미연결 시 자동 백업 실패

자동 백업은 [백업 관리] 에 등록된 외부 저장소(오브젝트 스토리지 등)를 사용합니다. 외부 저장소가 등록돼 있지 않거나 인증이 만료된 상태에서 배포를 실행하면 백업 단계에서 실패하고 배포가 중단됩니다. 첫 배포 전에 한 번은 백업 시스템 가이드를 따라 저장소 연결을 확인하세요. 외부 저장소가 아직 없다면 자동 백업 옵션을 OFF로 두고 배포한 뒤, 저장소 연결 후 다시 ON 으로 전환해도 됩니다.

자주 하는 실수: latest 태그 사용

이미지 버전에 latest 를 사용하면 배포 시점마다 다른 이미지가 내려오면서 롤백 기준이 사라지고, 같은 시점이라도 두 노드가 서로 다른 이미지를 받는 사태가 생길 수 있습니다. 운영 환경에서는 빌드 ID/커밋 해시가 포함된 고정 태그(예: main-abc123, v1.2.3)를 사용하세요.

컨테이너 이름, 포트, 볼륨, 환경 변수 등의 세부 설정

DockerDeployModal에서는 위의 두 항목만 입력하면 됩니다. 컨테이너 이름, 포트 매핑, 볼륨 마운트, 환경 변수, 네트워크 설정 등 모든 세부 설정은 docker-compose.yml 편집 모드(ComposeDeployEditMode) 에서 처리됩니다. 자세한 내용은 docker-compose.yml 편집을 참고하세요.


Step 4: 배포 실행

  1. 이미지 버전과 자동 백업 옵션을 검토합니다.
  2. 배포 버튼을 클릭합니다.
  3. 백엔드가 docker-compose pulldocker-compose up -d를 실행하여 스택을 갱신합니다.
  4. 배포 진행 로그가 실시간으로 표시됩니다.
멀티 서비스 배포

서비스가 멀티 서비스(is_multi_service)로 등록된 경우, docker-compose.yml의 여러 서비스가 한 번의 배포로 함께 갱신됩니다. 단일 서비스든 멀티 서비스든 사용 흐름은 동일합니다.


docker-compose.yml 편집

컨테이너 이름, 포트 매핑, 볼륨, 환경 변수, 네트워크 등 모든 세부 설정은 docker-compose.yml에서 관리됩니다. KIOPS의 Compose 편집 모드에서 직접 편집할 수 있습니다. (Docker Compose, 볼륨, 환경 변수 참고)

자주 하는 실수: Compose YAML 들여쓰기

docker-compose.yml은 YAML 문법을 사용하므로 들여쓰기는 공백 2칸, 탭 키 금지입니다. 한 칸이라도 어긋나거나 탭이 섞이면 yaml: line N: did not find expected key 같은 오류로 배포 전체가 실패합니다. KIOPS의 Compose 편집기는 들여쓰기 오류를 미리 표시해 주므로 저장 전 빨간 줄이 없는지 확인하세요.

편집 가능한 항목

services:
api:
image: harbor.company.com/library/app:latest
container_name: my-web-app
restart: unless-stopped
ports:
- "8080:80"
- "8443:443"
volumes:
- app-data:/app/data
- ./config:/app/config:ro
environment:
NODE_ENV: production
DATABASE_URL: ${DATABASE_URL}
networks:
- app-network

networks:
app-network:
driver: bridge

volumes:
app-data:
항목docker-compose 키
컨테이너 이름container_name
재시작 정책restart (no / on-failure / always / unless-stopped)
포트 매핑ports
볼륨 마운트volumes
환경 변수environment 또는 env_file
네트워크 설정networks
민감 정보 주의

비밀번호나 API 키 같은 민감 정보는 docker-compose.yml에 평문으로 입력하지 말고, .env 파일이나 Secret으로 분리하세요.


Step 5: 컨테이너 상태 확인

운영 모달에서 컨테이너 상태를 확인합니다. Docker 운영 모달은 개요 / 컨테이너 목록 / 배포 관리 / 로그 조회 / 명령 실행 / 도메인 설정 탭으로 구성됩니다(로그 조회·명령 실행 탭은 해당 권한이 있을 때만 표시됩니다). 도메인 대상 DAST 스캔은 [보안 분석] 페이지로 이관되어 운영 모달에는 더 이상 없습니다.

  1. [서비스 관리] 페이지에서 서비스의 운영 카드를 클릭합니다.
  2. 운영 모달에서 컨테이너 목록 탭을 선택하면 다음 정보를 확인할 수 있습니다.
  • 상태: Running / Stopped / Error
  • 포트: 매핑된 포트 정보
  • 생성 시간: 컨테이너 생성 시점
  • 리소스: CPU / Memory 사용량

컨테이너 제어

운영 모달의 배포 관리 탭에서 docker-compose 기반의 재배포, 중지, 시작 작업을 수행할 수 있습니다.


문제 해결

컨테이너 시작 실패

  • 포트 충돌: docker-compose.yml에서 호스트 포트를 다른 값으로 변경합니다.
  • 이미지 없음: 레지스트리에 해당 태그가 존재하는지, 인증 정보가 올바른지 확인합니다.
  • 권한 문제: 볼륨 마운트 경로의 권한을 확인합니다.

컨테이너 크래시 (재시작 반복)

  • 환경 변수 누락: 필수 환경 변수가 설정되었는지 확인합니다.
  • 의존성 문제: 로그에서 오류 메시지를 확인합니다.
  • 메모리 부족: 리소스 제한을 조정하거나 애플리케이션을 최적화합니다.

외부에서 접근 불가

  • 포트 미매핑: docker-compose.yml의 ports 설정을 확인합니다.
  • 방화벽 차단: 호스트 방화벽에서 해당 포트를 허용합니다.
  • 컨테이너 내부 오류: 로그를 확인하고 애플리케이션 상태를 점검합니다.
로그 확인 방법

운영 모달의 로그 조회 탭에서 실시간 로그를 확인할 수 있습니다.


다음에 할 일

Docker 배포가 정상적으로 완료됐다면, 다음 동선을 권장합니다.

  1. 자동 백업 설정 점검: 첫 배포 후에는 [백업 관리] 페이지에서 백업이 실제로 생성됐는지, 외부 저장소(오브젝트 스토리지)에 올라갔는지 확인합니다.
  2. compose 편집 가이드 익히기: 컨테이너 이름·포트·볼륨 같은 세부 설정은 compose 편집 모드에서 처리합니다. 자주 쓰는 옵션을 미리 한 번 살펴보세요.
  3. 운영 모달 활용: 운영 모달의 로그 조회 / 명령 실행 / 배포 관리 탭으로 컨테이너 상태를 점검하고 문제 발생 시 빠르게 대응할 수 있도록 익혀두세요.

관련 가이드