일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 무료 오라클 설치
- Oracle 테이블 대소문자
- 윈도우 Oracle
- Oracle 18c 설치
- 서평단
- 무료 오라클 데이터베이스
- Oracle 사용자명 입력
- ORA-00922
- Oracle 사용자명
- ora-01722
- 오라클 캐릭터셋 변경
- oracle
- 오라클 캐릭터셋 확인
- Oracle 18c HR schema
- ORA-12899
- Oracle 테이블 띄어쓰기
- 오라클 캐릭터셋 조회
- Oracle 18c HR
- Oracle 윈도우 설치
- Oracle 초기 사용자
- Orace 18c
- 비전공자를 위한 데이터베이스 입문
- oracle 18c
- Oracle Express Edition
- Today
- Total
The Nirsa Way
[Docker CE] dockerfile 명령어 정리 (2) (ONBUILD, STOPSIGNAL, HEALTHCHECK) 본문
[Docker CE] dockerfile 명령어 정리 (2) (ONBUILD, STOPSIGNAL, HEALTHCHECK)
KoreaNirsa 2020. 1. 18. 18:49
1편 (RUN, CMD, ENTRYPOINT) : https://nirsa.tistory.com/66?category=868315
3편 (COPY, ADD, ENV, ARG, WORKDIR) : https://nirsa.tistory.com/69?category=868315
4편 (USER, LABEL, EXPOSE, VOLUME) : https://nirsa.tistory.com/70?category=868315
-
4. ONBUILD
ONBULD는 조금 특이하게 처음 사용한 Dockerfeil 에서 빌드할 때(이미지 생성) 실행되는 명령이 아닙니다.
ONBUILD 명령을 사용했던 이미지를, 다른 Dockerfile에서 FROM image를 사용하여 빌드 했을 때 동작 합니다.
일반적으로 사용하는 명령은 아니지만 웹서버를 구동시키기 위한 이미지를 만들어두고 ONBUILD ADD web.tar /var/www/html 과 같이 미리 정의 해둔 뒤, 개발자들이 해당 경로에 웹서버에 필요한 코드들을 해당 경로에 web.tar을 만들어서 빌드 후 실행시키는 등에 사용한다고 합니다.
-
5. STOPSIGNAL
docker container stop 명령을 입력하면 Docker 데몬이 컨테이너에게 signal을 보내 중지 하는데, 기본적으로 STOPSIGNAL을 명시하지 않을 경우 SIGTERM을 사용 하게 됩니다.
즉 container stop 할 때에 보낼 시그널을 지정할 수 있습니다.
STOPSIGNAL [시그널] ## 시그널 번호 또는 이름
docker container stop 실행 시 SIGTERM signal을 받은 컨테이너가 프로세스를 정상적으로 종료할 수 있을때 까지 기다리게 되는데, 지정된 시간 (deafult 10sec, 사용자 지정 가능)동안 종료가 되지 않으면 SIGKILL을 전송합니다.
참고 사이트 : https://stackoverflow.com/questions/50898134/what-does-docker-stopsignal-do
일반적으로 많이 사용하지는 않지만, 현재 github 에서는 nginx를 사용해 유닉스 소켓을 사용하면 container stop 시 Docker 데몬이 컨테이너에게 SIGTERM signal을 보내 nginx가 중단되고 모든 연결이 한번에 끊어지는 현상이 발생하여 비정상적인 종료가 된다고 합니다.
때문에 STOPSIGNAL SIGQUIT 을 사용하는게 옳다고 하기도 하며, gibhub에서 꾸준히 사람들이 토론중인걸로 보입니다.
참고 사이트 : https://github.com/Kong/docker-kong/pull/259 , https://github.com/nginxinc/docker-nginx/issues/377 , https://github.com/nginxinc/docker-nginx/issues/167
-
6. HEALTHCHECK
컨테이너의 HEALTHCHECK를 사용하여 컨테이너의 프로세스 상태를 체크할 수 있고, 두가지 사용 방법이 있습니다.
- HEALTHCHECK [OPTIONS] CMD command (컨테이너 내부에서 명령 실행하여 컨테이너 상태 확인, 이 방법을 통해 웹페이지 등을 확인할 수 있습니다)
- HEALTHCHECK NONE (베이스 이미지에서 상속된 상태 확인을 비활성화)
또한 Dockerfile에서 HEALTHCHECK는 하나의 명령만이 유효하고, 만약 여러개가 있다면 가장 마지막에 선언된 HEALTHCHECK가 적용 됩니다.
옵션 | 설명 | 기본값 |
--interval=DURATION | 헬스 체크 간격 | 30s |
--timeout=DURATION | 타임 아웃 | 30s |
--retries=N | 타임 아웃 횟수 | 3 |
HEALTHCHECK의 처음 상태는 starting 이고, HEALTHCHECK가 통과될 때 마다 healthy (이전 상태와 상관없이) 됩니다. 그리고 옵션에 정한 일정 횟수가 실패된다면 unhealthy 상태로 됩니다.
EXIT CODE | 설명 |
0: success | 컨테이너가 정상적이고 사용 가능한 상태 |
1: unhealthy | 컨테이너가 올바르게 작동하지 않는 상태 |
2: starting | 예약된 코드 |
이 상태는 docker container inspect [컨테이너명] 또는 docker container ls 에서 확인할 수 있습니다.
HEALTHCHECK를 확인해보기 위해 아래 코드를 Dockerfile에 넣은 후 centos7 버전에 nginx를 설치하고 컨테이너를 실행 해주세요.
FROM centos:7
RUN touch /etc/yum.repos.d/nginx.repo && echo -e '[nginx]\nname=nage repo\nbaseurl=http://nginx.org/packages/centos/7/$basearch/\ngpgcheck=0\nenabled=1' > /etc/yum.repos.d/nginx.repo
RUN yum -y install nginx curl
HEALTHCHECK --interval=10s --timeout=3s CMD curl -f http://127.0.0.1/ || exit 1
CMD ["nginx", "-g", "daemon off;"]
- 옵션 설명 : 10초마다(interval) HEALTHCHECK를 하고, 3초 이상이 소요(timout)되면서 3번의 재시도(retries, 초기값3)가 실패하면 unhealthy 상태로 변경됨
HEALTHCHECK는 컨테이너까지 실행 후 docker container inspect [컨테이너명] 으로 아래와 같이 확인이 가능하지만, 이러한 데이터들은 영구적으로 남는게 아니라 4096byte만 현재 상태에 저장된다고 합니다.