Um dos novos recursos do Docker 1.12 é como a verificação de integridade de um contêiner pode ser incorporada à definição da imagem. E isso pode ser substituído na linha de comando. Assim como o CMD instrução, pode haver vários VERIFICAÇÃO DE SAÚDE no Dockerfile, mas somente a última é eficaz.
Essa é uma ótima adição, pois um contêiner que informa o status como Até 1 hora pode retornar erros. O contêiner pode estar ativo, mas não há como o aplicativo dentro do contêiner fornecer um status. Essa instrução corrige isso.
O Dockerfile que constrói arungupta/couchbase A imagem é:
|
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"] |
Ele usa configure-node.sh para configurar o servidor usando API REST do Couchbase. A nova instrução a ser observada aqui é VERIFICAÇÃO DE SAÚDE. Essa instrução pode ser especificada como:
|
1 |
HEALTHCHECK CMD |
O pode ser:
--intervalo=DURAÇÃO(padrão 30s)--timeout=DURATION(padrão 30s)--retries=N(padrão 3)
O é o comando que é executado dentro do contêiner para verificar sua integridade. Se a verificação de integridade estiver ativada, o contêiner poderá ter três estados:
início- Status inicial quando o contêiner ainda está sendo iniciadosaudável- Se o comando for bem-sucedido, o contêiner estará íntegro- insalubre - Se uma única execução do
demorar mais do que o tempo limite especificado, ele será considerado insalubre. Se uma verificação de integridade falhar, novas tentativas serão executadas várias vezes e o status do contêiner do Docker será declarado insalubre se ainda falhar.
O status de saída dos comandos do Docker indica o status do HEALTHCHECK do contêiner. Os seguintes valores são permitidos:
0- o contêiner é saudável1- o contêiner não é saudável
Em nossa instrução, /pools A API REST é chamada usando curl. Se o comando falhar, um status de saída de 1 é retornado, e isso marca o contêiner como não saudável para essa tentativa. Esse comando Docker HEALTHCHECK é chamado a cada 5 segundos. O contêiner é marcado como não saudável se o comando não retornar com êxito em 3 segundos. Execute o contêiner como:
|
1 |
docker run -d --name db arungupta/couchbase:latest |
Verifique o status do contêiner do 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 |
Observe como saúde: início O status é relatado no STATUS coluna. A verificação após alguns segundos mostra o status:
|
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 |
E agora ele é relatado como saudável. Mais detalhes sobre isso VERIFICAÇÃO DE SAÚDE As instruções podem ser encontradas em docs.docker.com. Agora, se você estiver executando uma imagem que não tenha VERIFICAÇÃO DE SAÚDE então a instrução execução do docker pode ser usado para especificar valores semelhantes. Um comando de tempo de execução equivalente seria:
|
1 |
docker run -d --name db --health-cmd "curl --fail https://localhost:8091/pools || exit 1" --health-interval=5s --timeout=3s arungupta/couchbase |
As últimas 5 verificações de integridade de um contêiner podem ser obtidas usando o inspeção de docas comando:
|
1 |
docker inspect --format='{{json .State.Health}}' db |
A saída é mostrada como:
|
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" } ] } |