Se você estiver tentando dimensionar implantações de aplicativos do Docker , precisará garantir o agrupamento de um conjunto de nós coletivamente em um Docker Swarm . Já mencionei como implantar um Docker Swarm (com armazenamento persistente) em “ Criar um Docker Swarm com armazenamento persistente utilizando GlusterFS ”. Você não precisa necessariamente implantar o Swarm com armazenamento persistente, mas para poder reter seu conhecimento (se algo acontecer, caso contrário, você precisará migrar a implantação), você precisará implantar o Swarm com persistência.
Ao fazer seu Docker Swarm funcionar, confirme se todos os nós estão relacionados e preparados executando o comando (no controlador):
docker node ls
Dentro da saída, você deve ver uma coisa como esta:
tpsl7enzswhkeef3dh8uswkxp * docker1 Prepared Energetic Chief 20.10.17
xnye548afhe1hc832kulh5sui docker2 Prepared Energetic 20.10.17
cammaze2fcfcomjpdo0fwz105 docker3 Prepared Energetic 20.10.17
Se todos os nós estiverem listados como Preparados e Energéticos, você pode implantar na pilha. Caso contrário, você deve solucionar o motivo até que cada nó seja listado como tal.
Implantar um registro nativo
Com o Swarm instalado e funcionando, sua próxima atividade é implantar um registro local do Docker. Felizmente, existe uma imagem de contêiner que foi criada especialmente para essa função. No nó do controlador Docker Swarm, implante o registro com o comando:
docker service create --name registry --publish printed=5000,goal=5000 registry:2
No caso de você ter problemas com o comando docker service ls, você deve ver o registro listado como tal:
zhquhrodsirp registry replicated 1/1 registry:2 *:5000->5000/tcp
Observe que o ID do seu serviço não será idêntico ao que você vê acima (a sequência aleatória de caracteres na primeira coluna). Como você o vê listado, você está pronto para ir. Você também pode confirmar se o registro foi implantado com eficiência emitindo o comando:
curl http://localhost:5000/v2/
Se a única saída que você vê for {} , todas as partes estão funcionando conforme previsto.
Crie um software padrão
Adivinha o que vamos criar? Se você adivinhou “Hiya World”, você pode estar certo. Crie uma nova listagem para lidar com o desafio:
mkdir ~/swarmtest
Desenvolva essa nova listagem com:
cd ~/swarmtest
Primeiro, vamos criar um arquivo Python, chamado app.py com o comando:
nano app.py
Nesse arquivo, cole o seguinte:
<br />
@app.route(“https://information.google.com/”)
<br />
def whats up():
<br />
depend = redis.incr(‘hits’)
<br />
return ‘Hiya New Stack! I’ve been seen {} instances.n’.format(depend)
<br />
<br />
if __name__ == “__main__”:
<br />
app.run(host=”0.0.0.0″, port=8000, debug=True)
|
from flask import Flask from redis import Redis app = Flask(__name__) redis = Redis(host=‘redis’, port=6379) @app.route(“https://information.google.com/”) def whats up(): depend = redis.incr(‘hits’) return ‘Hiya New Stack! I’ve been seen {} instances.n’.format(depend) if __name__ == “__main__”: app.run(host=“0.0.0.0”, port=8000, debug=True) |
Salve e feche o arquivo.
A seguir, vamos criar um arquivo de necessidades com:
nano necessities.txt
Nesse arquivo, adicione o seguinte:
Salve e feche o arquivo.
Agora, vamos criar nosso Dockerfile com o comando:
nano Dockerfile
Nesse arquivo, cole o seguinte conteúdo:
|
# syntax=docker/dockerfile:1 FROM python:3.4–alpine ADD . /code WORKDIR /code RUN pip set up –r necessities.txt CMD [“python”, “app.py”] |
Por fim, crie um arquivo docker-compose.yml com:
nano docker-compose.yml
Nesse arquivo, cole o seguinte:
<br />
companies:
<br />
internet:
<br />
picture: 127.0.0.1:5000/swarmtest
<br />
construct: .
<br />
ports:
<br />
– “8000:8000”
<br />
redis:
<br />
picture: redis:alpine
|
model: “3.9” companies: internet: picture: 127.0.0.1:5000/swarmtest construct: . ports: – “8000:8000” redis: picture: redis:alpine |
Salve e feche o arquivo.
Implantar o aplicativo
Com todos os itens no lugar, vamos agora implantar a pilha em nosso Docker Swarm. No entanto, antes de tentarmos isso, vamos dar uma olhada para garantir que realmente funcione com:
docker-compose up -d
Caso receba o erro de que o comando docker-compose não foi descoberto, configure-o (em uma distribuição baseada no Ubuntu) com:
sudo apt-get set up docker-compose -y
Assim que a implantação estiver completa, dê uma olhada no aplicativo com:
curl http://localhost:8000
É melhor ver algo assim:
|
Hiya NewStack! I have been seen 1 time. |
Execute-o mais uma vez e a saída provavelmente será:
|
Hiya NewStack! I have been seen 1 time. |
Desative o aplicativo com o comando:
docker-compose down --volumes
Implantar o aplicativo no Docker Swarm
Para nosso truque subsequente, implantaremos o aplicativo em nosso Docker Swarm. Antes de fazermos isso, devemos primeiro enviar a imagem recém-gerada para nosso registro nativo com:
docker-compose push
Nesse nível, nossa imagem de conteúdo textual está disponível para nosso registro nativo e pode ser usada para implantar no Swarm. Vamos implantar a pilha com:
docker stack deploy --compose-file docker-compose.yml swarmtest
Confirme se a pilha está funcionando com:
docker stack companies swarmtest
A saída do comando acima deve aparecer assim:
|
ocfddicaivol swarmtest_redis replicated 1/1 redis:alpine hbfv50ayxwrs swarmtest_web replicated 1/1 127.0.0.1:5000/swarmtest:newest *:8000–>8000/tcp |
Vamos garantir que esteja funcionando em todos os nós. Digamos que seus nós estejam nos endereços IP 192.168.1.60, 192.168.1.61 e 192.168.1.63. Preocupe-se com as instruções:
curl http://192.168.1.60:8000
curl http://192.168.1.61:8000
curl http://192.168.1.63:8000
É melhor produzir assim:
|
Hiya New Stack! I have been seen 1 instances. Hiya New Stack! I have been seen 2 instances. Hiya New Stack! I have been seen 3 instances. |
Parabéns! Você simplesmente implantou um utilitário de pilha completa em um Docker Swarm. Você possivelmente pode derrubar essa pilha com o comando:
docker stack rm swarmtest
Concluído e executado.
