Docker 1.12의 새로운 기능 중 하나는 컨테이너의 상태 확인을 이미지 정의에 베이크할 수 있는 방법입니다. 이 기능은 명령줄에서 재정의할 수 있습니다. 명령줄에서 CMD 인스트럭션이 여러 개 있을 수 있습니다. 건강 체크 지침을 따르되 마지막 지침만 유효합니다.
이는 컨테이너가 상태를 다음과 같이 보고하기 때문에 매우 유용한 추가 기능입니다. 최대 1시간 는 오류를 반환할 수 있습니다. 컨테이너가 가동 중일 수 있지만 컨테이너 내부의 애플리케이션이 상태를 제공할 방법이 없습니다. 이 명령어는 이 문제를 해결합니다.
그리고 도커파일 빌드하는 아룽업타/카우치베이스 이미지입니다:
|
1 2 3 4 5 6 7 |
FROM couchbase:latest COPY configure-node.sh /opt/couchbase HEALTHCHECK --interval=5s --timeout=3s CMD curl --fail https://localhost:8091/pools || exit 1 CMD ["/opt/couchbase/configure-node.sh"] |
다음을 사용합니다. configure-node.sh 스크립트를 사용하여 서버를 구성합니다. Couchbase REST API. 여기서 주목해야 할 새로운 지침은 건강 체크. 이 명령은 다음과 같이 지정할 수 있습니다:
|
1 |
HEALTHCHECK CMD |
그리고 가 될 수 있습니다:
--간격=지속 시간(기본값 30대)--timeout=지속 시간(기본값 30대)--재시도=N(기본값 3)
그리고 는 컨테이너 내부에서 실행되어 컨테이너의 상태를 확인하는 명령어입니다. 상태 확인이 활성화된 경우 컨테이너는 세 가지 상태를 가질 수 있습니다:
시작- 컨테이너가 아직 시작 중일 때의 초기 상태건강- 명령이 성공하면 컨테이너가 정상입니다.- 건강하지 않음 - 한 번만 실행하면
가 지정된 시간 초과보다 오래 걸리면 상태가 좋지 않은 것으로 간주됩니다. 상태 확인에 실패하면 재시도가 여러 번 실행되고 그래도 실패하면 Docker 컨테이너 상태가 비정상 상태로 선언됩니다.
Docker 명령 종료 상태는 컨테이너의 상태 확인 상태를 나타냅니다. 허용되는 값은 다음과 같습니다:
0- 용기가 건강합니다.1- 컨테이너가 건강하지 않습니다.
지침에 따라 /pools REST API는 curl을 사용하여 호출됩니다. 명령이 실패하면 종료 상태가 1 가 반환되면 컨테이너가 해당 시도에 대해 건강하지 않은 것으로 표시됩니다. 이 Docker HEALTHCHECK 명령은 5초마다 호출됩니다. 명령이 3초 이내에 성공적으로 반환되지 않으면 컨테이너가 비정상 상태로 표시됩니다. 컨테이너를 다음과 같이 실행합니다:
|
1 |
docker run -d --name db arungupta/couchbase:latest |
Docker 컨테이너 상태를 확인합니다:
|
1 2 3 |
docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 55b14302671e arungupta/couchbase:latest "/entrypoint.sh /opt/" 2 seconds ago Up 1 seconds (health: starting) 8091-8094/tcp, 11207/tcp, 11210-11211/tcp, 18091-18093/tcp db |
어떻게 건강: 시작 상태는 상태 열을 클릭합니다. 몇 초 후에 확인하면 상태가 표시됩니다:
|
1 2 3 |
docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 55b14302671e arungupta/couchbase:latest "/entrypoint.sh /opt/" About a minute ago Up About a minute (healthy) 8091-8094/tcp, 11207/tcp, 11210-11211/tcp, 18091-18093/tcp db |
그리고 지금은 건강한 것으로 보고되었습니다. 이에 대한 자세한 내용 건강 체크 지침은 다음에서 찾을 수 있습니다. docs.docker.com. 이제 다음과 같은 이미지가 없는 이미지를 실행하는 경우 건강 체크 명령어를 입력한 다음 도커 실행 명령을 사용하여 유사한 값을 지정할 수 있습니다. 동등한 런타임 명령은 다음과 같습니다:
|
1 |
docker run -d --name db --health-cmd "curl --fail https://localhost:8091/pools || exit 1" --health-interval=5s --timeout=3s arungupta/couchbase |
컨테이너의 최근 5회 상태 확인은 다음을 사용하여 얻을 수 있습니다. 도커 인스펙트 명령을 사용합니다:
|
1 |
docker inspect --format='{{json .State.Health}}' db |
출력은 다음과 같이 표시됩니다:
|
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 32 33 34 35 36 |
{ "Status": "healthy", "FailingStreak": 0, "Log": [ { "Start": "2016-11-12T03:23:03.351561Z", "End": "2016-11-12T03:23:03.422176171Z", "ExitCode": 0, "Output": " % Total % Received % Xferd Average Speed Time Time Time Currentn Dload Upload Total Spent Left Speednr 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0r100 768 100 768 0 0 595k 0 --:--:-- --:--:-- --:--:-- 750kn{"isAdminCreds":true,"isROAdminCreds":false,"isEnterprise":true,"pools":[{"name":"default","uri":"/pools/default?uuid=1b84cdbd136e4e8466049dd062dd6969","streamingUri":"/poolsStreaming/default?uuid=1b84cdbd136e4e8466049dd062dd6969"}],"settings":{"maxParallelIndexers":"/settings/maxParallelIndexers?uuid=1b84cdbd136e4e8466049dd062dd6969","viewUpdateDaemon":"/settings/viewUpdateDaemon?uuid=1b84cdbd136e4e8466049dd062dd6969"},"uuid":"1b84cdbd136e4e8466049dd062dd6969","implementationVersion":"4.5.1-2844-enterprise","componentsVersion":{"lhttpc":"1.3.0","os_mon":"2.2.14","public_key":"0.21","asn1":"2.0.4","kernel":"2.16.4","ale":"4.5.1-2844-enterprise","inets":"5.9.8","ns_server":"4.5.1-2844-enterprise","crypto":"3.2","ssl":"5.3.3","sasl":"2.3.4","stdlib":"1.19.4"}}" }, { "Start": "2016-11-12T03:23:08.423558928Z", "End": "2016-11-12T03:23:08.510122392Z", "ExitCode": 0, "Output": " % Total % Received % Xferd Average Speed Time Time Time Currentn Dload Upload Total Spent Left Speednr 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0r100 768 100 768 0 0 309k 0 --:--:-- --:--:-- --:--:-- 375kn{"isAdminCreds":true,"isROAdminCreds":false,"isEnterprise":true,"pools":[{"name":"default","uri":"/pools/default?uuid=1b84cdbd136e4e8466049dd062dd6969","streamingUri":"/poolsStreaming/default?uuid=1b84cdbd136e4e8466049dd062dd6969"}],"settings":{"maxParallelIndexers":"/settings/maxParallelIndexers?uuid=1b84cdbd136e4e8466049dd062dd6969","viewUpdateDaemon":"/settings/viewUpdateDaemon?uuid=1b84cdbd136e4e8466049dd062dd6969"},"uuid":"1b84cdbd136e4e8466049dd062dd6969","implementationVersion":"4.5.1-2844-enterprise","componentsVersion":{"lhttpc":"1.3.0","os_mon":"2.2.14","public_key":"0.21","asn1":"2.0.4","kernel":"2.16.4","ale":"4.5.1-2844-enterprise","inets":"5.9.8","ns_server":"4.5.1-2844-enterprise","crypto":"3.2","ssl":"5.3.3","sasl":"2.3.4","stdlib":"1.19.4"}}" }, { "Start": "2016-11-12T03:23:13.511446818Z", "End": "2016-11-12T03:23:13.58141325Z", "ExitCode": 0, "Output": " {"isAdminCreds":true,"isROAdminCreds":false,"isEnterprise":true,"pools":[{"name":"default","uri":"/pools/default?uuid=1b84cdbd136e4e8466049dd062dd6969","streamingUri":"/poolsStreaming/default?uuid=1b84cdbd136e4e8466049dd062dd6969"}],"settings":{"maxParallelIndexers":"/settings/maxParallelIndexers?uuid=1b84cdbd136e4e8466049dd062dd6969","viewUpdateDaemon":"/settings/viewUpdateDaemon?uuid=1b84cdbd136e4e8466049dd062dd6969"},"uuid":"1b84cdbd136e4e8466049dd062dd6969","implementationVersion":"4.5.1-2844-enterprise","componentsVersion":{"lhttpc":"1.3.0","os_mon":"2.2.14","public_key":"0.21","asn1":"2.0.4","kernel":"2.16.4","ale":"4.5.1-2844-enterprise","inets":"5.9.8","ns_server":"4.5.1-2844-enterprise","crypto":"3.2","ssl":"5.3.3","sasl":"2.3.4","stdlib":"1.19.4"}} % Total % Received % Xferd Average Speed Time Time Time Currentn Dload Upload Total Spent Left Speednr 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0r100 768 100 768 0 0 248k 0 --:--:-- --:--:-- --:--:-- 375kn" }, { "Start": "2016-11-12T03:23:18.583512367Z", "End": "2016-11-12T03:23:18.677727356Z", "ExitCode": 0, "Output": " % Total % Received % Xferd Average Speed Time Time Time Currentn Dlo{"isAdminCreds":true,"isROAdminCreds":false,"isEnterprise":true,"pools":[{"name":"default","uri":"/pools/default?uuid=1b84cdbd136e4e8466049dd062dd6969","streamingUri":"/poolsStreaming/default?uuid=1b84cdbd136e4e8466049dd062dd6969"}],"settings":{"maxParallelIndexers":"/settings/maxParallelIndexers?uuid=1b84cdbd136e4e8466049dd062dd6969","viewUpdateDaemon":"/settings/viewUpdateDaemon?uuid=1b84cdbd136e4e8466049dd062dd6969"},"uuid":"1b84cdbd136e4e8466049dd062dd6969","implementationVersion":"4.5.1-2844-enterprise","componentsVersion":{"lhttpc":"1.3.0","os_mon":"2.2.14","public_key":"0.21","asn1":"2.0.4","kernel":"2.16.4","ale":"4.5.1-2844-enterprise","inets":"5.9.8","ns_server":"4.5.1-2844-enterprise","crypto":"3.2","ssl":"5.3.3","sasl":"2.3.4","stdlib":"1.19.4"}}ad Upload Total Spent Left Speednr 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0r100 768 100 768 0 0 307k 0 --:--:-- --:--:-- --:--:-- 375kn" }, { "Start": "2016-11-12T03:23:23.679661467Z", "End": "2016-11-12T03:23:23.782372291Z", "ExitCode": 0, "Output": " % Total % Received % Xferd Average Speed Time Time Time Currentn Dload Upload Total Spent Left{"isAdminCreds":true,"isROAdminCreds":false,"isEnterprise":true,"pools":[{"name":"default","uri":"/pools/default?uuid=1b84cdbd136e4e8466049dd062dd6969","streamingUri":"/poolsStreaming/default?uuid=1b84cdbd136e4e8466049dd062dd6969"}],"settings":{"maxParallelIndexers":"/settings/maxParallelIndexers?uuid=1b84cdbd136e4e8466049dd062dd6969","viewUpdateDaemon":"/settings/viewUpdateDaemon?uuid=1b84cdbd136e4e8466049dd062dd6969"},"uuid":"1b84cdbd136e4e8466049dd062dd6969","implementationVersion":"4.5.1-2844-enterprise","componentsVersion":{"lhttpc":"1.3.0","os_mon":"2.2.14","public_key":"0.21","asn1":"2.0.4","kernel":"2.16.4","ale":"4.5.1-2844-enterprise","inets":"5.9.8","ns_server":"4.5.1-2844-enterprise","crypto":"3.2","ssl":"5.3.3","sasl":"2.3.4","stdlib":"1.19.4"}} Speednr 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0r100 768 100 768 0 0 439k 0 --:--:-- --:--:-- --:--:-- 750kn" } ] } |