{"id":2340,"date":"2017-01-06T06:09:59","date_gmt":"2017-01-06T06:09:59","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=2340"},"modified":"2023-06-21T06:18:51","modified_gmt":"2023-06-21T13:18:51","slug":"labels-constraints-docker-daemon-service","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/labels-constraints-docker-daemon-service\/","title":{"rendered":"R\u00f3tulos e restri\u00e7\u00f5es com o servi\u00e7o e o Docker Daemon"},"content":{"rendered":"<p><a href=\"https:\/\/docs.docker.com\/engine\/userguide\/labels-custom-metadata\/\">Metadados<\/a>como, por exemplo <a href=\"https:\/\/docs.docker.com\/engine\/userguide\/labels-custom-metadata\/#\/daemon-labels\">r\u00f3tulos<\/a>pode ser anexado a um daemon do Docker. Um r\u00f3tulo \u00e9 um par de chave\/valor e permite que o host do Docker seja um alvo de cont\u00eaineres. A sem\u00e2ntica dos r\u00f3tulos \u00e9 totalmente definida pelo aplicativo. Um novo Docker <a href=\"https:\/\/docs.docker.com\/swarm\/scheduler\/filter\/\">restri\u00e7\u00e3o<\/a> podem ser especificados durante a cria\u00e7\u00e3o do servi\u00e7o, visando \u00e0s tarefas em um host espec\u00edfico. Vamos ver como podemos usar r\u00f3tulos e restri\u00e7\u00f5es no Docker para um aplicativo do mundo real.<\/p>\n<p><a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/current\/architecture\/services-archi-multi-dimensional-scaling.html\">Couchbase usando escalonamento multidimensional <\/a>(ou MDS) nos permite dividir o servi\u00e7o de pesquisa de \u00edndice, dados, consulta e texto completo<br \/>\nem v\u00e1rios n\u00f3s. As necessidades de cada servi\u00e7o s\u00e3o diferentes. Por exemplo, a consulta exige muita CPU, o \u00edndice exige muito disco e os dados s\u00e3o uma combina\u00e7\u00e3o de mem\u00f3ria e leitura\/grava\u00e7\u00e3o r\u00e1pida, como SSD. O MDS permite que os recursos de hardware sejam atribu\u00eddos e otimizados de forma independente por n\u00f3, \u00e0 medida que os requisitos do aplicativo mudam.<br \/>\n<a href=\"\/wp-content\/original-assets\/july2015\/labels-and-constraints-with-docker-daemon-and-service\/couchbase-mds.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-14140\" src=\"\/wp-content\/original-assets\/july2015\/labels-and-constraints-with-docker-daemon-and-service\/couchbase-mds.png\" alt=\"couchbase-mds\" width=\"975\" height=\"525\" \/><\/a> Leia mais sobre <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/current\/architecture\/services-archi-multi-dimensional-scaling.html\">Escala multidimensional<\/a>.<br \/>\nVamos ver como isso pode ser feito facilmente em um cluster de tr\u00eas n\u00f3s usando <a href=\"https:\/\/docs.docker.com\/engine\/swarm\/\">Modo de enxame do Docker<\/a>.<\/p>\n<h2>Iniciar inst\u00e2ncias do Ubuntu<\/h2>\n<p>Inicie tr\u00eas inst\u00e2ncias no EC2 do Ubuntu Server 14.04 LTS (HVM) (AMI ID:\u00a0<code>ami-06116566<\/code>). Adote os padr\u00f5es em todos os casos, exceto para o grupo de seguran\u00e7a. O modo Swarm requer os tr\u00eas itens a seguir <a href=\"https:\/\/docs.docker.com\/engine\/swarm\/swarm-tutorial\/#\/open-ports-between-the-hosts\">portas abertas entre hosts<\/a>:<\/p>\n<ul>\n<li><strong>Porta TCP 2377<\/strong> para comunica\u00e7\u00f5es de gerenciamento de cluster<\/li>\n<li><strong>TCP<\/strong> e <strong>Porta UDP 7946<\/strong> para comunica\u00e7\u00e3o entre os n\u00f3s<\/li>\n<li><strong>TCP<\/strong> e <strong>Porta UDP 4789<\/strong> para tr\u00e1fego de rede de sobreposi\u00e7\u00e3o<\/li>\n<\/ul>\n<p>Certifique-se de criar um novo grupo de seguran\u00e7a com essas regras:<br \/>\n<a href=\"\/wp-content\/original-assets\/july2015\/labels-and-constraints-with-docker-daemon-and-service\/ec2-swarmmode-security-group-1024x652.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-14144\" src=\"\/wp-content\/original-assets\/july2015\/labels-and-constraints-with-docker-daemon-and-service\/ec2-swarmmode-security-group-1024x652.png\" alt=\"ec2-swarmmode-security-group\" width=\"604\" height=\"385\" \/><\/a><br \/>\nAguarde alguns minutos para que as inst\u00e2ncias sejam provisionadas.<\/p>\n<h2>Configurar o Docker no Ubuntu<\/h2>\n<p>O modo Swarm foi introduzido no Docker 1.12. No momento em que este artigo foi escrito, o 1.12 RC4 era o candidato mais recente. Use o script a seguir para instalar a vers\u00e3o RC4 com recursos experimentais:<\/p>\n<pre class=\"lang:default decode:true\">publicIp=`aws ec2 describe-instances --filters Name=instance-state-name,Values=running | jq -r .Reservations[].Instances[].PublicDnsName`\r\nfor node in $publicIp\r\ndo\r\n    ssh -o StrictHostKeyChecking=no -i ~\/.ssh\/aruncouchbase.pem ubuntu@$node 'curl -fsSL https:\/\/experimental.docker.com\/ | sh'\r\n    ssh -i ~\/.ssh\/aruncouchbase.pem ubuntu@$node 'sudo usermod -aG docker ubuntu'\r\n    ssh -i ~\/.ssh\/aruncouchbase.pem ubuntu@$node 'docker version'\r\ndone<\/pre>\n<p>Esse script pressup\u00f5e que <a href=\"https:\/\/docs.aws.amazon.com\/cli\/latest\/userguide\/cli-chap-getting-set-up.html\">A CLI do AWS j\u00e1 est\u00e1 configurada<\/a>\u00a0e realiza a seguinte configura\u00e7\u00e3o para <strong>todos<\/strong> inst\u00e2ncias em execu\u00e7\u00e3o em seu EC2 configurado<br \/>\nconta:<\/p>\n<ul>\n<li>Obter o endere\u00e7o IP p\u00fablico de cada inst\u00e2ncia<\/li>\n<li>Para cada inst\u00e2ncia\n<ul>\n<li>Instale a vers\u00e3o mais recente do Docker com recursos experimentais<\/li>\n<li>Adiciona <code>ubuntu<\/code> usu\u00e1rio para o <code>doca<\/code> group. Isso permite que o Docker seja usado como um usu\u00e1rio n\u00e3o raiz.<\/li>\n<li>Imprime a vers\u00e3o do Docker<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Esse script simples configurar\u00e1 o host do Docker em todas as tr\u00eas inst\u00e2ncias.<\/p>\n<h2>Atribuir r\u00f3tulos ao Docker Daemon<\/h2>\n<p>Os r\u00f3tulos podem ser definidos usando <code>DOCKER_OPTS<\/code>. Para o Ubuntu, isso \u00e9 definido na se\u00e7\u00e3o\u00a0<code>\/etc\/default\/docker<\/code>\u00a0arquivo. R\u00f3tulos distintos precisam ser atribu\u00eddos a cada n\u00f3. Por exemplo, use\u00a0<code>couchbase.mds<\/code>\u00a0chave<br \/>\ne<br \/>\n<code>\u00edndice<\/code> valor.<\/p>\n<pre class=\"lang:default decode:true\">ssh -i ~\/.ssh\/aruncouchbase.pem ubuntu@ \r\n'sudo sed -i '\/#DOCKER_OPTS\/cDOCKER_OPTS=\"--label=couchbase.mds=index\"' \/etc\/default\/docker';\r\nssh -i ~\/.ssh\/aruncouchbase.pem ubuntu@ 'sudo restart docker'\r\nssh -i ~\/.ssh\/aruncouchbase.pem ubuntu@ 'docker info';\r\n<\/pre>\n<p>Voc\u00ea tamb\u00e9m precisa reiniciar o daemon do Docker. Por fim, <code>informa\u00e7\u00f5es da plataforma<\/code>\u00a0exibe informa\u00e7\u00f5es de todo o sistema:<\/p>\n<pre class=\"lang:default decode:true\">Containers: 0\r\n Running: 0\r\n Paused: 0\r\n Stopped: 0\r\nImages: 0\r\nServer Version: 1.12.0-rc4\r\nStorage Driver: aufs\r\n Root Dir: \/var\/lib\/docker\/aufs\r\n Backing Filesystem: extfs\r\n Dirs: 0\r\n Dirperm1 Supported: false\r\nLogging Driver: json-file\r\nCgroup Driver: cgroupfs\r\nPlugins:\r\n Volume: local\r\n Network: null host bridge overlay\r\nSwarm: inactive\r\nRuntimes: runc\r\nDefault Runtime: runc\r\nSecurity Options: apparmor\r\nKernel Version: 3.13.0-74-generic\r\nOperating System: Ubuntu 14.04.3 LTS\r\nOSType: linux\r\nArchitecture: x86_64\r\nCPUs: 1\r\nTotal Memory: 992.5 MiB\r\nName: ip-172-31-14-15\r\nID: KISZ:RSMD:4YOZ:2FKL:GJTN:EVGC:U3GH:CHC3:XUJN:4UJ2:H3QF:GZFH\r\nDocker Root Dir: \/var\/lib\/docker\r\nDebug Mode (client): false\r\nDebug Mode (server): false\r\nRegistry: https:\/\/index.docker.io\/v1\/\r\nLabels:\r\n couchbase.mds=index\r\nExperimental: true\r\nInsecure Registries:\r\n 127.0.0.0\/8\r\nWARNING: No swap limit support<\/pre>\n<p>Como voc\u00ea pode ver, os r\u00f3tulos est\u00e3o vis\u00edveis nessas informa\u00e7\u00f5es. Para o segundo n\u00f3, atribua um r\u00f3tulo diferente:<\/p>\n<pre class=\"lang:default decode:true\">ssh -i ~\/.ssh\/aruncouchbase.pem ubuntu@ \r\n'sudo sed -i '\/#DOCKER_OPTS\/cDOCKER_OPTS=\"--label=couchbase.mds=data\"' \/etc\/default\/docker';\r\nssh -i ~\/.ssh\/aruncouchbase.pem ubuntu@ 'sudo restart docker'\r\nssh -i ~\/.ssh\/aruncouchbase.pem ubuntu@ 'docker info';<\/pre>\n<p>Certifique-se de usar o endere\u00e7o IP da segunda inst\u00e2ncia do EC2. As informa\u00e7\u00f5es atualizadas sobre o daemon do Docker nesse caso ser\u00e3o:<\/p>\n<pre class=\"lang:default decode:true\">Labels:\r\n couchbase.mds=data<\/pre>\n<p>E, finalmente, o \u00faltimo n\u00f3:<\/p>\n<pre class=\"lang:default decode:true\">ssh -i ~\/.ssh\/aruncouchbase.pem ubuntu@ \r\n'sudo sed -i '\/#DOCKER_OPTS\/cDOCKER_OPTS=\"--label=couchbase.mds=query\"' \/etc\/default\/docker';\r\nssh -i ~\/.ssh\/aruncouchbase.pem ubuntu@ 'sudo restart docker'\r\nssh -i ~\/.ssh\/aruncouchbase.pem ubuntu@ 'docker info';<\/pre>\n<p>As informa\u00e7\u00f5es atualizadas sobre o daemon do Docker para esse host ser\u00e3o exibidas:<\/p>\n<pre class=\"lang:default decode:true\">Labels:\r\n couchbase.mds=query<\/pre>\n<p>No nosso caso, \u00e9 criado um cluster homog\u00eaneo em que as m\u00e1quinas s\u00e3o exatamente iguais, incluindo o sistema operacional, a CPU, o disco e a capacidade de mem\u00f3ria. No mundo real, voc\u00ea normalmente tem o mesmo sistema operacional, mas a capacidade da inst\u00e2ncia, como disco, CPU e mem\u00f3ria, seria diferente com base nos servi\u00e7os do Couchbase que voc\u00ea deseja executar nelas. Esses r\u00f3tulos fariam todo o sentido nesse caso, mas eles mostram o ponto aqui.<\/p>\n<h2>Ativar o modo Swarm e criar o cluster<\/h2>\n<p>Vamos ativar o modo Swarm e criar um cluster de 1 n\u00f3 Manager e 2 n\u00f3s Worker. Por padr\u00e3o, os gerentes tamb\u00e9m s\u00e3o n\u00f3s de trabalho. Inicialize o Swarm no primeiro n\u00f3:<\/p>\n<pre class=\"lang:default decode:true\">ssh -i ~\/.ssh\/aruncouchbase.pem ubuntu@ 'docker swarm init --secret mySecret --listen-addr :2377'<\/pre>\n<p>Isso mostrar\u00e1 o resultado:<\/p>\n<pre class=\"lang:default decode:true\">Swarm initialized: current node (ezrf5ap238kpmyq5h0lf55hxi) is now a manager.\r\n\r\nTo add a worker to this swarm, run the following command:\r\n docker swarm join --secret mySecret \r\n --ca-hash sha256:ebda297c36a9d4c772f9e7867c453da42f69fe37cdfb1ba087f073051593a683 \r\n ip-172-31-14-15.us-west-1.compute.internal:2377<\/pre>\n<p>Adicione outros dois n\u00f3s como trabalhadores:<\/p>\n<pre class=\"lang:default decode:true\">ssh -i ~\/.ssh\/aruncouchbase.pem ubuntu@ 'docker swarm join --secret mySecret :2377'\r\nssh -i ~\/.ssh\/aruncouchbase.pem ubuntu@ 'docker swarm join --secret mySecret :2377'<\/pre>\n<p>Os comandos exatos e a sa\u00edda, nesse caso, s\u00e3o:<\/p>\n<pre class=\"lang:default decode:true\">ssh -i ~\/.ssh\/aruncouchbase.pem ubuntu@ec2-54-153-101-215.us-west-1.compute.amazonaws.com 'docker swarm init --secret mySecret --listen-addr ip-172-31-14-15.us-west-1.compute.internal:2377'\r\nssh -i ~\/.ssh\/aruncouchbase.pem ubuntu@ec2-52-53-223-255.us-west-1.compute.amazonaws.com 'docker swarm join --secret mySecret ip-172-31-14-15.us-west-1.compute.internal:2377'\r\nssh -i ~\/.ssh\/aruncouchbase.pem ubuntu@ec2-52-53-251-64.us-west-1.compute.amazonaws.com 'docker swarm join --secret mySecret ip-172-31-14-15.us-west-1.compute.internal:2377'<\/pre>\n<p>Agora \u00e9 poss\u00edvel obter detalhes completos sobre o cluster:<\/p>\n<pre class=\"lang:default decode:true\">ssh -i ~\/.ssh\/aruncouchbase.pem ubuntu@ec2-54-153-101-215.us-west-1.compute.amazonaws.com 'docker info'<\/pre>\n<p>E isso mostra o resultado:<\/p>\n<pre class=\"lang:default decode:true\">Containers: 0\r\n Running: 0\r\n Paused: 0\r\n Stopped: 0\r\nImages: 0\r\nServer Version: 1.12.0-rc4\r\nStorage Driver: aufs\r\n Root Dir: \/var\/lib\/docker\/aufs\r\n Backing Filesystem: extfs\r\n Dirs: 0\r\n Dirperm1 Supported: false\r\nLogging Driver: json-file\r\nCgroup Driver: cgroupfs\r\nPlugins:\r\n Volume: local\r\n Network: bridge null host overlay\r\nSwarm: active\r\n NodeID: ezrf5ap238kpmyq5h0lf55hxi\r\n IsManager: Yes\r\n Managers: 1\r\n Nodes: 3\r\n CACertHash: sha256:ebda297c36a9d4c772f9e7867c453da42f69fe37cdfb1ba087f073051593a683\r\nRuntimes: runc\r\nDefault Runtime: runc\r\nSecurity Options: apparmor\r\nKernel Version: 3.13.0-74-generic\r\nOperating System: Ubuntu 14.04.3 LTS\r\nOSType: linux\r\nArchitecture: x86_64\r\nCPUs: 1\r\nTotal Memory: 992.5 MiB\r\nName: ip-172-31-14-15\r\nID: KISZ:RSMD:4YOZ:2FKL:GJTN:EVGC:U3GH:CHC3:XUJN:4UJ2:H3QF:GZFH\r\nDocker Root Dir: \/var\/lib\/docker\r\nDebug Mode (client): false\r\nDebug Mode (server): false\r\nRegistry: https:\/\/index.docker.io\/v1\/\r\nLabels:\r\n couchbase.mds=index\r\nExperimental: true\r\nInsecure Registries:\r\n 127.0.0.0\/8\r\nWARNING: No swap limit support<\/pre>\n<p>Isso mostra que criamos um cluster de 3 n\u00f3s com um gerenciador.<\/p>\n<h2>Executar o servi\u00e7o do Docker com restri\u00e7\u00f5es<\/h2>\n<p>Agora, vamos executar tr\u00eas servi\u00e7os do Couchbase com restri\u00e7\u00f5es diferentes. Cada servi\u00e7o do Docker especifica as restri\u00e7\u00f5es usando<code>--constraint engine.labels.<label><\/label><\/code> em que h\u00e1 correspond\u00eancias com os r\u00f3tulos definidos anteriormente para os n\u00f3s. Cada servi\u00e7o recebe um nome exclusivo, pois isso permite dimension\u00e1-los individualmente. Todos os comandos s\u00e3o direcionados para o gerenciador do Swarm:<\/p>\n<pre class=\"lang:default decode:true\">ssh -i ~\/.ssh\/aruncouchbase.pem ubuntu@ 'docker service create --name=cb-mds-index --constraint engine.labels.couchbase.mds==index couchbase'\r\nssh -i ~\/.ssh\/aruncouchbase.pem ubuntu@ 'docker service create --name=cb-mds-data --constraint engine.labels.couchbase.mds==data couchbase'\r\nssh -i ~\/.ssh\/aruncouchbase.pem ubuntu@ 'docker service create --name=cb-mds-query --constraint engine.labels.couchbase.mds==query couchbase'<\/pre>\n<p>Os comandos exatos em nosso caso s\u00e3o:<\/p>\n<pre class=\"lang:default decode:true\">&gt; ssh -i ~\/.ssh\/aruncouchbase.pem ubuntu@ec2-54-153-101-215.us-west-1.compute.amazonaws.com 'docker service create --name=cb-mds-index --constraint engine.labels.couchbase.mds==index couchbase'\r\n34lcko519mvr32hxw2m8dwp5c\r\n&gt; ssh -i ~\/.ssh\/aruncouchbase.pem ubuntu@ec2-54-153-101-215.us-west-1.compute.amazonaws.com 'docker service create --name=cb-mds-data --constraint engine.labels.couchbase.mds==data couchbase'\r\n0drcucii08tnx5sm9prug30m1\r\n&gt; ssh -i ~\/.ssh\/aruncouchbase.pem ubuntu@ec2-54-153-101-215.us-west-1.compute.amazonaws.com 'docker service create --name=cb-mds-query --constraint engine.labels.couchbase.mds==query couchbase'<\/pre>\n<p>A lista de servi\u00e7os pode ser verificada como:<\/p>\n<pre class=\"lang:default decode:true\">ssh -i ~\/.ssh\/aruncouchbase.pem ubuntu@ 'docker service ls'<\/pre>\n<p>Isso mostra a sa\u00edda como:<\/p>\n<pre class=\"lang:default decode:true\">ID            NAME          REPLICAS  IMAGE      COMMAND\r\n0drcucii08tn  cb-mds-data   1\/1       couchbase  \r\n34lcko519mvr  cb-mds-index  1\/1       couchbase  \r\nbxjqjm6mashw  cb-mds-query  1\/1       couchbase<\/pre>\n<p>E a lista de tarefas (essencialmente cont\u00eaineres dentro desse servi\u00e7o) para cada servi\u00e7o pode ser verificada como:<\/p>\n<pre class=\"lang:default decode:true\">&gt; ssh -i ~\/.ssh\/aruncouchbase.pem ubuntu@ 'docker service tasks '<\/pre>\n<p>E o resultado em nosso caso:<\/p>\n<pre class=\"lang:default decode:true\">&gt; ssh -i ~\/.ssh\/aruncouchbase.pem ubuntu@ec2-54-153-101-215.us-west-1.compute.amazonaws.com 'docker service tasks cb-mds-index'\r\nID                         NAME            SERVICE       IMAGE      LAST STATE             DESIRED STATE  NODE\r\n58jxojx32nf66jwqwt7nyg3cf  cb-mds-index.1  cb-mds-index  couchbase  Running 6 minutes ago  Running        ip-172-31-14-15\r\n&gt; ssh -i ~\/.ssh\/aruncouchbase.pem ubuntu@ec2-54-153-101-215.us-west-1.compute.amazonaws.com 'docker service tasks cb-mds-data'\r\nID                         NAME           SERVICE      IMAGE      LAST STATE             DESIRED STATE  NODE\r\naf9zpuh6956fcih0sr70hfban  cb-mds-data.1  cb-mds-data  couchbase  Running 6 minutes ago  Running        ip-172-31-14-14\r\n&gt; ssh -i ~\/.ssh\/aruncouchbase.pem ubuntu@ec2-54-153-101-215.us-west-1.compute.amazonaws.com 'docker service tasks cb-mds-query'\r\nID                         NAME            SERVICE       IMAGE      LAST STATE             DESIRED STATE  NODE\r\nceqaza4xk02ha7t1un60jxtem  cb-mds-query.1  cb-mds-query  couchbase  Running 6 minutes ago  Running        ip-172-31-14-13<\/pre>\n<p>Isso mostra que os servi\u00e7os est\u00e3o bem distribu\u00eddos em diferentes n\u00f3s. Sinta-se \u00e0 vontade para verificar se a tarefa est\u00e1 de fato agendada no n\u00f3 com o r\u00f3tulo correto. Todas as inst\u00e2ncias do Couchbase podem ser configuradas em um cluster para fornecer uma solu\u00e7\u00e3o completa de banco de dados para seus aplicativos da Web, m\u00f3veis e de IoT. Quer saber mais?<\/p>\n<ul>\n<li><a href=\"https:\/\/docs.docker.com\/engine\/swarm\/\">Modo Docker Swarm<\/a><\/li>\n<li><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/containers\/\">Couchbase em cont\u00eaineres<\/a><\/li>\n<li>Siga-nos em <a href=\"https:\/\/twitter.com\/couchbasedev\">@couchbasedev<\/a> ou <a href=\"https:\/\/twitter.com\/couchbase\">@couchbase<\/a><\/li>\n<li>Fa\u00e7a perguntas sobre <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/forums\/\">F\u00f3runs do Couchbase<\/a><\/li>\n<\/ul>","protected":false},"excerpt":{"rendered":"<p>Metadata, such as labels, can be attached to a Docker daemon. A label is a key\/value pair and allows the Docker host to be a target of containers. The semantics of labels is completely defined by the application. A new [&hellip;]<\/p>","protected":false},"author":58,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1816],"tags":[],"ppma_author":[8933],"class_list":["post-2340","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-couchbase-server"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.8 (Yoast SEO v25.8) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Docker Daemon and Service: Labels + Constraints | Couchbase<\/title>\n<meta name=\"description\" content=\"Metadata, such as labels, can be attached to a Docker daemon. Learn how to use labels and constraints in Docker for a real-world application.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/pt\/labels-constraints-docker-daemon-service\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Labels and Constraints with Docker Daemon and Service\" \/>\n<meta property=\"og:description\" content=\"Metadata, such as labels, can be attached to a Docker daemon. Learn how to use labels and constraints in Docker for a real-world application.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/labels-constraints-docker-daemon-service\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-01-06T06:09:59+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-06-21T13:18:51+00:00\" \/>\n<meta name=\"author\" content=\"Arun Gupta, VP, Developer Advocacy, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@arungupta\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Arun Gupta, VP, Developer Advocacy, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/labels-constraints-docker-daemon-service\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/labels-constraints-docker-daemon-service\/\"},\"author\":{\"name\":\"Arun Gupta, VP, Developer Advocacy, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/39d8caed0f536489b6aa6e8d31ee631f\"},\"headline\":\"Labels and Constraints with Docker Daemon and Service\",\"datePublished\":\"2017-01-06T06:09:59+00:00\",\"dateModified\":\"2023-06-21T13:18:51+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/labels-constraints-docker-daemon-service\/\"},\"wordCount\":783,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/labels-constraints-docker-daemon-service\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"articleSection\":[\"Couchbase Server\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/labels-constraints-docker-daemon-service\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/labels-constraints-docker-daemon-service\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/labels-constraints-docker-daemon-service\/\",\"name\":\"Docker Daemon and Service: Labels + Constraints | Couchbase\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/labels-constraints-docker-daemon-service\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/labels-constraints-docker-daemon-service\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2017-01-06T06:09:59+00:00\",\"dateModified\":\"2023-06-21T13:18:51+00:00\",\"description\":\"Metadata, such as labels, can be attached to a Docker daemon. Learn how to use labels and constraints in Docker for a real-world application.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/labels-constraints-docker-daemon-service\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/labels-constraints-docker-daemon-service\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/labels-constraints-docker-daemon-service\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/labels-constraints-docker-daemon-service\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Labels and Constraints with Docker Daemon and Service\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/39d8caed0f536489b6aa6e8d31ee631f\",\"name\":\"Arun Gupta, VP, Developer Advocacy, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/8900a75409c646948fe0bd80f6240337\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/f912e10b5f39748ee4f1a0b0da6f42747f0b3a94fe7acb511791468656f5e726?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/f912e10b5f39748ee4f1a0b0da6f42747f0b3a94fe7acb511791468656f5e726?s=96&d=mm&r=g\",\"caption\":\"Arun Gupta, VP, Developer Advocacy, Couchbase\"},\"description\":\"Arun Gupta is the vice president of developer advocacy at Couchbase. He has built and led developer communities for 10+ years at Sun, Oracle, and Red Hat. He has deep expertise in leading cross-functional teams to develop and execute strategy, planning and execution of content, marketing campaigns, and programs. Prior to that he led engineering teams at Sun and is a founding member of the Java EE team. Gupta has authored more than 2,000 blog posts on technology. He has extensive speaking experience in more than 40 countries on myriad topics and is a JavaOne Rock Star for three years in a row. Gupta also founded the Devoxx4Kids chapter in the US and continues to promote technology education among children. An author of several books on technology, an avid runner, a globe trotter, a Java Champion, a JUG leader, NetBeans Dream Team member, and a Docker Captain, he is easily accessible at @arungupta.\",\"sameAs\":[\"https:\/\/x.com\/arungupta\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/pt\/author\/arun-gupta\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Docker Daemon and Service: Labels + Constraints | Couchbase","description":"Metadata, such as labels, can be attached to a Docker daemon. Learn how to use labels and constraints in Docker for a real-world application.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/pt\/labels-constraints-docker-daemon-service\/","og_locale":"pt_BR","og_type":"article","og_title":"Labels and Constraints with Docker Daemon and Service","og_description":"Metadata, such as labels, can be attached to a Docker daemon. Learn how to use labels and constraints in Docker for a real-world application.","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/labels-constraints-docker-daemon-service\/","og_site_name":"The Couchbase Blog","article_published_time":"2017-01-06T06:09:59+00:00","article_modified_time":"2023-06-21T13:18:51+00:00","author":"Arun Gupta, VP, Developer Advocacy, Couchbase","twitter_card":"summary_large_image","twitter_creator":"@arungupta","twitter_misc":{"Written by":"Arun Gupta, VP, Developer Advocacy, Couchbase","Est. reading time":"7 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/labels-constraints-docker-daemon-service\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/labels-constraints-docker-daemon-service\/"},"author":{"name":"Arun Gupta, VP, Developer Advocacy, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/39d8caed0f536489b6aa6e8d31ee631f"},"headline":"Labels and Constraints with Docker Daemon and Service","datePublished":"2017-01-06T06:09:59+00:00","dateModified":"2023-06-21T13:18:51+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/labels-constraints-docker-daemon-service\/"},"wordCount":783,"commentCount":1,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/labels-constraints-docker-daemon-service\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","articleSection":["Couchbase Server"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/labels-constraints-docker-daemon-service\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/labels-constraints-docker-daemon-service\/","url":"https:\/\/www.couchbase.com\/blog\/labels-constraints-docker-daemon-service\/","name":"Docker Daemon and Service: Labels + Constraints | Couchbase","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/labels-constraints-docker-daemon-service\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/labels-constraints-docker-daemon-service\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2017-01-06T06:09:59+00:00","dateModified":"2023-06-21T13:18:51+00:00","description":"Metadata, such as labels, can be attached to a Docker daemon. Learn how to use labels and constraints in Docker for a real-world application.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/labels-constraints-docker-daemon-service\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/labels-constraints-docker-daemon-service\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/labels-constraints-docker-daemon-service\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/labels-constraints-docker-daemon-service\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Labels and Constraints with Docker Daemon and Service"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"Blog do Couchbase","description":"Couchbase, o banco de dados NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"Blog do Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/39d8caed0f536489b6aa6e8d31ee631f","name":"Arun Gupta, vice-presidente de defesa do desenvolvedor, Couchbase","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/8900a75409c646948fe0bd80f6240337","url":"https:\/\/secure.gravatar.com\/avatar\/f912e10b5f39748ee4f1a0b0da6f42747f0b3a94fe7acb511791468656f5e726?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f912e10b5f39748ee4f1a0b0da6f42747f0b3a94fe7acb511791468656f5e726?s=96&d=mm&r=g","caption":"Arun Gupta, VP, Developer Advocacy, Couchbase"},"description":"Arun Gupta \u00e9 o vice-presidente de defesa do desenvolvedor na Couchbase. Ele criou e liderou comunidades de desenvolvedores por mais de 10 anos na Sun, Oracle e Red Hat. Ele tem grande experi\u00eancia na lideran\u00e7a de equipes multifuncionais para desenvolver e executar estrat\u00e9gias, planejamento e execu\u00e7\u00e3o de conte\u00fado, campanhas de marketing e programas. Antes disso, liderou equipes de engenharia na Sun e \u00e9 membro fundador da equipe Java EE. Gupta \u00e9 autor de mais de 2.000 postagens em blogs sobre tecnologia. Ele tem uma vasta experi\u00eancia em palestras em mais de 40 pa\u00edses sobre uma infinidade de t\u00f3picos e \u00e9 um JavaOne Rock Star h\u00e1 tr\u00eas anos consecutivos. Gupta tamb\u00e9m fundou o cap\u00edtulo Devoxx4Kids nos EUA e continua a promover a educa\u00e7\u00e3o tecnol\u00f3gica entre as crian\u00e7as. Autor de v\u00e1rios livros sobre tecnologia, corredor \u00e1vido, viajante do mundo inteiro, campe\u00e3o de Java, l\u00edder de JUG, membro do NetBeans Dream Team e capit\u00e3o do Docker, ele pode ser facilmente acessado em @arungupta.","sameAs":["https:\/\/x.com\/arungupta"],"url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/arun-gupta\/"}]}},"authors":[{"term_id":8933,"user_id":58,"is_guest":0,"slug":"arun-gupta","display_name":"Arun Gupta, VP, Developer Advocacy, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/f912e10b5f39748ee4f1a0b0da6f42747f0b3a94fe7acb511791468656f5e726?s=96&d=mm&r=g","author_category":"","last_name":"Gupta","first_name":"Arun","job_title":"","user_url":"","description":"Arun Gupta \u00e9 o vice-presidente de defesa do desenvolvedor na Couchbase. Ele criou e liderou comunidades de desenvolvedores por mais de 10 anos na Sun, Oracle e Red Hat. Ele tem grande experi\u00eancia na lideran\u00e7a de equipes multifuncionais para desenvolver e executar estrat\u00e9gias, planejamento e execu\u00e7\u00e3o de conte\u00fado, campanhas de marketing e programas. Antes disso, liderou equipes de engenharia na Sun e \u00e9 membro fundador da equipe Java EE.\r\n\r\nGupta \u00e9 autor de mais de 2.000 postagens em blogs sobre tecnologia. Ele tem uma vasta experi\u00eancia em palestras em mais de 40 pa\u00edses sobre diversos t\u00f3picos e \u00e9 um JavaOne Rock Star h\u00e1 tr\u00eas anos consecutivos. Gupta tamb\u00e9m fundou o cap\u00edtulo Devoxx4Kids nos EUA e continua a promover a educa\u00e7\u00e3o tecnol\u00f3gica entre as crian\u00e7as. Autor de v\u00e1rios livros sobre tecnologia, corredor \u00e1vido, viajante do mundo inteiro, campe\u00e3o de Java, l\u00edder de JUG, membro do NetBeans Dream Team e capit\u00e3o do Docker, ele pode ser facilmente acessado em @arungupta."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/2340","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/users\/58"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=2340"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/2340\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=2340"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=2340"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=2340"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=2340"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}