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 . . .
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários