A automação de servidores desempenha agora um papel essencial na administração de sistemas, devido à natureza descartável dos ambientes das aplicações modernas. Ferramentas de Gerenciamento de configuração tais como o Ansible são normalmente usadas para otimizar o processo de automatização da configuração do servidor, estabelecendo procedimentos padrão para novos servidores e reduzindo também o erro humano associado às configurações manuais.
O Ansible oferece uma arquitetura simples que não requer a instalação de software especial nos nodes. Ele também fornece um conjunto robusto de recursos e módulos internos que facilitam a criação de scripts de automação.
Este guia explica como usar o Ansible para automatizar os passos contidos em nosso guia Como Instalar e Usar o Docker no Ubuntu 18.04. O Docker é uma aplicação que simplifica o processo de gerenciamento de containers, que são processos isolados de recursos que se comportam de maneira semelhante às máquinas virtuais, mas são mais portáteis, mais amigáveis e dependem mais do sistema operacional do host.
Para executar a configuração automatizada fornecida pelo playbook que estamos discutindo neste guia, você precisará de:
Antes de continuar, primeiro você precisa garantir que o node de controle do Ansible possa conectar e executar comandos no(s) host(s) Ansible. Para um teste de conexão, verifique o passo 3 de Como instalar e configurar o Ansible no Ubuntu 18.04.
Este Playbook Ansible fornece uma alternativa à execução manual do procedimento descrito em nosso guia sobre Como Instalar e Usar o Docker no Ubuntu 18.04.
A execução deste playbook executará as seguintes ações nos hosts Ansible:
aptitude
, que é preferido pelo Ansible como uma alternativa ao gerenciador de pacotes apt
.apt
.pip
.default_container_image
do Docker Hub.create_containers
, cada um usando a imagem definida por default_container_image
e executar o comando definido em default_container_command
em cada novo container.Após a execução do playbook, você terá vários containers criados com base nas opções definidas nas suas variáveis de configuração.
A primeira coisa que precisamos fazer é obter o playbook do Docker e suas dependências no repositório do-community/ansible-playbooks. Precisamos clonar esse repositório em uma pasta local dentro do Node de Controle Ansible.
Caso você tenha clonado este repositório antes, enquanto seguia um guia diferente, acesse sua cópia existente do ansible-playbooks
e execute um comando git pull
para garantir que você tenha conteúdo atualizado:
- cd ~/ansible-playbooks
- git pull
Se esta é sua primeira vez usando o repositório do-community/ansible-playbooks
, você deve começar clonando o repositório na sua pasta home com:
- cd ~
- git clone https://github.com/do-community/ansible-playbooks.git
- cd ansible-playbooks
Os arquivos em que estamos interessados estão localizados dentro da pasta docker_ubuntu1804
, que possui a seguinte estrutura:
docker_ubuntu1804
├── vars
│ └── default.yml
├── playbook.yml
└── readme.md
Aqui está o que cada um desses arquivos representa:
vars/default.yml
: Arquivo de variáveis para personalizar as configurações do playbook.playbook.yml
: O arquivo do playbook, contendo as tarefas a serem executadas nos servidores remotos.readme.md
: Um arquivo de texto contendo informações sobre este playbook.Editaremos o arquivo de variáveis do playbook para personalizar nossa configuração do Docker. Acesse o diretório docker_ubuntu1804
e abra o arquivo vars/default.yml
usando o editor de linha de comando de sua escolha:
- cd docker_ubuntu1804
- nano vars/default.yml
Este arquivo contém algumas variáveis que requerem sua atenção:
---
create_containers: 4
default_container_name: docker
default_container_image: ubuntu
default_container_command: sleep 1d
A lista a seguir contém uma breve explicação de cada uma dessas variáveis e como você pode alterá-las:
create_containers
: O número de containers a serem criados.default_container_name
: Nome padrão do container.default_container_image
: Imagem padrão do Docker a ser usada ao criar containers.default_container_command
: Comando padrão para executar em novos containers.Quando terminar de atualizar as variáveis dentro de vars/default.yml
, salve e feche este arquivo. Se você usou nano
, faça isso pressionando CTRL + X
, Y
, e, em seguida, ENTER
.
Agora você está pronto para executar este playbook em um ou mais servidores. A maioria dos playbooks está configurada para ser executada em todos os servidores do seu inventário, por padrão. Podemos usar a flag -l
para garantir que apenas um subconjunto de servidores ou um único servidor seja afetado pelo playbook. Também podemos usar a flag -u
para especificar qual usuário no servidor remoto que estamos usando para conectar e executar os comandos do playbook nos hosts remotos.
Para executar o playbook apenas no servidor server1
, conectando-se como sammy
, você pode usar o seguinte comando:
- ansible-playbook playbook.yml -l server1 -u sammy
Você obterá uma saída semelhante a esta:
Output...
TASK [Add Docker GPG apt Key] ********************************************************************************************************************
changed: [server1]
TASK [Add Docker Repository] *********************************************************************************************************************
changed: [server1]
TASK [Update apt and install docker-ce] **********************************************************************************************************
changed: [server1]
TASK [Install Docker Module for Python] **********************************************************************************************************
changed: [server1]
TASK [Pull default Docker image] *****************************************************************************************************************
changed: [server1]
TASK [Create default containers] *****************************************************************************************************************
changed: [server1] => (item=1)
changed: [server1] => (item=2)
changed: [server1] => (item=3)
changed: [server1] => (item=4)
PLAY RECAP ***************************************************************************************************************************************
server1 : ok=9 changed=8 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Nota: Para obter mais informações sobre como executar os playbooks Ansible, consulte nosso guia de referência Ansible Cheat Sheet Guide.
Quando o playbook terminar de executar, efetue login via SSH no servidor provisionado pelo Ansible e execute docker ps -a
para verificar se os containers foram criados com sucesso:
- sudo docker ps -a
Você deve ver uma saída semelhante a esta:
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a3fe9bfb89cf ubuntu "sleep 1d" 5 minutes ago Created docker4
8799c16cde1e ubuntu "sleep 1d" 5 minutes ago Created docker3
ad0c2123b183 ubuntu "sleep 1d" 5 minutes ago Created docker2
b9350916ffd8 ubuntu "sleep 1d" 5 minutes ago Created docker1
Isso significa que os containers definidos no playbook foram criados com sucesso. Como essa foi a última tarefa do playbook, também confirma que o playbook foi totalmente executado neste servidor.
Você pode encontrar a configuração do servidor Docker apresentada neste tutorial na pasta docker_ubuntu1804
dentro do repositório DigitalOcean Community Playbooks. Para copiar ou baixar o conteúdo do script diretamente, clique no botão Raw na parte superior de cada script.
O conteúdo completo do playbook, bem como seus arquivos associados, também estão incluídos aqui para sua conveniência.
O arquivo de variáveis default.yml
contém valores que serão usados ao configurar o Docker no seu servidor.
---
create_containers: 4
default_container_name: docker
default_container_image: ubuntu
default_container_command: sleep 1d
O arquivo playbook.yml
é onde todas as tarefas desta configuração são definidas. Ele começa definindo o grupo de servidores que deve ser o alvo dessa configuração (all
), após o qual ele usa become: true
para definir que as tarefas devem ser executadas com escalação de privilégios (sudo
) por padrão. Em seguida, inclui o arquivo de variáveis vars/default.yml
para carregar as opções de configuração.
---
- hosts: all
become: true
vars_files:
- vars/default.yml
tasks:
- name: Install aptitude using apt
apt: name=aptitude state=latest update_cache=yes force_apt_get=yes
- name: Install required system packages
apt: name={{ item }} state=latest update_cache=yes
loop: [ 'apt-transport-https', 'ca-certificates', 'curl', 'software-properties-common', 'python3-pip', 'virtualenv', 'python3-setuptools']
- name: Add Docker GPG apt Key
apt_key:
url: https://download.docker.com/linux/ubuntu/gpg
state: present
- name: Add Docker Repository
apt_repository:
repo: deb https://download.docker.com/linux/ubuntu bionic stable
state: present
- name: Update apt and install docker-ce
apt: update_cache=yes name=docker-ce state=latest
- name: Install Docker Module for Python
pip:
name: docker
- name: Pull default Docker image
docker_image:
name: "{{ default_container_image }}"
source: pull
# Creates the number of containers defined by the variable create_containers, using values from vars file
- name: Create default containers
docker_container:
name: "{{ default_container_name }}{{ item }}"
image: "{{ default_container_image }}"
command: "{{ default_container_command }}"
state: present
with_sequence: count={{ create_containers }}
Sinta-se à vontade para modificar este playbook para melhor atender às suas necessidades individuais dentro do seu próprio fluxo de trabalho. Por exemplo, você pode usar o módulo docker_image
para enviar imagens ao Docker Hub ou ao módulo docker_container
para configurar redes de containers.
A automação da configuração da sua infraestrutura não apenas poupa tempo, mas também ajuda a garantir que seus servidores sigam uma configuração padrão que pode ser personalizada de acordo com suas necessidades. Com a natureza distribuída das aplicações modernas e a necessidade de consistência entre os diferentes ambientes de preparação ou staging, uma automação como essa se tornou um componente central nos processos de desenvolvimento de muitas equipes.
Neste guia, demonstramos como usar o Ansible para automatizar o processo de instalação e configuração do Docker em um servidor remoto. Como cada pessoa normalmente tem necessidades diferentes ao trabalhar com containers, recomendamos que você verifique a documentação oficial do Ansible para obter mais informações e casos de uso do módulo docker_container
do Ansible.
Se você deseja incluir outras tarefas neste playbook para personalizar ainda mais sua configuração inicial de servidor, consulte nosso guia introdutório de Ansible em Configuration Management 101: Writing Ansible Playbooks.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!