-
8. 쿠버네티스 환경 구축하자 - 컨테이너 실전 구축 및 배포infra 2020. 8. 15. 00:32
8.컨테이너 실전 구축 및 배포
시스템에서 단일컨테이너의 비중, 이식성을 고려해 도커 친화적인 애플리케이션을 개발하는 방법, 퍼시스턴스 데이터를 다루는 방법, 도커 스윔이나 스택을 이용한 컨테이너 배포에 대해 알아보자.
애플리케이션과 시스템 내 단일 컨테이너 적정 비중
앞에서 생성한 컨테이너를 보면 애플리케이션과 인프라를 도커 컨테이너라는 단위로 분리할것이라 볼 수 있다. 하지만 꼭 한개의 프로세스를 한개의 컨테이너로만 띄울필요는 없다.
정기적으로 실행하는 어플리케이션
정기적으로 어떤 작업을 실행하는 컨테이너가 있다고 생각해보자. 이럴경우 아래와같이 배치를 트리거하는 cron이 필요할것이다.
CRON -> JOB
이럴경우 CRON, JOB두개의 프로세스가 필요하다. 하지만 이것을 꼭 2개의 컨테이너에 띄울필요는 없다. 이럴경우 복잡성이 늘어날필요가 있기 떄문이다.
- 작업 컨테이너 쪽에 작업을 실행하는 트리거 역할을 할 API를 갖추고 cron 컨테이너가 컨테이너간 통신을 통해 이 API를 호출하는 구조
- cron 컨테이너 도커를 구축하고 다시 그위에서 작업 컨테이너를 실행하는 구조
위 과정을 수행은 가능하지만 과정은 지나치게 복잡하다. 간단하게 컨테이너 하나로 cron과 작업 프로세스를 모두 실행한ㄴ 방법을 시도해보자. 일단 폴더를 아래와같이 구성해보자.
cronjob - task.sh - Dockfile - cron-example
task.sh는 다음과 같다.
#!/bin/bash echo "['date'] HELLO!" /var/log/cron.log
다음은 Dockerfile이다.
FROM ubuntu:16.04 RUN apt update RUN apt install -y cron COPY task.sh /usr/local/bin/ COPY cron-example /etc/cron.d/ RUN chmod 0644 /etc/cron.d/cron-example CMD ["cron", "-f"]
다음은 cron-example이다.
* * * * * root sh /usr/local/bin/task.sh
그다음 빌드된 이미지를 실행해본다
docker container run -d --rm --name cronjob example/cronjob:latest
컨테이너 하나에서 cron과 작업까지 2개 프로세스를 모두 실행하는 형태로 정기적으로 실행되는 작업을 간단하게 구현했다. 억지로 별도의 컨테이너로 분리하는것보다 훨씬 깔끔하다. 도커 공식 홈페이지에서도 하나의 관심사에만 집중하게 해야한다고 나와있다. 여기에서말하는 한가지 역할은 문제영역(도메인)에만 집중해야한다는 의미이다.
'infra' 카테고리의 다른 글
9. 쿠버네티스 환경 구축하자 - 데이터 볼륨 설정 (0) 2020.08.20 7. 쿠버네티스 환경 구축하자 - 도커 컴포즈로 여러 컨테이너 실행하기 (0) 2020.08.13 6. 쿠버네티스 환경 구축하자 - 도커컨테이너 명령어 종류 (0) 2020.08.09 5. 쿠버네티스 환경 구축하자 - 도커 이미지 명령어 활용 (0) 2020.08.06 4. 쿠버네티스 환경 구축하자 - 도커 이미지 빌드하기 (0) 2020.08.06