Artigo
· Set. 16, 2023 9min de leitura

Introdução ao Docker - Parte 2 (Docker Compose, Docker File, Docker Volume)

Olá, comunidade,

No antigo anterior, aprendemos sobre os tópicos listados abaixo:

  1. O que é o Docker?
  2. Alguns dos benefícios do Docker
  3. Como o Docker funciona?
  4. Imagem do Docker
  5. Contêiner Docker
  6. Repositório de imagens do Docker
  7. Repositório de imagens do Docker da InterSystems
  8. Instalação do Docker
  9. Comandos básicos do Docker
  10. Execução do IRIS Community Edition usando o Docker
  11. GUI do Docker Desktop

Neste artigo, vamos abordar os seguintes tópicos:

  1. Uso do arquivo do Docker Compose (um arquivo YAML)
  2. Uso do Docker file (usado para criar uma imagem do Docker)
  3. Uso do volume do Docker

Vamos começar.

1. Uso do arquivo do Docker Compose (

um arquivo YAML)

Docker Compose é uma ferramenta desenvolvida para ajudar a definir e compartilhar aplicativos de vários contêineres. Com o Compose, podemos criar um arquivo YAML para definir os serviços e, com um único comando, podemos mudar ou descartar tudo.

Uma grande vantagem de usar o Compose é a capacidade de definir sua pilha de aplicativo em um arquivo e mantê-la na raiz do repositório do projeto. Você também pode permitir facilmente que outra pessoa contribua com seu projeto. Ela só precisaria clonar seu repositório e iniciar o app compose. 

No artigo anterior, usamos o comando mencionado abaixo para criar e iniciar o contêiner com a imagem da comunidade da InterSystems:

docker run -d -p 52773:52773 intersystemsdc/iris-community 

Nesse ponto, vamos modificar esse comando e adicionar um nome de contêiner, mapear mais portas e definir a opção de reinicialização:

docker run -d -p 52773:52773 -p 53773:53773 -p 1972:1972 --name iris --restart=always intersystemsdc/iris-community

Deixe-me detalhar o comando mencionado acima para você:

#docker run command to create and start the container
docker run 
#-d -an option used to start container in deattach mode
-d 
#-p -an option is used to map the ports
-p 52773:52773 
-p 53773:53773 
-p 1972:1972 
#name of the container
--name iris 
#set the restart option to always
--restart=always 
#base image
intersystemsdc/iris-community

Crie o arquivo Compose

Na pasta raiz, crie um arquivo chamado docker-compose.yml a e escreva os comandos mencionados acima conforme indicado abaixo:

#specify docker-compose version
version: '3.6'
#services/container details
services:
  #Name of the container
  iris:
    #Base Image
    image: intersystemsdc/iris-community      
    #set restart option
    restart: always
    #port mapping
    ports:
      - 55036:1972
      - 55037:52773
      - 53773:53773

O mapeamento do comando de execução do docker e um arquivo docker-compose são ilustrados abaixo:

Um instantâneo do arquivo Docker-compose é demonstrado a seguir:

Para executar o código do arquivo docker-compose, usaremos o comando docker-compose up:

docker-compose up -d
  • -d ou --detach:  uma opção que executa o comando em segundo plano e retorna o controle ao terminal.  


O contêiner é iniciado. Vamos executar o comando "docker ps" para listar os contêineres em execução

Como você pode ver, obtemos o mesmo resultado com o arquivo docker-compose.

 

Crie e inicie vários contêineres

Com a ajuda do docker-compose, não só podemos executar vários contêineres, como também podemos organizar e adicionar mais comandos a ele.

Por exemplo, no arquivo docker-compose a seguir, executamos o contêiner MongoDB junto com o contêiner iris:

#specify docker-compose version
version: '3.6'
#services/container details
services:
  #Name of the container
  iris:
    #Base Image
    image: intersystemsdc/iris-community      
    #set restart option
    restart: always
    #port mapping
    ports:
      - 55036:1972
      - 55037:52773
      - 53773:53773
  
  #start MongoDB container
  mongodb:
    image: mongo 
    ports:
    - 27017:27017 

Vamos executar o comando docker-compose up


Ambos os contêineres MongoDB e iris foram criados e iniciados agora.

2. Docker file

O Docker pode criar imagens automaticamente ao ler as instruções de um Dockerfile. Um Dockerfile é um documento de texto que contém todos os comandos que um usuário pode chamar na linha de comando para montar uma imagem. 

Então, nossa primeira pergunta é simples. O que é um Dockerfile? É o que o Docker usa para criar a própria imagem. O Dockerfile é, basicamente, as instruções de como criar a imagem.

A vantagem de um Dockerfile em comparação com apenas armazenar a imagem binária é que as criações automáticas garantem que você tenha a versão mais recente disponível. É algo bom em termos de segurança, porque você quer garantir que não está instalando software vulnerável.


Comandos comuns do Dockerfile

Confira abaixo alguns dos comandos do Docker mais usados. Observe que todos os comandos do docker precisam estar em letra maiúscula.

FROM 

O primeiro é o comando FROM, que informa no que a imagem foi baseada. É uma abordagem de várias camadas que deixa o Docker muito eficiente e poderoso. Nesse caso, foi usada a imagem do Docker da iris-community, que faz referência a um Dockerfile mais uma vez para automatizar o processo de criação.

FROM intersystemsdc/iris-community

WORKDIR

Esse comando é usado para configurar um diretório de trabalho para copiar os arquivos.
Por exemplo, o comando mencionado abaixo configurará /opt/irisbuild como o diretório de trabalho:  

WORKDIR /opt/irisbuild

 

COPY

O comando COPY é tão simples quanto parece.  Ele copia arquivos para o contêiner.  
Geralmente, copiamos arquivos de configuração personalizados, arquivos de código-fonte de aplicativos, arquivos de dados etc.

#coping Installer.cls to a root of workdir. Don't miss the dot, here.
COPY Installer.cls .

#copy source files from src folder to src folder in workdir in the docker container.
COPY src src

#copy source files from data/fhir folder to fhirdata folder in the docker container.
COPY data/fhir fhirdata

ENV

Isso define as variáveis de ambiente, que podem ser usadas no Dockerfile e em qualquer script que chamar.
A instrução ENV define a <key> da variável de ambiente para o valor <value>

ENV USER_ID "SYSTEM"
ENV USER_PASSWORD "MANAGER"

RUN

O comando RUN é usado para executar comandos durante o processo de criação da imagem.

#here we give the rights to irisowner user and group which are run IRIS.
RUN chown ${ISC_PACKAGE_MGRUSER}:${ISC_PACKAGE_IRISGROUP} /opt/irisapp   
#start IRIS and run script in iris.script file 
RUN iris start IRIS \    
    && iris session IRIS < /tmp/iris.script

USER 

Por padrão, os contêineres são executados como raiz, o que dá a eles controle total do sistema host. Com a evolução da tecnologia de contêiner, mais opções padrão seguras podem ficar disponíveis. Por enquanto, exigir a raiz é perigoso para outras pessoas e pode não estar disponível em todos os ambientes. Sua imagem deve usar a instrução USER para especificar um usuário não raiz para os contêineres serem executados. Se o software não criar o próprio usuário, você pode criar um usuário e um grupo no Dockerfile.

#here we switch user to a root to create a folder and copy files in docker.
USER root 

WORKDIR /opt/irisapp

#switching user from root to irisowner, to copy files
USER irisowner 

COPY src src

Para mais detalhes, leia a documentação oficial do Docker

3. Volume do Docker

Um volume do Docker é um sistema de arquivos independente totalmente gerenciado pelo Docker. Ele existe como um arquivo ou diretório padrão no host onde os dados persistem.

O propósito de usar volumes do Docker é manter os dados fora do contêiner para disponibilizá-los para backup ou compartilhamento.

Os volumes do Docker dependem do sistema de arquivos do Docker e são o método preferencial de dados persistentes para contêineres e serviços do Docker. Quando um contêiner é iniciado, o Docker carrega a camada da imagem somente leitura, adiciona uma camada leitura-escrita em cima da pilha de imagem e monta volumes no sistema de arquivos do contêiner.

Usamos a sinalização -v ou --volume para que seja possível montar arquivos locais no contêiner.

Os volumes são o mecanismo preferencial para dados persistentes gerados e usados por contêineres Docker. Enquanto as montagens bind dependem da estrutura do diretório e da SO da máquina host, os volumes são totalmente gerenciados pelo Docker. Os volumes têm vários benefícios em relação às montagens bind:

  • Os volumes são mais fáceis de fazer backup ou migrar do que as montagens bind.
  • Você pode gerenciar volumes usando os comandos da CLI do Docker ou a API Docker.
  • Os volumes funcionam tanto em contêineres do Linux quanto do Windows.
  • Os volumes podem ser compartilhados com segurança entre vários contêineres.
  • Os drivers dos volumes permite o armazenamento de volumes em hosts remotos ou provedores de nuvem, para criptografar o conteúdo dos volumes ou adicionar outra funcionalidade.
  • Novos volumes podem ter o conteúdo pré-preenchido por um contêiner.
  • Os volumes no Docker Desktop têm um desempenho muito superior em relação às montagens bind de hosts Mac e Windows.

Além disso, os volumes geralmente são uma melhor opção do que os dados persistentes em uma camada de contêiner que pode ser escrita, porque um volume não aumenta o tamanho dos contêineres durante o uso. O conteúdo do volume também existe fora do ciclo de vida de um determinado contêiner.

Volumes no host Docker

Podemos mencionar volumes na seção de serviços do arquivo docker-compose.

#specify docker-compose version
version: '3.6'
#services/container details
services:
  #Name of the container
  iris:
    #Base Image
    image: intersystemsdc/iris-community      
    #set restart option
    restart: always
    #port mapping
    ports:
      - 55036:1972
      - 55037:52773
      - 53773:53773
    #create a volume
    volumes:
      - ./:/irisdev/app  

Criamos o volume irisdev/app.

 

Resumo

O Docker é uma ferramenta poderosa que permite desenvolvedores e equipes de TI criar, implantar e executar aplicativos em um ambiente conteinerizado. Ao fornecer portabilidade, consistência, escalabilidade, eficiência de recursos e segurança, o Docker facilita a implantação de aplicativos em diferentes ambientes e infraestruturas. Com a crescente popularidade da conteinerização, o Docker está se tornando uma ferramenta essencial para o desenvolvimento e a implantação de software moderno.
Neste artigo, aprendemos a usar o Docker compose (um arquivo YAML que especifica as opções de configuração para cada contêiner no aplicativo), o Docker file (usado para criar uma imagem do Docker) e o Docker volume (um mecanismo de armazenamento de dados persistente operado para compartilhar dados entre os contêineres Docker e a máquina host).

 

Obrigado pela leitura!

Discussão (0)1
Entre ou crie uma conta para continuar