Programmer/Cloud

[Docker] 5 컨테이너 API

호_두씨 2021. 8. 13. 12:31

"15단계로 배우는 도커와 쿠버네티스"를 참조하여 작성하였습니다.

 

<컨테이너 API>

컨테이너 API의 종류와 개요

  • 컨테이너 API

- 컨테이너를 블랙박스처럼 다룰 수 있게 해주는 인터페이스

- 컨테이너 내부의 프로그램에 대해 잘 알지 못해도 간단하게 재이용이 가능

 

  • 컨테이너 API의 종류

   - 컨테이너 기동

        - 기동 시 환경 변수나 실행 인자를 읽고 그에 맞게 동작하도록 만듦->환경 변수는 docker hub홈페이지에 들어가면 나와있음.

 

  -컨테이너 종료

       - 종료 요청 시그널에 대한 종료처리 구현

 

  -퍼시스턴트 볼륨->영구적으로 저장한다는 의미 

      -설정파일을 외부에서 주입하거나 발생 테이터를 보존하기 위해 사용

      -컨테이너는 일시적인 존재이기 때문에 보관이 필요한 데이터를 컨테이너의 파일 시스템에 저장해서는 안됨

      - 인증서와 같이 보안에 민감한 파일을 이미지에 포함시켜 리포지토리에 등록해서는 안됨

 

  - 헬스 체크 (쿠버네티스 환경)

      - 준비 완료 프로브

      - 활성 프로브

 

  - 서비스

      - 컨테이너 위에서 돌아가는 서버 애플리케이션은 특정 포트를 통해 클라이언트의 요청을 받아들임

      - 특정 포트번호로 클라이언트로부터의 요청을 받고, 처리 결과를 반환하는 역할을 수행

 

  - 로그

     - 도커나 쿠버네티스에서는 컨테이너의 표준 출력(STDOUT)과 표준 오류(STDERR)을 로그로 보관

 

  - 후크 ( 쿠버네티스 환경 )

     - 컨테이너가 기동하고 종료할 때 컨테이너 내에서 특정 처리를 진행시킬 수 있음

     - 컨테이너에 후크에 의해 실행될 스크립트, 혹은 HTTP 요청 처리를 구현해야 함

 

  - 종료 상태

     - 컨테이너가 종료 코드 0으로 종료하면 정상 종료로 취급

     - 그 외의 값인 경우에는 비정상 종료로 취급

 

 

 

 

 

퍼시스턴트 볼륨 API 구현 실습

  • 컨테이너를 지워도 데이터를 보존

1)디렉토리 준비 및 이미지 포함 파일 모음

$ cd step05
$ mkdir data

step05 디렉토리로 이동
data 폴더 만듦

2) Dockerfile 작성

Dockerfile3파일
FROM alpine:latest
RUN apk update && apk add bash
ADD ./my_daemon3 ?my_daemon
CMD ["/bin/bash", "/my_daemon"]

3) 애플리케이션 준비

 -my_daemon3 쉘 스크립트

##카운터 초기화
COUNT=0

##퍼시스턴트 볼륨상의 저장 파일 경로
PV=/pv/save.dat

##환경 변수가 없으면 설정
if [-z "$INTERVAL" ]; then
    INTERVAL=3
if

##기동 시 상태 취득 <--퍼시스턴트 볼륨의 파일에서 상태 취득
if [ -f $PV ]; then
    COUNT='CAT $PV'
    rm -f $PV
fi

##SIGTERM 처리 <--퍼시스턴트 볼륨의 파이에 상태 저장
save(){
	echo $OUNT > $PV
    exit
}
trap save TERM


##메인 루프
while [ true ];
do
	TM=`date|awk '{print $4}'`
    printf "%s : %s \n" $TM $COUNT

4) 이미지 빌드

$ docker image build -t my_daemon:0.3 -f Dockerfile3 .

 : my_daemon:0.3의 Dockerfile3을 현재경로(.)에서 빌드

 

5) 컨테이너를 실행하고 동작을 확인

$ docker container run --name myd -e INTERVAL=1 `pwd`/data:/pv my_daemon:0.3

*주의할 점 `pwd`에서 `는 역따옴표이다.

컨테이너 실행
'docker에 새로 연결'을 눌러 창을 새로 띄운 다음 myd를 멈춘다.
다시 시작한다.

->다시 시작해도 count가 이어서 증가한다.

->myd를 지워도 다시 실행하면 count가 지워지지 않는 것을 확인할 수 있다.