De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: Rodrigo Alvares
Data de Publicação: 23 de abril de 2015
Projeto: https://github.com/cooltrick/git2docker.io
Git2Docker Servidor
Procedimento realizando utilizando Opensuse 13.2, lembrando que os binarios funcionam em qualquer distribuição linux 64bits.
Instalando os componentes:
zypper install docker systemctl enable docker systemctl start docker systemctl enable sshd systemctl start sshd
Obs: Desabilite o Firewall.
Procedimento de instalação do Git2Docker
curl https://raw.githubusercontent.com/cooltrick/git2docker.io/master/install.sh | sh
Criando um usuário para utilizar o git2docker.io
useradd -m user gpasswd -a user docker passwd user
O servidor git2docker utiliza chaves para autenticação sem senha.
Usando o git2docker Maquina Cliente:
Gerando e Adicionando a chave de autenticação:
mkdir ~/.git2docker ssh-keygen -t dsa cp -rf ~/.ssh/id_rsa* ~/.git2docker/ cat ~/.git2docker/id_rsa.pub | ssh user@192.168.100.56 git2docker
Baixando e instalando o CLI.
curl https://github.com/cooltrick/git2docker.io/raw/master/git2docker-client/linux/git2docker chmod +x git2docker cat > ~/.git2docker/git2docker.conf << EOF user=user host=192.168.100.56 EOF
Exemplo de Deploy e Administração:
Fazendo um deploy simples utilizando o mode de detecção de código Heroku style.
git clone https://github.com/heroku/node-js-sample cd node-js-sample git init
Crie um arquivo chamado git2docker.conf:
O arquivo git2docker.conf é o arquivo que contem as opções de deploy da
aplicação irei explicar mais detalhadamente.
echo state=build > git2docker.conf
git add --all
git commit -m "build"
git remote add git2docker user@192.168.100.56:node-js-sample
git push git2docker master
@linux:/tmp/node-js-sample> git push git2docker master
Counting objects: 391, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (316/316), done.
Writing objects: 100% (391/391), 214.55 KiB | 0 bytes/s, done.
Total 391 (delta 46), reused 387 (delta 45)
remote: =======> Working - node-js-sample
remote:
-----> Using u1000 to run an application
-----> Node.js app detected
-----> Reading application state
package.json...
build directory...
cache directory...
environment variables...
Node engine: 0.12.x
Npm engine: unspecified
Start mechanism: npm start
node_modules source: npm-shrinkwrap.json
node_modules cached: false
NPM_CONFIG_PRODUCTION=true
NODE_MODULES_CACHE=true
-----> Installing binaries
Resolving node version 0.12.x via semver.io...
Downloading and installing node 0.12.2...
Using default npm version: 2.7.4
-----> Building dependencies
Installing node modules
express@4.12.3 node_modules/express
---> merge-descriptors@1.0.0
---> utils-merge@1.0.0
---> cookie-signature@1.0.6
---> methods@1.1.1
---> fresh@0.2.4
---> escape-html@1.0.1
---> cookie@0.1.2
---> range-parser@1.0.2
---> content-type@1.0.1
---> finalhandler@0.3.4
---> vary@1.0.0
---> parseurl@1.3.0
---> serve-static@1.9.2
---> content-disposition@0.5.0
---> path-to-regexp@0.1.3
---> depd@1.0.1
---> qs@2.4.1
---> etag@1.5.1 (crc@3.2.1)
---> on-finished@2.2.0 (ee-first@1.1.0)
---> debug@2.1.3 (ms@0.7.0)
---> proxy-addr@1.0.7 (forwarded@0.1.0, ipaddr.js@0.1.9)
---> send@0.12.2 (destroy@1.0.3, ms@0.7.0, mime@1.3.4)
---> accepts@1.2.5 (negotiator@0.5.1, mime-types@2.0.10)
---> type-is@1.6.1 (media-typer@0.3.0, mime-types@2.0.10)
-----> Checking startup method
No Procfile; Adding 'web: npm start' to new Procfile
-----> Finalizing build
Creating runtime environment
Exporting binary paths
Cleaning npm artifacts
Cleaning previous cache
Caching results for future builds
-----> Build succeeded!
node-js-sample@0.2.0 /tmp/build
└── express@4.12.3
-----> Discovering process types
Procfile declares types -> web
remote: node-js-sample Started
remote: 49153
To demo@localhost:node-js-sample
* [new branch] master -> master
@linux:/tmp/node-js-sample> curl http://192.168.100.56:49153/
Hello World!
Caso queira fazer um deploy de um Dockerfile, siga o exemplo:
mkdir apache-demo cd apache-demo echo "FROM httpd:2.4" > Dockerfile echo "EXPOSE 80" >> Dockerfile
Crie um arquivo chamado git2docker.conf:
O arquivo git2docker.conf e o arquivo que contem as opções de deploy da aplicação irei explicar mais detalhadamente.
echo state=dockerfile > git2docker.conf git add --all git commit -m "build" git remote add git2docker user@192.168.100.56:apache-demo git push git2docker master @linux:/tmp/apache-demo> git push git2docker master Counting objects: 4, done. Delta compression using up to 4 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (4/4), 303 bytes | 0 bytes/s, done. Total 4 (delta 0), reused 0 (delta 0) remote: =======> Working - apache-demo remote: remote: Sending build context to Docker daemon 3.072 kB remote: Sending build context to Docker daemon remote: Step 0 : FROM httpd:2.4 remote: ---> 4ea677a2d898 remote: Step 1 : EXPOSE 80 remote: ---> Running in 2fe3a7300cdf remote: ---> 11d40bb1d4fe remote: Removing intermediate container 2fe3a7300cdf remote: Successfully built 11d40bb1d4fe remote: apache-demo Started remote: 49154 To demo@localhost:apache-demo * [new branch] master -> master @linux:/tmp/node-js-sample> curl http://192.168.100.56:49154/ < html>< body>< h1>It works!</h1></body></html>
Para parar ou remover a aplicação basta mudar a opção state no arquivo git2docker.conf
Removendo a aplicação:
echo state=remove > git2docker.conf
Parar a aplicação:
echo state=stop > git2docker.conf
Iniciar a aplicação echo state=start > git2docker.conf
Depois de editar o arquivo basta executar as operações básicas GIT
git add --all git commit -m "build" git push git2docker master
Ou utilizar o client como nos exemplos abaixo:
./git2docker -ps | apache-demo is Up | ./git2docker -stop --name=apache-demo | apache-demo Stoped | ./git2docker -start --name=apache-demo | apache-demo Started | ./git2docker -logs --name=apache-demo 172.17.0.3 - - [16/Apr/2015:15:08:45 +0000] "GET / HTTP/1.1" 200 22698 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36" 172.17.0.3 - - [16/Apr/2015:15:08:46 +0000] "GET / HTTP/1.1" 200 22700 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36" 172.17.0.3 - - [16/Apr/2015:15:13:31 +0000] "GET / HTTP/1.1" 200 22702 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36" 172.17.0.3 - - [16/Apr/2015:15:13:32 +0000] "GET / HTTP/1.1" 200 22698 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36" 172.17.0.3 - - [16/Apr/2015:15:13:32 +0000] "GET / HTTP/1.1" 200 22702 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36" 172.17.0.3 - - [16/Apr/2015:15:13:32 +0000] "GET / HTTP/1.1" 200 22698 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36" 172.17.0.3 - - [16/Apr/2015:15:13:33 +0000] "GET / HTTP/1.1" 200 22697 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36" ./git2docker -remove --name=apache-demo Please type yes or no and then press enter: yes | apache-demo Deleted |
git2docker.conf :
state options:
| build | Detecta e compila o codigo enviado via GIT. |
| build:logs | Detecta e compila o codigo enviado via GIT e mostra os logs |
| delete or remove | Remove a aplicacao |
| stop | Para a aplicação |
| start | Inicia a aplicação |
| start:logs | Inicia a aplicação mostrando os logs |
| logs | Mostra os logs da aplicacao |
| dockerfile or Dockerfile | Força o git2docker a utilizar o dockerfile enviado via GIT |
ex: state=build
domain Option:
ex: domain=app.linux.site
pre-exec Option:
Opção utilizada quando a preciso executar um comando antes de inciar a aplicação!
ex: pre-exec=bundle exec rake db:create db:migrate db:seed
git Option:
Caso tenha sua aplicacao armazenada em um git externo basta utilizar a flag git como no exemplo abiaxo:
ex: git=https://github.com/heroku/node-js-sample
Exemplo : git2docker.conf
state=build domain=app.domain.lnx pre-exec=bundle exec rake db:create db:migrate db:seed
Utilizando um nginx proxy para efetuar o deploy da aplicação utilizando a opção domain.
Configure seu servidor DNS ou /etc/hosts para prover a resolucao de nomes dos dominios utilizados, no nosso exemplo irei utilizar o dominio .git2docker.
No arquivo git2docker.conf e possível setar qual dominio a aplicacao ira utilizar, caso essa opção não seja informada a aplicacao sera disponibilizada com o nome similar a esse: appname.username
Nginx proxy:
Criando um servico systemd:
cd /etc/systemd/system vi nginx-proxy.service [Unit] Description=nginx-proxy After=docker.service Requires=docker.service [Service] TimeoutStartSec=0 ExecStartPre=-/usr/bin/docker kill nginx-proxy ExecStartPre=-/usr/bin/docker rm nginx-proxy ExecStartPre=/usr/bin/docker pull jwilder/nginx-proxy ExecStart=/usr/bin/docker run restart=always -d --name=nginx-proxy -p 80:80 -v /var/run/docker.sock:/tmp/docker.sock jwilder/nginx-proxy [Install] WantedBy=multi-user.target
Habilitando e iniciando o serviço:
systemctl enable /etc/systemd/system/nginx-proxy.service systemctl start nginx-proxy.service
Faça algum deploy editando o arquivo git2docker.conf de cada aplicacao e adicione a opção domain.
Ex:
state=build domain=apache-demo.git2docker
Caso não tenha um servidor DNS configurado, você pode testar editando o arquivo /etc/hosts.
Ex:
192.168.100.56 apache-demo.git2docker 192.168.100.56 nodejs.git2docker . . .