Como criar uma pilha de lâmpadas à base de docker usando o Docker no Ubuntu 20.04
- 907
- 132
- Enrique Gutkowski PhD
A pilha da lâmpada
Lâmpada é a pilha de software na qual provavelmente a maioria dos sites é executada. Linux representa a base da pilha, e a implementação tradicional inclui o Apache como servidor da web, o banco de dados MySQL e o PHP como a linguagem de programação do lado do servidor. No entanto, existem muitas variações possíveis: o mariadb, por exemplo, é frequentemente usado no lugar do MySQL, do qual é um garfo e outras linguagens de programação, pois Python ou Perl podem ser usados em vez de PHP. Neste artigo, veremos como implementar uma pilha de lâmpadas básicas usando o Docker e o utilitário Docker-Compose.
Neste tutorial, você aprenderá:
- Como instalar o Docker e o Docker-Compose no Ubuntu 20.04
- Como definir serviços e volumes usando o Docker-Compõe
- Como mapear as portas host para as portas de contêiner no arquivo de configuração do docker-composição
- Como usar montagens de ligação e volumes nomeados
- Como construir um projeto com o Docker-Compose
Requisitos de software e convenções usadas
Categoria | Requisitos, convenções ou versão de software usada |
---|---|
Sistema | Ubuntu instalado 20.04 ou Ubuntu atualizado para 20.04 Fossa focal |
Programas | Docker, Docker-Compose |
Outro | Permissões radiculares para criar recipientes do Docker e iniciar o serviço do Docker |
Convenções | # - requer que os comandos Linux sejam executados com privilégios root diretamente como usuário root ou por uso de sudo comando$ - Requer que os comandos do Linux sejam executados como um usuário não privilegiado regular |
-
Instalando pacotes e iniciando o serviço do Docker
Para criar uma pilha de lâmpadas à base de docker no Ubuntu 20.04 Fossa focal, a primeira coisa que temos que fazer é instalar o software de que precisamos:
Docker
por si só, eDocker-Compose
, que é um utilitário que nos vamos organizar facilmente aplicativos de múltiplas contadores usandoYaml
Arquivos de configuração. Ambos os pacotes estão disponíveis nos repositórios oficiais do Ubuntu. Podemos instalá -los viaapt
:$ sudo apt install docker docker-compose
Depois que a instalação é executada, devemos iniciar o
Docker
serviço e habilitá -lo na inicialização. Podemos executar as duas operações com um único comando:$ Systemctl Ativar -Now Docker
-
Configuração do projeto
O primeiro passo em nossa jornada consiste na criação do diretório que usaremos como raiz do nosso projeto. Para o bem deste artigo, chamaremos de
LinuxConfig
. Dentro deste diretório, criaremos outro,Documentroot
, que hospedará os arquivos do nosso site. Podemos criar os dois diretórios ao mesmo tempo usando o-p
opção domkdir
comando:$ mkdir -p linuxconfig/documentroot
Dentro de
LinuxConfig
Diretório, definimos a configuração do Docker-Compose para o nosso projeto dentro de um arquivo YAML, que por padrão deve ser chamadoDocker-Compose.yml
. Existem três estrofes principais que podemos usar no arquivo de configuração: Serviços, volumes e redes.Cada seção é usada para configurar o aspecto correspondente de um projeto. Neste tutorial, usaremos apenas os dois primeiros. Implementaremos os componentes da pilha de lâmpadas como serviços dentro de seus próprios contêineres separados.
Os contêineres criados com o Docker-Compose serão membros da mesma rede e, portanto, poderão conversar um com o outro por padrão. Na rede, cada contêiner poderá fazer referência aos outros por um nome de host idêntico ao seu nome ou pelo nome usado para definir o serviço implementado pelo contêiner.
Por padrão, os contêineres serão nomeados usando o nome do diretório que contém o arquivo de configuração como prefixo. Nesse caso, por exemplo, o contêiner usado para um serviço chamado php-httpd, será nomeado LinuxConfig_php-httpd_1.
-
Definindo o serviço PHP + HTTPD
O primeiro serviço que definiremos no arquivo de configuração incluirá Php Como o módulo de servidor da web apache. Usaremos uma das imagens oficiais do PHP disponíveis em DockerHub como base para o nosso contêiner, especificamente aquele com o
-apache
Sufixo, que fornece a configuração que mencionamos acima. Vamos começar a escrever nossa configuração:
cópia deVersão: '3.7 'Serviços: Php-Httpd: Imagem: PHP: 7.Portas de 3 apache: - 80:80 Volumes: - "./Documentroot:/var/www/html "
A primeira coisa que especificamos no arquivo de configuração é
versão
. Com esta instrução, declaramos que versão específica do arquivo de composição usaremos. No momento da redação, versão3.7
é o mais recente e recomendado. - Depois de declarar a versão do arquivo de composição, começamos a escrever o serviço estrofe; dentro dele, definimos os serviços que comporão nossa pilha de lâmpadas. Nós chamamos o primeiro serviço
php-httpd
. O nome do serviço é completamente arbitrário, mas é sempre um bom hábito de usar um que seja significativo no contexto do projeto.O
imagem
A instrução é usada para especificar em qual imagem o contêiner deve se basear, neste casoPHP: 7.3-Apache
.O
portas
As instruções são usadas para expor as portas no contêiner e para criar um mapa entre portas host e portas de contêiner. Esse mapa é definido separando as portas com um:
. No lado esquerdo, especificamos a porta do host e, à direita, a porta dentro do contêiner deve ser mapeada. Nesse caso, mapeamos a porta80
no host a Port80
No contêiner, pois é a porta padrão usada pelo servidor da Web Apache.A última instrução que usamos é
volumes
: com ele, podemos especificar um mapeamento entre um Volume nomeado ou a caminho (relativa ou absoluta) no sistema hospedeiro para um caminho no recipiente, no qual será montado.Em nossa configuração, o
./Documentroot
diretório hospedará os arquivos do site: ele será montado no/var/www/html
Diretório dentro do contêiner, porque o último é a raiz do documento usada pelo Apache VirtualHost padrão. Essa configuração é chamada de montagem em ligação e é especialmente útil durante o desenvolvimento, porque as mudanças que fazemos nos arquivos do projeto são imediatamente refletidas dentro do contêiner. A desvantagem dessa configuração é que ela estabelece uma dependência entre o contêiner e a estrutura do arquivo da máquina host, diminuindo uma das principais vantagens do uso do Docker: Portabilidade.O diretório a ser montado dentro do recipiente será criado automaticamente se não existir quando o
Docker-compor
O comando é lançado: nesse caso, será de propriedade da raiz, se não for especificado de outra forma.Dentro de
Documentroot
Diretório agora podemos criar um arquivo de índice e tentar construir nosso projeto para verificar se a configuração está funcionando:$ echo "documentroot/index.php $ sudo docker -compose up -d
Depois de executar o comando, as imagens do Docker necessárias serão baixadas do DockerHub e os contêineres que serão criados com as configurações que fornecemos e executamos em segundo plano (eles não bloquearão o terminal), devido ao
-d
opção que fornecemos aoDocker-Compose
comando. Com o projeto em funcionamento, se navegarmos paraLocalHost
Com o nosso navegador, devemos ver a seguinte página:
A página PhpinfoPara parar o projeto, do diretório que hospeda o
Docker-Compose.yml
Arquivo, podemos executar:$ sudo docker-compose stop
Definindo o serviço MariaDB
Uma parte essencial da pilha de lâmpadas é a camada de banco de dados. Em nossa configuração, usaremos Mariadb e sua imagem oficial do Docker disponível no DockerHub:
cópia deVersão: '3.7 'Serviços: Php-Httpd: Imagem: PHP: 7.Portas de 3 apache: - 80:80 Volumes: - "./Documentroot:/var/www/html "mariadb: imagem: mariadb: 10.5.2 Volumes: - MARIADB -VOLUME:/var/lib/mysql Ambiente: TZ: "Europa/Roma" mysql_allow_empty_password: "não" mysql_root_password: "rootpwd" mysql_user: 'testUser' mySql_password: 'TestSpass:' Testpass. Mariadb-Volume:
Dentro de Serviços Stanza, definimos outro serviço e chamamos
Mariadb
e com oimagem
Instrução que especificamos que queremos usar o10.5.2
Versão da imagem oficial.Na definição anterior de serviço, usamos um suporte de ligação. Desta vez, em vez disso, usamos um Docker adequado Volume nomeado, para ser montado em
/var/lib/mysql
Dentro do contêiner (é o diretório de dados padrão usado pelo mariadb). Ao contrário de uma montagem de ligação, os volumes nomeados não criam dependências do contêiner na estrutura do sistema de arquivos host. Completamente gerenciado pelo Docker, eles são o método recomendado de dados persistentes que de outra forma seriam perdidos quando os contêineres são destruídos.Os volumes nomeados podem ser definidos no principal
volumes
estrofe do arquivo de configuração e pode ser referenciado dovolumes
subseção de cada serviço definido. Nesse caso, chamamos nosso volumeVolume Mariadb
.Como próximo passo, definimos o valor de alguns variáveis ambientais usado para influenciar o comportamento do contêiner. As variáveis de ambiente são definidas no
ambiente
Seção de uma definição de serviço. As variáveis que definimos neste caso têm o seguinte efeito:Variável Efeito Tz Defina o fuso horário usado pelo servidor mariadb Mysql_allow_empty_password Ativar ou desativar o uso de senha em branco para o usuário do db root Mysql_root_password Esta é uma variável obrigatória e é usada para definir a senha do usuário raiz de banco de dados Mysql_database Opcionalmente usado para especificar o nome do banco de dados a ser criado na inicialização da imagem Mysql_user Opcionalmente usado para especificar o nome de um usuário que será criado com permissões de superusuário para o banco de dados especificado com mysql_database Mysql_password Usado para especificar a senha para o usuário criado com o nome fornecido por mysql_user Neste ponto, devemos ter um servidor da web em funcionamento capaz de trabalhar com PHP e um banco de dados para armazenar nossos dados.
Bônus - Phpmyadmin
Nossa pilha básica de lâmpadas deve agora estar completa. Como bônus, podemos querer adicionar phpmyadmin Para isso, para controlar facilmente nosso banco de dados MariaDB de uma interface da web fácil de usar. Vamos adicionar a definição de serviço relacionada à nossa configuração do Docker-Compose:
cópia deVersão: '3.7 'Serviços: Php-Httpd: Imagem: PHP: 7.Portas de 3 apache: - 80:80 Volumes: - "./Documentroot:/var/www/html "mariadb: imagem: mariadb: 10.5.2 Volumes: - MARIADB -VOLUME:/var/lib/mysql Ambiente: TZ: "Europa/Roma" mysql_allow_empty_password: "não" mysql_root_password: "rootpwd" mysql_user: 'testser' mysql_password: 'TestSpass:' Testpass: 'STRAPT:'sQL). Imagem: links phpmyadmin/phpmyadmin: - 'mariadb: db' portas: - 8081: 80 volumes: mariadb -volume:
Nomeamos nosso serviço
phpmyadmin
e configurou -o para usar o phpmyadmin/phpmyadmin Imagem do DockerHub. Nós também usamos olinks
palavra -chave pela primeira vez; Para que serve isso? Como já sabemos, por padrão, e sem configurações especiais necessárias, todos os contêineres criados na mesma configuração do Docker-Compose são capazes de conversar um com o outro. A imagem phpmyadmin está configurada para referenciar um contêiner em execução de banco de dados pelodB
Nome, portanto, precisamos criar um pseudônimo com o mesmo nome para o nosso serviço Mariadb. Isso é exatamente o quelinks
é usado para: para definir aliases extras para alcançar um serviço de outro.Dentro da definição de serviço, também mapeamos a porta
8081
da nossa máquina host, para porto80
Dentro do recipiente (a porta 80 já está mapeada para a mesma porta dentro do contêiner php-httpd). A interface phpmyadmin será, portanto, acessível no Localhost: 8081 endereço. Vamos reconstruir nosso projeto e verificar:$ sudo docker -compose up -d - -build
A página de login phpmyadminPodemos fazer login com as credenciais que definimos para o nosso serviço de banco de dados e verificar se o
testdb
O banco de dados foi criado:
Página inicial de phpmyadmin
Usando uma imagem personalizada para um serviço
Nos exemplos acima, sempre usamos imagens de baunilha em nossa definição de serviços. Há casos em que podemos querer usar imagens personalizadas do docker com base nelas. Por exemplo, digamos que queremos construir o serviço php-httpd, mas inclua uma extensão php adicional: como podemos fazer isso? Na raiz do projeto, definimos um novo diretório e, por conveniência, nomeie -o após o serviço:
$ mkdir php-httpd
Dentro deste diretório, criamos um Dockerfile, usado para estender a imagem base, com o seguinte conteúdo:
De Php: 7.3-Apache Rótulo mantenedor = "[email protected] "run apt-get update && apt-get install -y libmcrypt-dev \ && pecl install mcrypt-1.0.2 \ && Docker-Php-EXT-ELLABLE MCRYPT
De volta ao nosso
Docker-Compose.yml
arquivo, modificamos a definição dophp-httpd
serviço. Não podemos fazer referência à imagem diretamente como fizemos antes. Em vez disso, especificamos o diretório que contém nosso Dockerfile personalizado como o contexto de construção:
cópia deVersão: '3.7 'Serviços: PHP-HTTPD: Build: Context: ./php -httpd portas: - 80:80 Volumes: - "./Documentroot:/var/www/html "[…]
No
construir
Seção, definimos configurações aplicadas no horário de construção. Nesse caso, usamoscontexto
Para fazer referência ao diretório que contém o Dockerfile: o referido diretório é usado como contexto de compilação, e seu conteúdo é enviado ao daemon do docker quando o contêiner é construído. Para aplicar a modificação, devemos reconstruir o projeto.A propósito, para saber mais sobre extensões adicionais na imagem PHP Docker, você pode dar uma olhada na documentação oficial e especificamente no Extensões PECL seção.
Conclusões
Neste tutorial, vimos como construir uma pilha de lâmpadas básicas usando a tecnologia de contêineres com o Docker e o Docker-Composy. Vimos como definir os vários serviços dentro do Docker-Compose.Arquivo de configuração YML e como configurar montagens de ligação, volumes denominados e mapeamento de portas de contenção de host. Também vimos como usar imagens personalizadas. Você pode dar uma olhada na referência do docker-composição para a lista detalhada de instruções que podem ser usadas dentro do arquivo de configuração do Docker-Compose.
Tutoriais do Linux relacionados:
- Ubuntu 20.04 WordPress com instalação do Apache
- Coisas para instalar no Ubuntu 20.04
- Instalação do Ampache Raspberry Pi
- OpenLITESPEED WordPress Instalação
- Como trabalhar com a API de Rest WooCommerce com Python
- Como instalar a pilha de lâmpadas no Almalinux
- Como configurar o Linux Apache Mysql Python Server
- Ubuntu 20.04: WordPress com instalação nginx
- Como alterar a senha do usuário do mariadb
- Instale o MySQL no Ubuntu 20.04 LTS Linux
- « Ubuntu 20.04 Instalação de desktop de canela
- Como listar e remover o repositório PPA no Ubuntu 20.04 Linux »