O vagrant é uma ferramenta perfeita para quem precisa constantemente criar diversos ambientes de desenvolvimento, porém, pode se tornar complicado o gerencimento, manter atualizado e em alguns casos, pode até se tornar uma porrada de consumo de sua máquina local. Bom, tendo esse problema em mente, existe o "docker", uma camada de
Junto ao docker engine, tem o "docker-compose", ferramenta que facilita na criação de suites de ambientes, criando links entre as apps docker. Um dos problemas que me atentei, por ser programador python, foi de nas alterações dos arquivos, o uso de docker (com uso de builds, imagens e container como se fosse um deploy), em que essas alterações não se refletiam imediatamente no container, para isso, usei um parametro 'extends' do volume onde minha app está. Minha estrutura ficou da seguinte forma:
Criei três arquivos:
Dockerfile - Contendo o build e instalação das dependências de meu projeto django
docker-compose.yml - Criando uma imagem de um banco postgres (totalmente volátil - vale ressaltar -)
common-services.yml - Arquivo que irá extender o volume para que as alterações feitas em seu ambiente sejam imediatamente refletidas em seu container Abaixo, exemplo dos arquivos:
#Dockerfile
FROM ubuntu:14.04
MAINTAINER Rondineli Gomes
RUN locale-gen --no-purge pt_BR
RUN locale-gen --no-purge pt_BR.UTF-8
RUN sudo rm -f /etc/apt/sources.list.d/proposed.list
RUN apt-get update -q && apt-get upgrade -yq
RUN apt-get install -yq --fix-missing build-essential python-dev python-pip ruby git wget locales vim mercurial libmysqlclient-dev libpq-dev
RUN apt-get clean
RUN gem install --no-ri --no-rdoc foreman
ADD . /app/
WORKDIR /app
RUN pip install --process-dependency-links --allow-all-external -r /app/requirements.txt
RUN pip install newrelic
ADD newrelic.ini /app/newrelic.ini
ADD . /app
ADD Procfile /app/Procfile
ENV NEW_RELIC_CONFIG_FILE newrelic.ini
ENV PORT 8000
ENV PROCESS_TYPE web
EXPOSE 8000
USER nobody
Após a criação do arquivo, builde sua imagem, com os seguintes comandos:
rondineli@rondineli-pc:/opt/docker_build_project$ sudo docker build -t containers/docker_build_project .
Feito isso, será rodado todos os inclusos no arquivo Dockerfile. Depois disso, irei ilustrar um exemplo de uma app, subindo uma aplicação django com postgres, para isso, edite o arquivo docker-compose.yml.
db:
image: postgres
ports:
- 5432:5432
web:
build: .
command: newrelic-admin run-program foreman start -p 8000 web
volumes:
- '.:/app'
ports:
- "8000:8000"
extends:
file: common-services.yml
service: webapp
links:
- db
Crie o arquivo: common-services.yml.
webapp:
volumes:
- "/data"
Execute, então os seguinte comando:
rondineli@rondineli-pc:/opt/docker_build_project$ sudo docker-compose build
Obs: Caso retorne erro: docker-compose: command not found, rode: $curl -L https://github.com/docker/compose/releases/download/1.5.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose depois chmod +x /usr/local/bin/docker-compose então, volte a executar o comando acima.
Em seu projeto (no meu caso, utilizei para exemplo o framework django - python - ), inclui os seguintes acessos no meu settings.py do projeto (para que meu projeto, pudesse enxergar a base que criamos).
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'postgres',
'USER': 'postgres',
'HOST': 'db',
'PORT': 5432,
'PASSWORD': 'rpostgres'
}
}
Após rodar o build, execute o comando up para iniciar os containers com os links, para isso, será executado os comandos apresentados no arquivo "docker-compose.yml".
rondineli@rondineli-pc:/opt/docker_build_project$ docker-compose up -d
Após estes comandos, poderá verificar que dois containers estarão up, com o comando: docker ps -a, que terá uma saida exatamente igual á:
root@rondineli:/opt/docker_build_project# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
312d6ea07c7b docker_build_project_web "newrelic-admin run- 8 hours ago Up 8 hours 0.0.0.0:8000->8000/tcp f2badmin_web_1
96b8dc2b8a98 postgres "/docker-entrypoint. 8 hours ago Up 8 hours 0.0.0.0:5432->5432/tcp docker_build_project_db_1
Para executar o migration ou demais comando nos container, utilize o seguinte comando:
root@rondineli:/opt/docker_build_project#docker-compose run web python manage.py migrate
Para acessar o bash do container, utilize o comando abaixo:
root@rondineli:/opt/docker_build_project#docker-compose run web /bash
É isso, espero que isso, possa ajudar alguém :D
Nenhum comentário:
Postar um comentário