Projeto criado para praticar o uso do docker. Se trata de cluster para exemplificar como criar um ambiente altamente escalável com balanceamento de carga e gerenciamento de containers (principalmente disponibilidade) com o docker swarm. O conteúdo em produção está disponível no site -> portifolio.samuelnunesdev.com
- Quatro nós criados a partir da AWS EC2 com uma VPC, sub-rede (para conversarem entre si), um grupo de segurança e um NFS para formar o
swarm
, sendo:- O
leader
com disponibilidadedrain
, resposável apenas para o controle do swarm e como servidor dos volumes utilizando NFS. - Dois nós gerenciadores/trabalhadores que podem receber containers e servem de backup caso o
leader
fique indisponível. - Um nó apenas para trabalho, responsável pelos bancos de dados com volume fixado.
- O
- Um
registry
para guardar imagens personalizadas. - Um proxy reverso utilizando o nginx para balanceamento de carga.
- O swarmpit para monitoramento do swarm.
- Algumas imagens como apache, postgres e o php-apache para servir algumas aplicações que em um futuro próximo serão migradas.
- Route 53 para gerenciamento de domínios.
- Adicionar labels em nós que receberão container cujo o volume é fixado
$ docker node ls $ docker node update --label-add gerenciador=2 nome-ou-id-de-um-no-gerenciador-exceto-leader $ docker node update --label-add trabalhador=1 nome-ou-id-de-um-no-apenas-trabalhador```
- Instalando o
registry
$ docker stack deploy -c registry/docker-compose.yml
- Criando o build do proxy
$ cd proxy-portifolio && docker build -t localhost:5000/proxy-portifolio:1.0 .
- Instalando o swarmpit
$ git clone https://github.com/swarmpit/swarmpit -b master $ docker stack deploy -c swarmpit/docker-compose.yml swarmpit
- Instalando os demais projetos (proxy, apache, php, banco de dados e etc)
$ docker stack deploy -c portifolio/docker-compose.yml portifolio
- Alterando a disponibilidade do nó
leader
$ docker node update --availability drain nome-ou-id
- Instalar e configurar o NFS servidor no nó
leader
$ apt-get -y install nfs-server $ nano /etc/exports
- Adicione estas duas linhas no final do arquivo e salve o arquivo:
/var/lib/docker/volumes/apache/_data *(rw,sync,no_subtree_check) /var/lib/docker/volumes/abraco-quentinho/_data *(rw,sync,no_subtree_check)
- Após adicionar as linhas deve-se exportar os diretórios
$ exportfs -ar
- Adicione estas duas linhas no final do arquivo e salve o arquivo:
- Instalar e configurar o NFS cliente nos demais nós
$ apt-get -y install nfs-common $ mount ip-no-leader:/var/lib/docker/volumes/apache/_data /var/lib/docker/volumes/apache/_data $ mount ip-no-leader:/var/lib/docker/volumes/abraco-quentinho/_data /var/lib/docker volumes/abraco-quentinho/_data
- Adicionar os arquivos nos volumes pelo nó
leader
$ git clone https://github.com/SamuelNunesDev/SamuelNunesDev.git && mv SamuelNunesDev/* /var/lib/docker/volumes/apache/_data
$ git clone https://github.com/SamuelNunesDev/abraco-quentinho.git && mv abraco-quentinho/* /var/lib/docker/volumes/abraco-quentinho/_data
- MIT License (MIT). Por favor olhe LICENSE para mais informações.