Criando uma Imagem Docker com Variáveis de Ambiente - ZeTheGreat/iotNodeJS GitHub Wiki
Quando desejamos utilizar de credenciais de acesso de forma automatizada, para não expor a identidade do usuário, vale levar em consideração a utilização de variáveis de ambiente. Nesse artigo criaremos uma imagem docker com variáveis de ambiente para funcionar sua aplicação Node.js.
Para nossa satisfação, precisamos de uma imagem que contém node.js + git instalados, afinal utilizaremos node para funcionar nosso projeto e git para enviá-lo para o Github, sendo assim um componente chave para um ambiente de Integração Contínua.
Se você já possi alguns conehcimentos em Docker, é fortemente recomendado que você crie uma imagem do zero, porém neste exemplo utilizaremos uma imagem pronta construída por um usuário da comunidade do Docker Hub.
Ao perceber que nossas necessidades não foram supridas com a imagem oficial do node (por não possuir git instalado) fomos a procura de alguma imagem que continha essas duas tecnologias, com isso, encontramos essa: meetup/node-github. E será a base de criação para no própria imagem.
Para baixa-la, certifique-se de que o docker esteja intalado em sua máquina e digite o seguinte comando:
$ docker pull meetup/node-github
Após este passo se tudo acorreu conforme o planejado, a imagem deve aparecer na listagem deste comando:
$ docker images
Após feito o download precisamos acessar a imagem para dar início às configurações, para isso:
$ docker run -i -t <img-id> bash
Onde:
-
-i
: indica que a imagem irá rodar em mode de interação; -
-t
: diz que irá utilizar do terminal; -
<img-id>
: deverá ser substituído pelo ID da sua imagem que aparece nodocker images
; -
bash
: informa qual o interpretador de comandos deseja utilizar, neste caso: bash.
Ao acessar uma instancia bash, não necessariamente haverá todas as variáveis de ambiente configuradas na imagem, para que as variáveis fiquem portáveis, utilizaremos de um um arquivo, que será executado quando for necessário, este arquivo configura as variáveis de ambiente na instância local bash.
Sendo assim, escolha um local apropriado dentro de sua imagem e crie o arquivo de variáveis.
nota: O caminho e o nome do arquivo são totalmente arbitrários, tente escolher algo que faça sentido.
Com isso criaremos o arquivo env.sh
dentro de /etc
:
vim /etc/env.sh
Observação: Utilize o editor de sua preferência, também é possível criar o arquivo pelo comando touch /etc/env.sh
.
As variáveis de ambiete seguem uma sintaxe:
export CHAVE="valor"
Onde:
-
export
: exporta a variável para instância local bash; -
CHAVE
: como será chamada, em maiúsculo por convenção; -
"valor"
: valor que a variável irá receber, entre aspas.
Com isso entendido, é possível criar suas próprias variáveis de ambiente, algumas sugestões:
export USU_GIT="gituser123"
export EMAIL_GIT="[email protected]"
export PASS_GIT="gitpass123"
Em nosso projeto node, o arquivo de variáveis também irá rodar um arquivo .sh contido na estrutura do projeto.
sh -c /caminho/para/arquivo/no/projeto
-
-c
: verifica se o arquivo realmente existe.
Salve o arquivo e feche-o.
para ver se as variáveis estão de fato configuradas:
$ echo $USU_GIT
gituser123
Depois de verificado, dê um exit
para sair do container.
Antes de qualquer passo, certifique-se de que você tenha uma conta no Docker Hub criada, aproveite e crie um repositório.
Para fazer login no Docker hub:
$ docker login
Entre com suas credenciais e você estará logado.
nota: sua senha do docker hub fica salva na máquina sem nenhum tipo de segurança.
Ao sair do container, ele ficará disponível através do comando docker ps -a
, rode este comnado e pegue o CONTAINER ID
, em seguida:
$ docker commit <container-id> <usuário>/<repositorio>
Onde:
-
<container-id>
: deverá ser substituído pelo id adquirido através do comandodocker ps -a
; -
<repositório>
: deverá ser substituído pelo nome do repositório criado no docker hub; -
<usuário>
: deverá ser substituído pelo seu usuário do docker hub.
Há a possibilidade de adição de tags, com isso a sintaxe ficaria desta forma:
$ docker commit <container-id> <usuário>/<repositorio>:<tag>
Tags são uteis para versionamento.
Depois de commitado o container, verifique se o mesmo se transformou em uma imagem:
$ docker images
Se o commit for um sucesso, está na hora de envia-la para o docker hub:
$ docker push <usuário>/<repositorio>:<tag>