Compartilhamento de tecnologia

【Docker-compose】Construa um ambiente php

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Orquestração de contêineres Docker-compose

1. O que é

Compose é um software ferramenta lançado pela Docker Company, que pode gerenciar vários contêineres Docker para formar um aplicativo. Você precisa definir um arquivo de configuração docker-compose.yml no formato YAML e escrever os relacionamentos de chamada entre vários contêineres.Então, com apenas um comando, você pode iniciar/parar esses contêineres ao mesmo tempo

  • · Docker-Compose é o projeto oficial de código aberto do Docker, responsável por realizar a rápida orquestração de clusters de contêineres Docker.

2. O que você pode fazer?

O Docker recomenda executar apenas um serviço em cada contêiner. Como o contêiner do Docker em si ocupa muito poucos recursos, é melhor separar cada serviço separadamente.

Se eu precisar implantar vários serviços ao mesmo tempo, terei que escrever um Dockerfile separado para cada serviço e, em seguida, construir a imagem e o contêiner. Isso é exaustivo, então o docker nos fornece oficialmente a ferramenta de implantação de vários serviços docker-compose? .

Por exemplo, para implementar um projeto de microsserviço da Web, além do próprio contêiner de serviço da Web, muitas vezes é necessário adicionar o contêiner de serviço mysql do banco de dados de back-end, o servidor redis, o centro de registro eureka e até mesmo contêineres de balanceamento de carga, etc. . . . . .

O Compose permite que os usuários definam um conjunto de contêineres de aplicativos associados como um projeto por meio de um arquivo de modelo docker-compose.yml separado (formato YAML).

Você pode definir facilmente um aplicativo de vários contêineres com um arquivo de configuração e, em seguida, usar um único comando para instalar todas as dependências do aplicativo e concluir a construção. Docker-Compose resolve o problema de como gerenciar e orquestrar contêineres.

3. Para onde ir

  • Site oficial · https://docs.docker.com/compose/compose-file/compose-file-v3/
  • https://docs.docker.com/compose/install/

Endereço de download acelerado

sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
  • 1

Adicione permissões executáveis

chmod +x /usr/local/bin/docker-compose
  • 1

Verifique se a instalação foi bem-sucedida

docker-compose --version
  • 1
  • Desinstalar

    sudo rm / usr/ local/ bin/docker-compose
    
    • 1

4. Componha os conceitos centrais

  • Três etapas para usar o Compose

    Escreva um Dockerfile para definir cada aplicativo de microsserviço e crie o arquivo de imagem correspondente

    Use docker-compose.yml para definir uma unidade de negócios completa e organizar vários serviços de contêiner no aplicativo geral.

    Por fim, execute o comando docker-compose up para iniciar e executar todo o aplicativo para concluir a implantação com um clique e ficar online.

  • Componha comandos comuns

    docker-compose -h # Ver ajuda

    docker-compose up # Inicia todos os serviços do docker-compose

    docker-compose up -d # Inicia todos os serviços docker-compose e executa-os em segundo plano

    docker-compose down # Interrompa e exclua contêineres, redes, volumes e imagens.

    O ID do serviço em docker-compose exec yml # Insira dentro da instância do contêiner

    docker-compose exec arquivo docker-compose.yml escrito ID de serviço /bin/bash

    docker-compose ps # Exibe todos os contêineres em execução atualmente orquestrados pelo docker-compose

    docker-compose top # Exibe os processos atuais do contêiner orquestrados pelo docker-compose

    ID de serviço nos logs docker-compose yml # Visualiza o log de saída do contêiner

    docker-compose config # Verifica a configuração

    docker-compose config -q # Verifique a configuração e a saída somente se houver problemas

    docker-compose restart #Reinicia o serviço

    docker-compose start # Inicia o serviço

    docker-compose stop # Para o serviço

instalação do comando docker-machine

 base=https://get.daocloud.io/docker/machine/releases/download/v0.14.0 &&
  curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine &&
  sudo install /tmp/docker-machine /usr/local/bin/docker-machine
  • 1
  • 2
  • 3

5. Combate prático: configurar servidor DNS em Linux e construir ambiente lemp (Nginx + MySQL (MariaDB) + PHP)

Exigir

1) Na máquina virtual Linux, configure o endereço IP para 192.168.90.215 (x são os últimos 3 dígitos da sua carteira de estudante, y é especificado por você), e a máquina virtual pode acessar a Internet normalmente;

2) Configure o servidor DNS, o domínio é cr.com (abc são as iniciais do seu nome), após a configuração ser concluída, use nslookup para verificar a resolução direta e reversa;

3) Configure o LEMP (ou seja, Nginx + MySQL (MariaDB) + PHP) e acesse o LEMP construído acessando www.cr.com (abc são suas iniciais) através do host real. (Você não pode modificar o arquivo hosts para resolução local, mas deve usar seu próprio DNS configurado)

6. Configure a resolução DNS

Primeiro configure um IP estático para Linux http://alleniverrui.top/archives/linux-pei-zhi-jing-tai-ip (se não puder ser aberto, altere o endereço abaixo)

//pendência

Edite o arquivo /etc/named.conf

vim /etc/named.conf
  • 1

Altere os valores de escuta e consulta para qualquer

Configure o DNS para resolver cr.com para 192.168.90.215

vim /etc/named.rfc1912.zones 
  • 1

Adicione no final do arquivo

zone "cr.com" IN {
   type master;
   file "cr.com.zone";
  allow-update { none; };
};
zone "215.90.168.192.in-addr.arpa" IN {
        type master;
        file "com.cr.loop";
        allow-update { none; };
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

:wq para salvar

Edite o arquivo de configuração correspondente vim /var/named/com.cr.loop

Adicione o seguinte

$TTL 1D
@       IN SOA  cr.com. rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      @
        A       127.0.0.1
        AAAA    ::1
        PTR     cr.com.
        NS      ns.cr.com.
ns      A       192.168.90.215
201     PTR     www.cr.com.
201     PTR     email.cr.com.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

Edite vim /var/named/cr.com.zone

Adicione o seguinte

$TTL 1D
@       IN SOA  cr.com. rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      @
        A       192.168.90.215
        AAAA    ::1
        NS      ns.server.com.
ns      IN A    192.168.90.215
www     IN A    192.168.90.215
email   IN A    192.168.90.215
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

Reinicie o DNS

systemctl restart named
  • 1

Ver status do DNS

systemctl status named
  • 1

Iniciado com sucesso

Análise direta nslookup cr.com

Análise reversa nslookup 192.168.90.215

Configurar o lemp

Grave o arquivo docker-compose.yml em /mydocker/lemp

vim /mydocker/lemp/docker-compose.yml preencha o seguinte conteúdo

nginx:
    build: ./nginx/
    ports:
        - 80:80
    links:
        - php
    volumes_from:
        - app

php:
    build: ./php/
    expose:
        - 9000
    links:
        - mysql
    volumes_from:
        - app

app:
    image: php:7.0-fpm
    volumes:
        - .:/var/www/html
    command: "true"

mysql:
    image: mysql:latest
    volumes_from:
        - data
    environment:
        MYSQL_ROOT_PASSWORD: secret
        MYSQL_DATABASE: bookmarks
        MYSQL_USER: cr
        MYSQL_PASSWORD: cr123

data:
    image: mysql:latest
    volumes:
        - /var/lib/mysql
    command: "true"

phpmyadmin:
    image: phpmyadmin/phpmyadmin
    ports:
        - 8080:80
    links:
        - mysql
    environment:
        PMA_HOST: mysql
  • 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
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48

Crie nginx/Dockerfile em /mydocker/lemp/

Preencha

FROM nginx:latest

COPY ./default.conf /etc/nginx/conf.d/default.conf
  • 1
  • 2
  • 3

Crie default.conf

Preencha o seguinte conteúdo

 

server {

  listen 80 default_server;

  root /var/www/html;

  index index.html index.php;

 

  charset utf-8;

 

  location / {

try_files $uri $uri/ /index.php?$query_string;

  }

 

  location = /favicon.ico { access_log off; log_not_found off; }

  location = /robots.txt  { access_log off; log_not_found off; }

 

  access_log off;

  error_log  /var/log/nginx/error.log error;

 

  sendfile off;

 

  client_max_body_size 100m;

 

  location ~ .php$ {

  fastcgi_split_path_info ^(.+.php)(/.+)$;

  fastcgi_pass php:9000;

 fastcgi_index index.php;

 include fastcgi_params;

 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

fastcgi_intercept_errors off;

fastcgi_buffer_size 16k;

 fastcgi_buffers 4 16k;

  }

 

  location ~ /.ht {

 deny all;

  }

}

 
  • 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
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75

Crie php/Dockerfile em /mydocker/lemp/

Preencha

FROM php:7.0-fpm

RUN docker-php-ext-install mysqli

 
  • 1
  • 2
  • 3
  • 4
  • 5

Orquestrar contêineres docker

 docker-compose up -d 
  • 1

Docker ps para visualizar o status de execução do contêiner

Iniciado com sucesso

Esta máquina acessa o ambiente php e o ambiente nginx através de IP

Acesso bem sucedido

Configure o servidor DNS local como uma máquina virtual, que é 192.168.90.215

Abra a janela do cmd e execute um teste de ping em cr.com

Pingado com sucesso

Acesse o ambiente php construído através do nome de domínio

Modifique o arquivo de configuração nginx

O nome de domínio final acessa diretamente o site