FAQ

  1. Quais os requisitos para utilizar o azk?
  2. Qual a diferença do azk para o docker-compose (Fig)?
  3. Qual a diferença do azk para o Vagrant, ou Chef?
  4. Meu programa está legal com azk. Existe alguma forma de fazer deploy do meu ambiente?
  5. Dentro do Azkfile.js, qual a diferença entre image, provision e command?
  6. Por que devo utilizar as imagens sugeridas pelo azk init?
  7. A imagem sugerida pelo azk não está do jeito que eu gostaria, como devo proceder?
  8. Não acho a imagem que gostaria no Docker Hub, o que faço agora?
  9. Por que quando eu mudo de pastas não vejo mais os sistemas levantados com o comando azk status?
  10. Qual a vantagem de se utilizar vários sistemas, cada um num container separado?
  11. Já utilizei várias imagens com o azk que não utilizo mais. Elas estão ocupando muito espaço em disco. Como faço para limpar?
  12. Como crio uma aplicação (npm, rails, etc), sem ter a linguagem ou framework instalados na minha máquina?
  13. Estou com problemas de completion e encoding dentro do azk shell. Como resolvo?

Quais os requisitos para utilizar o azk?

Linux:

  • Docker

Mac:

  • Virtualbox

Ao executar o azk no Mac, você não precisa instalar o Docker manualmente já que nós cuidamos disso. Nesse caso você tem acesso ao docker no terminal através do comando adocker. Pelo fato do Linux não precisar de uma máquina virtual para executar o azk, a performance nele é superior a alcançada no Mac.

Qual a diferença do azk para o docker-compose (Fig)?

O azk:

  • Não é um orquestrador focado apenas em Docker, apesar de suportar somente Docker no momento;
  • Conta com um balanceador de carga http integrado, o que facilita testes de "stateless" das suas aplicações web;
  • Possui um serviço de DNS integrado, que ajuda a lidar com várias aplicações sem necessidade de ficar lembrando em qual porta do localhost você as levantou. Também inclui suporte ao Linux por meio da lib: libnss-resolver;
  • Possui o conceito de provisionamento, que permite que sejam executados comandos antes da criação do container de forma automática, sem que seja necessária a alteração da imagem original. Ideal para executar a instalação de dependências, ou migrações de bancos de dados, por exemplo;
  • Possibilita a criação de um arquivo de manifesto mais avançado, chamado de Azkfile.js, feito com uma DSL Javascript que torna sua criação bem flexível.

Qual a diferença do azk para o Vagrant, ou Chef?

Explicando de uma forma sucinta:

  • O Vagrant provê uma maneira de descrever e gerar máquinas virtuais idênticas (ou até mesmo containers recentemente). Ele pode trabalhar em conjunto com uma ferramenta de configuração de software (por exemplo Chef) para continuar o processo de setup de uma máquina, após a instalação do sistema terminar.

  • Chef, como mencionado acima, é uma ferramenta para configuração de software. Ele vai ajudar a automatizar o processo de configuração de uma máquina, após ela ser levantada. Por exemplo: arquivos de configuração, programas instalados, usuários, entre outros recursos. Chef, como outros projetos similares, também ajuda no processo de orquestração para enviar mudanças no sistema para máquinas específicas.

O azk, assim como o Docker, se sobrepõe ao Vagrant e ao Chef em certos aspectos. Com ele é possível definir como as aplicações/serviços que compõem o seu projeto se relacionam, e como o seu projeto deve ser executado. Isso é feito dentro do Azkfile.js, de uma forma clara e sucinta para facilitar a comunicação entre desenvolvimento e operações (DevOps), e tornar todo o processo de deployment algo transparente para ambos os times. Além disso, especificamente pelo uso de containers, testar as aplicações em desenvolvimento e produção se torna algo muito mais confiável e diminui as chances do famoso "mas funciona na minha máquina".

Por fim o azk foca em uma abordagem de descrição da arquitetura do ponto de vista funcional, ou seja você descreve os vários "micro-serviços" que compõem sua arquitetura. Isso é diferente da abordagem de arquitetura de sistemas, como no Vagrant, onde o foco é na descrição de máquina virtuais;

Estamos trabalhando numa solução de deploy. Aguardem. ;)

Dentro do Azkfile.js, qual a diferença entre image, provision e command?

O image define qual será a imagem binária do Docker que será utilizada como ponto de partida para montagem do sistema. O provision é executado uma vez antes do sistema ser levantando e o command define a forma de levantar o sistema para que ele seja exposto para o usuário, ou outro sistema.

Por que devo utilizar as imagens sugeridas pelo azk init?

As sugestões feitas pelo comando azk init são testadas pela equipe do azk. Elas seguem nossos padrões de qualidade para assegurar a integração e estabilidade com a nossa ferramenta, além de terem os Dockerfile's disponíveis para que você possa verificar tudo que está sendo instalado no sistema.

A imagem sugerida pelo azk não está do jeito que eu gostaria, como devo proceder?

Você pode encontrar imagens prontas em:

Não acho a imagem que gostaria no Docker Hub, o que faço agora?

Nesse caso, a alternativa é criar o seu próprio Dockerfile para fazer o build da sua imagem, seguindo as instruções em: https://docs.docker.com/reference/builder

Além disso, faz sentido utilizar seu próprio Dockerfile caso:

  • Você saiba os requisitos exatos e únicos do ambiente de desenvolvimento necessário para sua aplicação;
  • Você queira adicionar funcionalidades específicas do seu projeto a imagens existentes;
  • Você precisa otimizar o tamanho de uma imagem comparado ao que está disponível atualmente.

Por que quando eu mudo de pastas não vejo mais os sistemas levantados com o comando azk status?

O comando azk status e seus irmãos (start, stop, restart e etc.) são relativos ao Azkfile.js da pasta atual ou pastas ascendentes (assim como o .gitignore, por exemplo). Quando se muda de pasta o azk entende que se deseja trabalhar em outro sistema. Por isso para que possamos executar um azk stop num sistema em que tenha sido executado o azk start, precisamos voltar a sua pasta.

Qual a vantagem de se utilizar vários sistemas, cada um num container separado?

Para responder essa questão, vale a pena ler sobre micro-serviços nesse ótimo artigo: http://martinfowler.com/articles/microservices.html

Já utilizei várias imagens com o azk que não utilizo mais. Elas estão ocupando muito espaço em disco. Como faço para limpar?

Você pode listar as imagens utilizando o comando:

$ adocker images

Para deletar uma imagem, basta executar:

$ adocker rmi azukiapp/node:0.10

Ao listar as imagens, algumas podem aparecer com o nome <none>. Estas são imagens "perdidas". Isso acontece por uma série de razões, entre elas podem estar um container que ainda estava em execução quando uma nova versão foi removida, por exemplo. Para remover todas de uma única vez faça:

adocker rmi --force `adocker images | grep "<none>" | awk '{ print $3 }'`

Como crio uma aplicação (npm, rails, etc), sem ter a linguagem ou framework instalados na minha máquina?

Você pode criar um container utilizando a imagem da linguagem/framework que você quiser, acessá-lo utilizando o comando azk shell --image [docker-registry-image], e criar sua aplicação dentro dele.

Exemplo de geração de uma aplicação rails:

$ azk shell --image azukiapp/ruby --shell /bin/bash
# gem install rails --no-rdoc --no-ri
# rails new my-app
# exit

Depois disso você já pode criar um Azkfile.js entrando na pasta da aplicação:

$ cd my-app
$ azk init

Estou com problemas de completion e encoding dentro do azk shell. Como resolvo?

Por padrão, quando um azk shell é executado, o /bin/sh é utilizado para o terminal. Isto é feito porque não são todas as imagens que tem o /bin/bash instalado.

Se a imagem que você está utilizando tem o /bin/bash instalado edite o seu arquivo Azkfile.js e adicione a opção shell: "/bin/bash" para o seu system. Ou então, utilize a opção --shell no comando azk shell:

$ azk shell --shell=/bin/bash