Orquestração de contêineres do Docker Compose

一 、 Docker Compose

(1) Visão geral do Docker Compose

  • O predecessor do Docker Compose é a Fig. É uma ferramenta para definir e executar vários contêineres do Docker.
  • Com o Compose, não há necessidade de usar scripts de shell para iniciar o contêiner, mas usar arquivos YAML para configurar todos os serviços exigidos pelo aplicativo
  • Em seguida, use um comando para criar e iniciar todos os serviços com base na configuração do arquivo YAML
  • O Docker Compose é muito adequado para cenários onde vários contêineres são combinados para desenvolvimento

(2) 、 YAML

1. YAML é um formato de serialização de dados muito intuitivo com uma linguagem de marcação

2. Formato do arquivo e precauções para escrita

  • O recuo da tecla Tab não é compatível e o recuo do espaço é necessário
  • Normalmente recuado 2 espaços no início
  • Recuar 1 espaço após o caractere, como dois-pontos, vírgula, barra
  • Comentário com sinal #
  • Use aspas simples se contiver caracteres especiais
  • Os valores booleanos devem ser colocados entre aspas

(3) Campos comumente usados ​​para configuração do Docker Compose

Campo Descrição
construir contexto de dockerfile Especifique o nome do arquivo Dockerfile para construir o caminho do contexto de espelho
imagem Espelho especificado
comando Execute o comando, substitua o comando padrão
nome do recipiente Especifique o nome do contêiner, porque o nome do contêiner é único, se você especificar um nome personalizado, você não pode escalar
implantar Especifique a implementação e a configuração relacionada ao serviço de operação, que só pode ser usada no modo Swarm
ambiente Adicionar variáveis ​​de ambiente
redes Junte-se à rede
portos Exponha a porta do contêiner, o mesmo que -p, mas a porta não pode ser inferior a 60
volumes Monte o caminho do host ou volume de comando
reiniciar Política de reinicialização, padrão não, sempre, sem falha, a menos que seja interrompido
nome de anfitrião Nome do host do contêiner

(4) Comandos comuns do Docker Compose

Campo Descrição
construir Reconstrua o serviço
ps Contêineres de lista
acima Crie e inicie o contêiner
exec Execute comandos no contêiner
escala Especifique o número de contêineres de serviço para iniciar
principal Mostrar processo de contêiner
Histórico Ver a saída do contêiner
baixa Exclua contêineres, redes, volumes de dados e espelhos
parar / iniciar / reiniciar Parar / iniciar / reiniciar serviço

(5), descrição do comando Compor

Formato de comando básico

docker-compose [options] [COMMAND] [ARGS...]

opção docker-compose

--verbose:输出更多调试信息
--version:打印版本并退出
-f,--file FILE:使用特定的compose模板文件,默认为docker-compose.yml
-p, --project-name NAME:指定项目名称,默认使用目录名称

Em segundo lugar, use docker-compose para construir um ambiente cônsul

arredores:

apelido do servidor serviço
Servidor 1: 192.168.182.11 Docker-ce 、 Compose 、 Consul 、 Consul-templo
Servidor 2: 192.168.182.22 Docker-ce 、 Registrator

exigem:

  • Perceba a intercomunicação entre contêineres e contêineres em uma rede de máquina única
  • Use o Docker Compose para criar um contêiner
  • Construir serviço Consul para realizar descoberta automática e atualização

Instale o pacote cônsul

[root@localhost ~]# systemctl start firewalld
[root@localhost ~]# setenforce 0
关闭防火墙,系统自带保护机制
mkdir /root/consul
cd /root/consul/
unzip consul_0.9.2_linux_amd64.zip
mv consul /usr/bin/     ##移动到/usr/bin目录相当于可以直接被系统使用

consul agent \   ##构建agent功能
> -server \      ##server模式  
> -bootstrap \
> -ui \
> -data-dir=/var/lib/consul-data \
> -bind=192.168.182.11 \
> -client=0.0.0.0 \        ##监听客户端所有地址
> -node=consul-server01 &> /var/log/consul.log &

Insira a descrição da imagem aqui
Ver informações do cluster

consul members
consul info | grep leader

Insira a descrição da imagem aqui
Obtenha informações de cluster por meio de httpd api

curl 127.0.0.1:8500/v1/status/peers /查看集群server成员
curl 127.0.0.1:8500/v1/status/leader /集群 Raf leader
curl 127.00.1:8500/v1/catalog/services //注册的所有服务
curl 127.0.0.1:8500/v1/catalog/nginx /查看 nginx 服务信息
curl 127.0.0.1:8500/v1/catalog/nodes //集群节点详细信息

-------------------------------------------- O serviço de contêiner automaticamente se junta ao cluster nginx --------------------------------------------

1. Instale Gliderlabs / Registrator (você pode verificar o status de execução do contêiner e se registrar automaticamente, e também pode cancelar o serviço do contêiner docker para o centro de configuração de serviço).
Atualmente, Consul, Etcd e SkyDNS2 são suportados

Inicie outro servidor para a operação 192.168.182.22

docker run -d \
--name=registrator \
--net=host \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart=always \
gliderlabs/registrator:latest \
-ip=192.168.182.22 \
consul://192.168.182.11:8500

2. Teste se a função de serviço é normal

docker run -itd -p 83:80 --name test-1 -h test1 nginx
docker run -itd -p 84:80 --name test-2 -h test2 nginx
docker run -itd -p 88:80 --name test-3 -h test3 httpd
docker run -itd -p 89:80 --name test-4 -h test4 httpd

3. Verifique se os serviços http e nginx estão registrados no
navegador do consul , digite http://192.168.182.11:8500, clique em "NODES" e em "consul-server", haverá 5 serviços
Insira a descrição da imagem aqui
. Visualize os serviços no servidor cônsul

[root@consul consul]#curl 127.0.0.1:8500/v1/catalog/services
{
    
    "consul":[],"httpd":[],"nginx":[]}

Insira a descrição da imagem aqui
4. Instale o modelo cônsul

Consul-Template é um processo daemon usado para consultar informações de cluster do Consul em tempo real, atualizar qualquer número de modelos especificados no sistema de arquivos e gerar arquivos de configuração. Depois que a atualização for concluída, você pode optar por executar o comando shell para realizar a operação de atualização e recarregar o Nginx. O Consul-Template pode consultar o catálogo de serviços, chaves, valores-chave, etc. no Consul.
Esta poderosa função abstrata e modelo de linguagem de consulta podem tornar o Consul-Template particularmente adequado para a criação dinâmica de arquivos de configuração.
Por exemplo: criar balanceadores de proxy Apache / Nginx, back-ends de haproxy

5. Prepare o arquivo de modelo nginx do modelo

## Operar no cônsul

//在consul服务器上操作
vim /root/consul/nginx.ctmpl

upstream http_backend {
    
    
  {
    
    {
    
    range service "nginx"}}
   server {
    
    {
    
    .Address}}:{
    
    {
    
    .Port}};
  {
    
    {
    
    end}}
}

server {
    
    
  listen 83;
  server_name localhost 192.168.200.40;
  access_log /var/log/nginx/gcc.cn-access.log;
  index index.html index.php;
  location / {
    
    
    proxy_set_header HOST $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Client-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://http_backend;
}
}

O seguinte é o comentário

vim /root/consul/nginx.ctmpl

upstream http_backend {
    
    					#群集模块模板
    {
    
    {
    
    range service "nginx"}}				#指定nginx服务项
     server {
    
    {
    
    .Address}}:{
    
    {
    
    .Port}};			#指向真实服务器的地址和端口“{
    
    {
    
    .Address}}” 此参数会根据consul群集的参数自动设置上去
     {
    
    {
    
    end}}						#结束语句(以上为轮询请求方式)
}

server {
    
    
       listen 88;					#对外提供的端口,可自行设置,只要不起冲突
       server_name localhost 192.168.126.10;		#本地反向代理的节点地址
       access_log /var/log/nginx/kgc.cn-access.log;	#访问日志文件目录(需手动创建)
       index index.html index.php;			#指定访问的index 首页类型
       location / {
    
    
          proxy_set_header HOST $host;			#反向代理的请求头部信息
          proxy_set_header X-Real-IP $remote_addr;	#真实服务器IP
          proxy_set_header Client-IP $remote_addr; 	#客户IP
          proxy_set_header X-Fprwarded-For $proxy_add_x_forwarded_for;	#Forward转发地址
          proxy_pass http://http_backend;		#反向代理指向upstream地址池
                 }
       }

6, compilar e instalar o nginx

yum install -y gcc gcc-c++ pcre-devel zlib-devel 

Coloque o pacote compactado nginx no diretório / opt /

tar zxvf nginx-1.12.0.tar.gz -C /opt
cd /opt/nginx-1.12.0/
./configure --prefix=/usr/local/nginx
make && make install

7, configure o nginx

vim /usr/local/nginx/conf/nginx.conf

Adicionar no módulo http

http {
    
    
   include  mime.types;
   include  vhost/*.conf;   #添加虚拟主机目录
   default_type application/octet-stream;

Insira a descrição da imagem aqui
// Criar diretório de arquivo vhost de host virtual

mkdir /usr/local/nginx/conf/vhost

// Criar diretório de arquivo de log

mkdir /var/log/nginx

// Inicie o nginx

/usr/local/nginx/sbin/nginx

8. Configure e inicie o modelo

Faça upload do pacote consul-template_0.19.3_linux_amd64.zip para o diretório / root

unzip consul-template_0.19.3_linux_amd64.zip 
mv consul-template /usr/bin/

Habilitar modelo

consul-template -consul-addr 192.168.182.11:8500 -template "/root/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/test.conf:/usr/local/nginx/sbin/nginx -s reload" --log-level=info
参数详解
-consul-addr 192.168.226.132:8500:指向consul服务端节点

-template "/root/consul/nginx.ctmpl:指定模板路径

:/usr/local/nginx/conf/vhost/test.conf:指定文件生成到vhost中并命名为test.conf

:/usr/local/nginx/sbin/nginx -s reload:不中断服务reload重载nginx服务让配置文件生效

–log-level=info:产生日志,级别为info(日志生成位置在nginx.ctml中定义“access_log”)
//另外打开-个终端查看生成配置文件
[root@localhost vhost]#cat /usr/local/nginx/conf/vhost/test.conf
upstream http_backend {
    
    
  
   server 192.168.182.11:83;
  
   server 192.168.182.11:84;
  
}

server {
    
    
  listen 83;
  server_name localhost 192.168.182.11;
  access_log /var/log/nginx/gcc.cn-access.log;
  index index.html index.php;
  location / {
    
    
    proxy_set_header HOST $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Client-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://http_backend;
}
}

Adicione um nó de contêiner nginx, teste de descoberta de servidor e funções de atualização de configuração

//在registrator(192.168.182.11)服务端注册
docker run -itd -p 85:80 --name test-5 -h test5 nginx

Insira a descrição da imagem aqui

Configuração de vários nós do Consul

//添加一台已有docker环境的服务器192.168.182.33/24加入已有的群集中

consul agent \
-server \
-bootstrap \
-ui \
-data-dir=/var/ib/consul-data \
-bind=192.168.182.33 \
-client=0.0.0.0 \
-node=consul-server02 \
-enable-script-checks=true \
-datacenter=dc1 \
-join 192.168.182.11 &> /var/log/consul.log &


-enable-script-checks=true: 设置检查服务为可用
-datacenter: 数据中心名称
-join: 加入到已有的集群中

Acho que você gosta

Origin blog.csdn.net/panrenjun/article/details/115290274
Recomendado
Clasificación