‫Esta seção se concentrará exclusivamente no Docker Compose, que é uma combinação de uma ferramenta
‫de linha de comando e um arquivo de configuração. Os requisitos para esta seção são que você
‫realmente precisa conhecer muitos dos fundamentos das últimas secções em torno de imagens e contêineres.
‫Quando estamos passando por este curso, provavelmente você vai começar a me ouvir ficando
‫cada vez mais animado porque as coisas simplesmente continuam melhorando.
‫Certo?
‫À medida que você aprende um componente, você está pensando: 'man, bind mounts e volumes são realmente legais. Isso vai me salvar algum
‫tempo. Posso imaginar como vou usar isso. Blá blá blá blá.
‫Então, vou vir com a próxima coisa que será ainda melhor do que o que acabou de aprender.
‫Neste caso, não poderia ser mais verdade.
‫Docker Compose. Então o que é? E por que nos importamos? Assim, poucos serviços de software são verdadeiramente autônomos.
‫Quando você pensa sobre seus contêineres, eles são uma única solução de processo, e raramente vamos usar apenas
‫um único recipiente para resolver um problema ou fornecer um serviço aos nossos clientes.
‫Nossos contêineres geralmente exigem outros contêineres, como SQL ou um valor-chave. E outros aplicativos que precisamos executar em
‫contêineres, como proxies ou web frontends ou backend workers, e assim por diante.
‫expor o público portas e, em seguida, gire todos e rasgue-os com um comando.
‫E se tivéssemos uma maneira de conectar juntas todas essas peças da nossa solução, onde não precisávamos lembrar
‫de todas as nossas opções de corrida do docker, e depois colocá-las em redes virtuais discretas com relacionamentos entre
‫elas e apenas
‫Bem, isso é Docker Compose.
‫Antes de mergulhar, precisamos esclarecer que há
‫duas partes para Docker Compose. A primeira parte é o arquivo YAML e é super simples de entender.
‫Está escrito em YAML, e se você nunca lidou com YAML, esse é um idioma de configuração muito fácil.
‫É quase tão fácil quanto um arquivo INI seria.
‫Na verdade, acho que é mais fácil porque mostra hierarquia.
‫Vamos mergulhar nisso. Esse arquivo é onde você especificaria todos os contêineres que
‫você precisa executar, as redes que você precisa, todos os volumes que você precise, variáveis ​​de ambiente, imagens e todos os tipos de outras
‫opções de configuração.
‫Então, a segunda parte do Docker Compose é uma ferramenta CLI, que é docker -compose, que
‫usamos normalmente para apenas dev e teste local, usando esse arquivo YAML que criamos para simplificar os nossos comandos do Docker.
‫Vamos falar sobre esse arquivo Docker Compose.
‫Na verdade, existem versões para as coisas que você pode inserir no arquivo de composição. ele era realmente chamado de "Fig" e apenas assumiu a versão 1.
‫Então, quando o Docker Compose foi criado há anos atrás, Na verdade, nem mesmo
‫listou uma versão no arquivo. À medida que é amadurecido e adicionou novos
‫recursos ao que o arquivo pode ter nele, como redes e volumes, eles criaram a declaração da versão,
‫que é realmente a primeira linha no arquivo. Este arquivo pode realmente ser usado com um Docker Compose CLI, do qual falamos
‫em um minuto.
‫Isto é, mais uma vez, principalmente para gerenciamento de desenvolvimento local e apenas facilitando a circulação em
‫seus ambientes em sua máquina local.
‫Agora, a partir do início de 2017, temos a versão 1. ser usados ​​diretamente com a linha de comando docker em produção com enxame.
‫13 e qualquer coisa além disso, esses arquivos agora podem Claro, há uma ótima ajuda na
‫linha de comando com o --help.
‫Ao analisarmos alguns exemplos, saiba que o arquivo Docker Compose é um nome padrão, mas você pode
‫realmente usar qualquer nome de arquivo desejado, desde que seja o YAML apropriado e que você use o -f para especificar qual
‫arquivo você ' está tentando usar.
‫Se eu abrir meu editor e olhar para o modelo aqui, eu só queria mostrar um pouco do esboço do
‫que isso deveria parecer.
‫Nós temos o valor da versão no início.
‫A versão mais recente no primeiro trimestre de 2017 é de 3. 1.
‫Mas sempre faço, pelo menos, a versão 2. Se você não adicionar essa linha, é sempre suposto ser a versão
‫1.
‫Mas eu não recomendo isso porque você perde muitos dos recursos.
‫Então eu normalmente começo com a versão 2. Então, se eu precisar de recursos específicos fora da versão 3 e 3. 1, acabo escrevendo
‫o número da versão lá. Você verá as outras três seções principais
‫são serviços, volumes e redes, certo?
‫Então, isso é hierárquico.
‫Sob serviços, tudo pode ser dois ou quatro espaços, mas precisa ser consistente.
‫Se você procurar o YAML na internet, você encontrará alguns sites que o guiam com os detalhes
‫sobre como formatar este arquivo.
‫Se você estiver usando um editor moderno, ele realmente falará o idioma YAML e saberá lidar com
‫esses arquivos e sua formatação.
‫Normalmente, aqui, você tem, no mínimo, serviços, que são realmente apenas recipientes.
‫A razão pela qual eles realmente os chamam de serviços é porque cada um dos contêineres que você cria
‫aqui, você poderia realmente ter vários desses recipientes para redundância. precisavam encontrar uma palavra diferente.
‫Então eles
‫Eu acho que os serviços são ótimos porque isso é basicamente o que você está fazendo. Certo?
‫Cada recipiente, ou recipientes, que são idênticos, que você está usando geralmente estão fornecendo um serviço
‫para algo.
‫Por baixo do nome do serviço, e novamente você pode chamá-lo do que quiser.
‫Não precisa ser o nome da imagem ou não precisa ser nada relacionado.
‫Poderia ser Barney pelo nome do serviço, mas será o nome DNS, que descobriremos mais tarde, é
‫usado dentro das suas redes Docker.
‫Semelhante a quando você dá o nome - a um comando de encadernação.
‫Aqui, mostrei que podemos opcionalmente especificar a imagem. Podemos especificar o comando
‫alternativo para executar. Se quisermos substituir o comando real que foi especificado na imagem quando
‫o executamos, podemos fazer isso aqui.
‫Basicamente, todas as coisas que fazemos do comando de encaminhamento do docker, podemos salvá-los aqui. Porque é sobre o que realmente se
‫trata, é tirar todo o trabalho de lembrar de todas as coisas diferentes no comando docker
‫executar para as coisas que você está executando constantemente.
‫desenvolvimento, ou suas próprias ferramentas, você provavelmente não deseja digitar esses comandos uma e outra vez.
‫Se você tem seus próprios ambientes de E os scripts de shell só podem fazer muito.
‫Certo?
‫Então, esse arquivo realmente substituiria um script de shell que automatizaria seus comandos de execução do docker.
‫Esta é uma maneira muito melhor de fazê-lo.
‫É mais fácil de ler e está melhor documentado.
‫Você perceberá que os espaços aqui são permitidos.
‫Você pode ter espaços nos comentários onde quiser.
‫Se você tivesse vários serviços, basta certificar-se de que eles são nomes exclusivos.
‫Então, as outras partes que especificamos são volumes e redes. E, novamente, também são opcionais.
‫É basicamente as mesmas regras que quando você está executando a partir da linha de comando.
‫Se você precisasse usar o volume do docker criar ou a rede docker criar comandos, e
‫novamente, você nem sempre precisa.
‫Depende apenas da sua situação.
‫Você também pode colocá-los aqui.
‫Vejamos um mundo real, um exemplo simples.
‫na última seção, tivemos uma palestra onde usamos a Jekyll realmente rápido para fazer um exemplo de ligação.
‫Você se lembra
‫Então, isso é o que o arquivo de composição pareceria para esse comando de encaminhamento do docker, e você verá
‫que eu especifiquei a imagem aqui.
‫Conheci Jekyll.
‫Eu dei um volume. Você notará em vez de usar o pwd, Compose realmente entende o ponto, o
‫que significa que este é o diretório de trabalho atual em que estou.
‫Basta usar este diretório do qual estou executando o arquivo de composição. Em seguida, as portas ou a opção -p.
‫uma imagem para cada serviço, geralmente seria um formato de chave e valor como este.
‫Você notará algumas pequenas coisas sobre YAML, onde quando algo só tem uma opção, como se houvesse apenas
‫Se for uma lista de itens, como volumes e portas onde você pode ter vários, você notará que
‫o arquivo de composição geralmente tem um plural. Em vez de volume, são volumes. E, em vez de portas, são portas.
‫E então haverá um formato de lista com um -.
‫Se nós pularmos para outro exemplo, de verdade.
‫Você verá isso neste, este é realmente um
‫exemplo de configuração do WordPress onde você tem o serviço de banco de dados aqui embaixo que está executando um
‫contêiner de banco de dados.
‫E, em seguida, o servidor do servidor web WordPress em cima.
‫Você notará que uma coisa pequena que é diferente sobre isso é que estamos usando as variáveis ​​de
‫ambiente, o que seria o mesmo que um -e na linha de comando. Mas ao invés de um formato de lista
‫onde temos um -,
‫isto é, novamente, outra declaração de chave e valor.
‫Neste formato, não usamos o -, apenas listamos a chave e o valor.
‫Se eu precisasse adicionar outro, eu simplesmente faria isso aqui. Tudo isso será passado para o recipiente,
‫quando ele é executado, usando a linha de comando compor.
‫Então, por último, temos mais um exemplo. Este é um pouco mais complicado. Na verdade, eu estava
‫trabalhando recentemente para configurar um cluster de servidor de três bancos atrás de um servidor web Ghost.
‫Ghost é realmente um sistema de blog semelhante ao WordPress. Você verá que eu tenho várias
‫variáveis ​​de ambiente para cada um desses contêineres.
‫Então eu tenho o meu recipiente Ghost no topo. Então eu realmente tenho essa coisa conhecida como SQL
‫Proxy, que fica na frente dos servidores MySQL e atua como um balanceador de carga e uma solução de failover.
‫Então eu tenho cada um dos meus dois servidores MySQL. Você notará outra opção aqui embaixo, que diz,
‫'depende de', e depende de um bastante comum.
‫Basicamente, o Compose compreende o relacionamento entre esses serviços. Sabe que, se eu precisar
‫iniciar o meu Ghost, também preciso iniciar outros.
‫Você pode ver aqui que o meu Ghost realmente depende disso. Entraremos nos detalhes de como
‫isso funciona em palestras posteriores.
‫Mas, por enquanto, isso provavelmente é muito para digerir, e todos esses comandos diferentes e outros, mas confie em
‫que o Docker tenha uma documentação realmente excelente em seu site. Se você procurar o arquivo Docker Compose no
‫Google, provavelmente encontrará isso com os primeiros dois hits.
‫Vai estar sob os documentos. docker. chave e valor que você possui.
‫site com, como de costume, e será documentação sobre todas as pequenas opções de
‫Você verá o depende do que acabei de mencionar. Você verá o ambiente aqui onde mostra diferentes maneiras
‫de inserir variáveis ​​de ambiente. O que há de bom com esta documentação é
‫que dá muitos exemplos.
‫Pessoalmente, eu estou neste site todos os dias, assim como estou na página de opções de comando do docker ou na página
‫de opções de comando.
‫Estou constantemente referenciando estes porque há apenas francamente tantos recursos hoje em dia que não consigo me lembrar
‫de todos eles.
‫Então mantenho-os próximos nos meus favoritos.
‫Agora que temos uma idéia geral do que o formato do arquivo de composição pode parecer, vamos passar para
‫a linha de comando e aprender sobre a ferramenta Docker Composer CLI.