Orquestração de contêiner do Docker (composição)

O que é orquestração de contêineres?

  • Devido ao grande número de contêineres de aplicativos, está se tornando cada vez mais difícil implantar e gerenciar uma variedade de serviços e consumir muitos recursos. O Docker Compose pode apenas resolver o modo de mecanismo único de nó único do Docker (modo de mecanismo único) para problemas de implantação e gerenciamento de aplicativos de vários contêineres, esse processo é chamado de orquestração de contêineres;
  • O Docker Compose não organiza os componentes do aplicativo por meio de scripts e vários comandos docker longos, mas descreve o aplicativo inteiro por meio de um [arquivo de configuração declarativo], de modo a completar a implantação com um comando.
  • A orquestração de contêineres tem as seguintes quatro características (operações em lote):
  1. O contêiner inicia ao mesmo tempo;
  2. O contêiner é fechado ao mesmo tempo;
  3. A imagem e o contêiner são excluídos ao mesmo tempo;
  4. O espelho e o contêiner são construídos ao mesmo tempo;

[Ferramenta de orquestração de contêiner (atualmente mainstream)]

  1. docker-compose ;
  2. docker-swarm ;
  3. Kubernetes / k8s ;

[Introdução ao docker-compose]

  • O predecessor do Compose era o Fig. Depois que o Fig foi adquirido pelo Docker, foi oficialmente renomeado como Compose. O Compose é compatível com versões anteriores do Fig (o Fig é uma ferramenta Python poderosa baseada no Docker desenvolvida pela Orchard, que permite aos usuários definir aplicativos com base em vários em um arquivo YAML. Para que você possa usar a ferramenta de linha de comando fig para implantar o aplicativo e, ao mesmo tempo, gerenciar todo o ciclo de vida do aplicativo);
  • O Compose é uma ferramenta para implantar (definir e executar) aplicativos Docker de vários contêineres. Ele só precisa de um arquivo de configuração do Compose e de um comando simples para criar e executar todos os contêineres exigidos pelo aplicativo;
  • No arquivo de configuração, todos os contêineres são definidos por [serviços] e o [comando docker-compose] é usado para iniciar ou parar o contêiner e todos os contêineres dependentes;
  • Ao usá-lo, primeiro escreva um arquivo YAML que defina um aplicativo de vários contêineres (multisserviço) e, em seguida, entregue-o ao comando docker-compose para processamento. O Docker Compose concluirá a implantação e o gerenciamento do aplicativo com base no API do mecanismo Docker;

[Processo de contêiner de imagem de operação do Docker]

[Fluxo de trabalho de orquestração de contêiner Docker-compose]

[Instale docker-compose no ambiente Linux]

  1. Verifique se o Docker foi instalado no sistema Linux =》 versão do docker do sudo
  2. curl 下载 compose (版本 1.11.2) 地址 =》 sudo curl -L "https://github.com/docker/compose/releases/download/1.11.2/docker-compose-$(uname -s) - $ ( uname -m) "-o / usr / local / bin / docker-compose 
  3. Adicionar permissão de composição executável =》 chmod + x / usr / local / bin / docker-compose
  4. Ver o resultado da instalação da composição =》 docker-compose --version, desinstalar usando =》 sudo rm / usr / local / bin / docker-compose
  5. Criar atalho de composição =》 sudo ln -s / usr / local / bin / docker-compose / usr / bin / docker-compose

【Docker-compose 命令】 =》 docker-compose --help

  • build = "Construir ou reconstruir o serviço de contêiner
  • bundle =》 Gerar um pacote Docker a partir do arquivo de composição
  • config = "Verificar e visualizar o arquivo de composição
  • create = "Criar um serviço de contêiner
  • down = "Pare e exclua contêineres, redes, imagens e volumes
  • events = "Receber eventos em tempo real do contêiner
  • exec = "Executar comandos no contêiner em execução
  • help = "Comando de ajuda
  • images = "Lista de Espelhos
  • kill = "Mate o contêiner
  • logs = "Ver os logs do contêiner
  • pause = "Pausar o serviço de contêiner
  • porta = "número da porta de saída
  • ps = "Lista de contêineres
  • pull = "Baixe a imagem do serviço de contêiner
  • push = "Faça upload da imagem do serviço de contêiner
  • restart =》 O serviço de contêiner é reiniciado
  • rm = "Excluir contêineres parados
  • run = "Executar um comando único
  • scale = "Defina o número de contêineres para o serviço
  • start = "Iniciar serviço de contêiner
  • stop = "Parar o serviço de contêiner
  • top = "Exibir o processo em execução
  • unpause = "Pause o serviço de contêiner
  • up = "Criar e iniciar o contêiner
  • version = "Exibir informações da versão do Docker-Compose

【Docker-compose.yml 文件】

  • Semelhante aos arquivos josn, YAML é uma abreviação recursiva de "YAML Ain't a Markup Language" (YAML não é uma linguagem de marcação). É um formato altamente legível usado para expressar a serialização de dados.
  • Referência de formato de sintaxe YAML: https://www.runoob.com/w3cnote/yaml-intro.html
  • Configuração do arquivo docker-compose.yml:

  1. Endereço de referência: https://docs.docker.com/compose/compose-file/
  2. Configuração do núcleo:
version 指定compose版本 最好是3.0以上版本 目前最新是3.7版本
services 配置容器[容器列表]
	nginx: #配置容器标识(唯一编号)
	   image: #配置容器镜像
	   ports: #配置容器映射端口号[数组]
	   networks: #配置容器网络[数组]
networks 网络指定配置
	nginx-rmcore: #配置网络名称
		external: true #网络自定义
volumes 数据挂载配置
extensions 扩展配置
  • Cenários de uso de orquestração de contêiner;
  1. Gerenciamento de lote de imagens e aplicativos em contêineres em contêineres docker;

Como aplicar a orquestração e o destino do contêiner para operar a imagem criada pelo nginx e pelo .net core ao mesmo tempo?

  1. Prepare a imagem nginx;
  2. Prepare a imagem construída pelo projeto principal .net;
  3. ferramenta docker-compose;
  4. arquivo de configuração docker-compose.yml;

[Operação real do Linux]:

  • Digite o diretório do contêiner criado =》 cd nginx
  • Ver a lista de diretórios atual =》 ls
  • Criar pasta de composição =》 mkdir compose
  • Verifique a lista de diretórios atual novamente =》 ls Haverá uma pasta de composição neste momento
  • Digite a pasta de composição =》 cd compose
  • Crie o arquivo docker-compose.yml (com nome estrito) =》 touch docker-compose.yml
  • Edite o arquivo docker-compose.yml (especificação de sintaxe estrita) =》 vi docker-compose.yml Edite as informações de configuração da seguinte maneira:
version: '3' #标识 componse 版本信息
services:
 netcore: #镜像标识(唯一)
  image: netcore #当前环境镜像名称,不用指明路径,会自动从本地寻找镜像
  ports: #暴露端口,端口映射
   - 8080:80  #把容器端口80映射到外部主机访问端口8080
   - 8081:443 #把容器镜像文件所在目录端口443映射到外部访问端口8081
 nginx:
  image: nginx
  ports:
   - 8090:80


#注:上面符号 - 表示数组,注意空格缩进表示层级,该文件配置严格遵循YAML语法配置
  • A configuração do arquivo docker-compose.yml acima está completa, salve e inicie =》 wq
  • Verifique o diretório do arquivo atual novamente =》 ls verifique se há um arquivo docker-compose.yml nele
  • Execute o contêiner em lotes por meio das informações de configuração do arquivo docker-compose.yml =》 docker-compose up Neste momento, duas mensagens serão geradas
  1. Criando compose_netcore_1 ... concluído
  2. Criando compose_nginx_1 ... concluído
  • Visualize as informações do contêiner criadas em lotes =》 docker ps -a / docker container ls -a 

O processo de configuração acima realiza a orquestração do contêiner, e os contêineres criados em lote podem ser acessados ​​por meio do IP do host atual e da porta correspondente [netcore e nginx];

  • compose batch stop containers (e excluir containers, redes, imagens e volumes) = "docker-compose down
  • Para verificar se deseja excluir as informações, verifique a lista de todos os contêineres =》 docker ps -a / docker contêiner ls -a 

Nota: Defeito de orquestração do contêiner =》 docker-compose oferece suporte apenas à implantação de aplicativos de contêiner e gerenciamento de orquestração no host docker de nó único;

Como usar o contêiner nginx criado para reverter o proxy netcore?

  • Digite o contêiner nginx (conectado via Bash Shell) = "docker exec -it [container-name / id] / bin / bash
  • Digite o diretório atual =》 cd /
  • Exibir diretório de pastas da lista =》 ls
  • Digite o diretório de instalação do contêiner nginx (geralmente no diretório / usr / local) = "cd / usr / local
  • Ver o diretório da pasta da lista novamente =》 ls
  • Digite o diretório do contêiner nginx =》 cd nginx / Verifique a lista de diretórios do arquivo atual =》 ls verá o diretório do arquivo conf
  • Insira o diretório conf =》 cd conf view list =》 ls existe nginx.conf
  • Editar o arquivo nginx.conf =》 vi nginx.conf / vim nginx.conf
  1. Anote a configuração padrão em [servidor] / [local], escreva [netcore] contêiner ip: porta (porta exposta) = "http_proxy http://192.168.48.3:8081; 
  2. Salve e execute nginx.conf = "wq
  • Sair do contêiner ngixn =》 sair
  • Ver a lista de diretórios atual =》 ls
  • 重启 componse =》 reinício docker-componse

[Como realizar a comunicação de rede entre contêineres?

Neste momento, o navegador pode ver o contêiner nginx como inválido (ele não executará o contêiner netcore como um proxy reverso). Como os contêineres no docker estão isolados uns dos outros, eles não podem se comunicar diretamente. desta vez, você precisa encontrar um intermediário (docker container Network management tool =》 network), linux shell terminal input =》 docker --help Haverá um dos comandos de gerenciamento exibidos =》 [network Manage networks]

  • Ver docker container [comando de gerenciamento de rede] information = "docker network --help

  • Solução: Use um modo de ponte personalizado (DRIVER / ponte) para acessar a rede para realizar a comunicação entre contêineres
  1. Crie uma rede (ponte padrão, escopo local), o identificador / nome da ponte é (netcore-nginx) = "rede docker criar netcore-nginx
  2. Ver a lista de diretórios de rede do docker node atual = "docker network ls exibir informações [NETWORK ID / network id, NAME / network name, DRIVER / network drive mode, SCOPE / network range]
  3. Encontre o arquivo docker-compose.yml e mude para o diretório onde o arquivo está localizado =》 ls
  4. Edite o arquivo docker-compose.yml e conecte o contêiner [netcore, nginx] ao modo de ponte de rede. As informações de configuração são as seguintes:
version: '3' #标识 compones 版本信息
services:
 netcore: #镜像标识(唯一)
  image: netcore #当前环境镜像名称,不用指明路径,会自动从本地寻找镜像
  ports: #暴露端口,端口映射
   - 8080:80  #把容器端口80映射到外部主机访问端口8080
   - 8081:443 #把容器镜像文件所在目录端口443映射到外部访问端口8081
  networks:
   - netcore-nginx
 nginx:
  image: nginx
  ports:
   - 8090:80
  networks: #单个容器内局部网络配置
   - netcore-nginx
networks: #docker 网络配置声明,此处是全局网络配置
 netcore-nginx: #自定义网络名称
  external: true #启动外部访问

# 1.上面符号 - 表示数组,注意空格缩进表示层级,该文件配置严格遵循YAML语法配置
# 2.上面配置信息,services 配置了两个容器,分别是 netcore 和 nginx ,并且同时使用自定义的网络桥接模式 netcore-nginx 实现容器相互通信;
# 3.和 serices 同级的 networks 配置信息,告诉 docker 启动自定义桥接模式网络 netcore-nginx ;
  • Saia do arquivo docker-componse.yml e salve =》 wq
  • Reinicie o componente para que as informações de configuração tenham efeito =》 docker-componse restart

Verifique o navegador novamente para ver se o contêiner nginx implementa o contêiner netcore do proxy reverso. Se as informações do site padrão do nginx aparecerem, preste atenção às informações de configuração do nginx.conf, porque depois que a configuração da ferramenta de resposta for reiniciada, as informações não serão salvas , e o contêiner original será restaurado. Modifique nginx.conf / server / location [proxy_pass http: // [netcore container ip: port];] informações, inicie e salve wq e reinicie dentro do contêiner nginx:

  1. Alterar diretório =》 cd ..
  2. Ver a lista de diretórios atual =》 ls
  3. Digite o diretório sbin =》 cd sbin
  4. Verifique a lista de diretórios atual novamente =》 ls Agora você verá o nginx 
  5. Reiniciar nginx =》 ./ nginx reiniciar ou recarregar =》 ./ nginx -s reload

Neste momento, verifique o navegador novamente para garantir que as informações de configuração acima estão corretas e o acesso normal geralmente é possível = "Realize nginx reverse proxy netcore;

 

[Como verificar o endereço IP da rede netcore do contêiner?

  • Ver informações hierárquicas do contêiner netcore (detalhes de configuração da instalação) = "docker container inspect [container-name / id] 
  1. = "Verifique [NetworkSettings] / [Networks] / [IPAddress], o IP exibido na configuração do arquivo é o ip do netcore 
  2. = "Ver o número da porta exposta ao exterior [NetworkSettings] / [Ports] / [HostPort]
  • Ver todas as informações do docker container =》 dockre container ls -a 
  1. =》 Encontre o contêiner netcore correspondente para visualizar a porta exposta;

 

Observação: no processo de configuração acima, depois que o contêiner for reiniciado, os dados do contêiner não serão persistidos (os dados do contêiner são mantidos na memória) e o IP do contêiner também será alterado.

[Container Data Mount Volums]: Percebe a persistência de dados do container;

Como a ferramenta [compose] só pode configurar e implantar aplicativos de contêiner em um único docker node, e não pode implementar o docker cross-node management, a equipe docker oficial implementou a ferramenta [docker-swarm] para implementar o gerenciamento de cluster docker. continuará a explicar;

Acho que você gosta

Origin blog.csdn.net/ChaITSimpleLove/article/details/105280668
Recomendado
Clasificación