Docker: mudanças entre as edições

De Wiki Cursos IFPR Foz
Ir para navegaçãoIr para pesquisar
 
(50 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 13: Linha 13:
*'''''Image''''': Uma imagem define o sistema operacional base, pacotes, ambiente, configuração, bibliotecas e tudo aquilo que for necessário para rodar uma aplicação.
*'''''Image''''': Uma imagem define o sistema operacional base, pacotes, ambiente, configuração, bibliotecas e tudo aquilo que for necessário para rodar uma aplicação.
*'''''Container''''': É uma instância criada de uma imagem rodando com comando apropriado. De uma imagem muitas instâncias podem ser criadas.
*'''''Container''''': É uma instância criada de uma imagem rodando com comando apropriado. De uma imagem muitas instâncias podem ser criadas.
*'''''Dockerfile''''': É um arquivo com os passos para construir uma imagem a partir de uma imagem base. Inicia a partir de uma imagem base, realiza atualizações do sistema, instala pacotes, ajusta o ambiente e configurações, copia arquivos relacionados a aplicação, e com um comando ''default'' opcional, roda a aplicação.  
*'''''Dockerhub''''': É um repositório de onde podemos baixar (ou subir) imagem.
*'''''Dockerhub''''': É um repositório de onde podemos baixar ou subir imagem.
*'''''Dockerfile''''': É um documento de texto que contém um conjunto de comandos de linha que um usuário pode utilizar para montar ou modificar uma imagem.


==Instalação e teste==
==Instalação e teste==


;Instalação do Docker: Ubuntu 18.04
===Instalação do Docker===
Sobre Ubuntu 20.04:
*https://docs.docker.com/install/linux/docker-ce/ubuntu/
*https://docs.docker.com/install/linux/docker-ce/ubuntu/
*https://docs.docker.com/install/linux/linux-postinstall/
*https://docs.docker.com/install/linux/linux-postinstall/
Linha 25: Linha 26:
  sudo systemctl status docker
  sudo systemctl status docker


'''''Hello World''''':
===Hello World===
  sudo docker run hello-world  
  sudo docker run hello-world  
:Quando manda rodar uma aplicação ou sistema o '''Docker''' verifica se há '''imagem''' está disponível localmente, se não, faz o '''''download''''' e em seguida '''executa'''.
:Quando manda rodar uma aplicação ou sistema o '''Docker''' verifica se há '''imagem''' está disponível localmente, se não, faz o '''''download''''' e em seguida '''executa'''.


'''Iniciar''' uma máquina '''Ubuntu''' em um contêiner:
'''Ajuda''' com comandos Docker:
  docker run -it --name ubuntu1 ubuntu
docker help
:A opção -i abre terminal interativo, a opção -d roda em segundo plano.
 
==Imagens Docker==
 
;Listar imagens: Imagens do Docker já baixadas na máquina hospedeira.
docker images
 
;Remover imagens: Remove imagens baixadas na máquina hospedeira.
docker rmi imagem
 
==Instalação de Linux no Docker==
===Linux Alpine rodando em um contêiner===
 
O '''[https://alpinelinux.org/ Alpine Linux]''' é uma distribuição '''Linux''' minimalista, simples e segura ('''Alpine''': ''Small, Simple, Secure''), ideal para dispositivos embarcados com hardware reduzido.
 
Várias aplicações que rodam no '''Docker''' utilizam o '''Alpine''' como sistema operacional base.
 
;Rodar um Linux Alpine em um contêiner:
 
  docker run -it --name alpine1 alpine ash
*O parâmetro --name é o nome do contêiner e '''alpine''' é a imagem a ser utilizada.
*A opção -i roda em modo interativo e a opção -t abre um terminal.


Colocar contêiner em '''segundo plano''':
Colocar contêiner em '''segundo plano''':
Linha 37: Linha 58:


'''Listar''' contêineres ativos:
'''Listar''' contêineres ativos:
  docker container ps (-a todos os contêineres, ativos e inativos)
  docker ps (-a todos os contêineres, ativos e inativos)
 
'''Atachar''' ao terminal do contêiner:
docker attach alpine1
 
'''Parar'''/'''reiniciar''' e '''Parar'''/'''remover''' contêiner:
docker stop alpine1
docker start alpine1
 
docker stop alpine1
docker rm alpine1
 
===Linux Ubuntu rodando em um contêiner===
 
'''Rodar''' um '''Linux Ubuntu''' em um contêiner:
docker run -it --name ubuntu1 ubuntu bash
*O parâmetro --name é o nome do contêiner e '''ubuntu''' é a imagem a ser utilizada.
*A opção -i roda em modo interativo e a opção -t abre um terminal.
 
Sai do terminal e colocar o contêiner em '''segundo plano''':
CTRL-p CTRL-q
 
'''Listar''' contêineres ativos:
docker ps (-a todos os contêineres, ativos e inativos)


'''Atachar''' ao terminal do contêiner:
'''Atachar''' ao terminal do contêiner:
  docker attach ubuntu1
  docker attach ubuntu1


'''Parar''' e '''remover''' contêiner:
Para rodar uma segunda '''instância''' do Ubuntu, pode executar:
docker run -it --name ubuntu2 ubuntu bash
 
'''Parar'''/'''reiniciar''' e '''Parar'''/'''remover''' uma instância rodando em um contêiner:
docker stop ubuntu1
docker start ubuntu1
 
  docker stop ubuntu1
  docker stop ubuntu1
  docker rm ubuntu1
  docker rm ubuntu1
<!--
===Linux Contiki rodando em um contêiner===
O '''[https://www.contiki-ng.org/ Contiki]''' é um sistema operacional dedicado a microprocessadores de baixo poder de processamento e memória, com foco nos dispositivos de IoT com comunicação sem fio e baixo consumo de energia. Suas principais características incluem métodos eficientes de alocação de memória e comunicação IP e baixo consumo de energia.
Baixar imagem do Contiki:
docker pull contiker/contiki-ng


'''Listar imagens''':
  docker images
  docker images
'''
 
Remove''' imagens
Lançar máquina Contiki:
  docker rmi imagem
docker run -it --name contiki1 contiker/contiki-ng
docker start contiki1
docker attach contik
-->
 
<!--==Dockerfile==
 
Um '''Dockerfile'''<ref>http://docs.docker.oeynet.com/engine/reference/builder/</ref> é um documento de texto que contém um conjunto de '''comandos de linha''' que um usuário pode utilizar para montar ou modificar uma '''imagem'''.
 
O comando
docker build <contexto>
constrói uma imagem a partir de um '''Dockerfile''' e de um '''contexto'''. O contexto aponta para um diretório no sistema de arquivos local (PATH) ou em um repositório GIT (URL). O contexto é processado recursivamente, incluindo todos os subdiretórios de um caminho ou um repositório e seus submódulos.
 
Por exemplo, o comando:
  docker build .
utiliza como contexto o diretório corrente. Neste diretório deve estar o arquivo de texto chamado '''Dockerfile''' (tradicionalmente o arquivo Dockerfile é chamado Dockerfile) com os comandos de linha para montar ou modificar a imagem e os demais arquivos e subdiretórios que são relacionados nos comandos do arquivo Dockerfile.-->
 
==Servidor Web Apache em um contêiner Doccker==
 
O '''Servidor Web Apache''' pode ser instalado em um contêiner '''Docker''' <ref name=httpd>https://hub.docker.com/_/httpd</ref>sem necessitar nenhuma instalação de software no computador hospedeiro a partir da execução do seguinte comando:
 
docker run -dit --name web-server -p 8080:80 -v /home/$USER/Documentos/WebServer:/usr/local/apache2/htdocs/ httpd
 
Onde:
*'''docker run''': Executa o contêiner.
*'''-dit'''
**-d (detached): Roda o contêiner em segundo plano;
**-i (interactive): Roda o contêiner em modo interativo;
**-t (tty): Roda o contêiner com um pseudo terminal TTY.
*'''-name web-server''': Cria um nome para o contêiner.
*'''-p 8080:80''': Redireciona a porta 80 do contêiner para a porta 8080 do seu computador. Se a porta 80 do hospedeiro estiver livre, não há necessidade de redirecionar.
*'''-v /home/$USER/Documentos/WebServer:/usr/local/apache2/htdocs/''': Redireciona o volume (diretório) /home/$USER/Documentos/WebServer do seu computador para o diretório /usr/local/apache2/htdocs/ do contêiner. Desse modo, basta você colocar o seu código HTML nesse diretório e ele aparecerá automaticamente dentro do seu contêiner e vice versa, sem perder o seu código quando o contêiner for desligado.
*'''httpd''': Nome da imagem que será utizada.
 
;Teste do Servidor Web:
 
Incluir o arquivo '''index.html''' no diretório:
cd
cd Documentos/WebServer
vim index.html
:Editar o arquivo com o conteúdo a ser mostrado.
Abrir o navegador com o endereço:
localhost:8080
 
===Configurações personalizadas para o Apache===
 
Para personalizar as configurações do Servidor Web Apache rodando no Docker <ref name=httpd/>,  primeiro deve-se obter a configuração atual do contêiner:
 
docker run --rm httpd cat /usr/local/apache2/conf/httpd.conf > my-httpd.conf
 
Depois de ajustada a configuração, a mesma pode ser copiada para o contêiner utilizando um arquivo '''Dockerfile''' com o conteúdo:
 
FROM httpd
COPY ./my-httpd.conf /usr/local/apache2/conf/httpd.conf


==Configuração de rede==
==Configuração de rede==
Linha 62: Linha 171:
*'''''none''''': Desabilita rede.
*'''''none''''': Desabilita rede.


===Teste de rede ''bridge'' com [https://alpinelinux.org/ Alpine Linux]===  
===Teste de rede ''bridge'' com [https://alpinelinux.org/ Alpine Linux]===


Referência:  <ref>https://docs.docker.com/network/network-tutorial-standalone/</ref>
Referência:  <ref>https://docs.docker.com/network/network-tutorial-standalone/</ref>


Lançar duas máquinas '''alpine''' no '''Docker''':
Lançar duas máquinas '''alpine''' no '''Docker''':
  docker run -dit --name alpine1 alpine ash
  docker run -it --name alpine1 alpine ash
  docker run -dit --name alpine2 alpine ash
  docker run -it --name alpine2 alpine ash


Verificar os contêineres iniciados:
Verificar os contêineres iniciados:

Edição atual tal como às 21h53min de 5 de outubro de 2023

Docker

Docker é um Contêiner, que é uma unidade padronizada de software que permite aos desenvolvedores isolar suas aplicações do meio no qual vai rodar.

A imagem de um contêiner Docker é leve, roda de forma independente e possui todas os requisitos necessários para rodar as aplicações, como códigos, ferramentas de sistema, bibliotecas e configurações.

https://www.docker.com/resources/what-container

Docker - Conceitos Básicos

Conceitos Básicos [1]:

  • Image: Uma imagem define o sistema operacional base, pacotes, ambiente, configuração, bibliotecas e tudo aquilo que for necessário para rodar uma aplicação.
  • Container: É uma instância criada de uma imagem rodando com comando apropriado. De uma imagem muitas instâncias podem ser criadas.
  • Dockerhub: É um repositório de onde podemos baixar (ou subir) imagem.
  • Dockerfile: É um documento de texto que contém um conjunto de comandos de linha que um usuário pode utilizar para montar ou modificar uma imagem.

Instalação e teste

Instalação do Docker

Sobre Ubuntu 20.04:

Verificar status da instalação:

sudo systemctl status docker

Hello World

sudo docker run hello-world 
Quando manda rodar uma aplicação ou sistema o Docker verifica se há imagem está disponível localmente, se não, faz o download e em seguida executa.

Ajuda com comandos Docker:

docker help

Imagens Docker

Listar imagens
Imagens do Docker já baixadas na máquina hospedeira.
docker images
Remover imagens
Remove imagens baixadas na máquina hospedeira.
docker rmi imagem

Instalação de Linux no Docker

Linux Alpine rodando em um contêiner

O Alpine Linux é uma distribuição Linux minimalista, simples e segura (Alpine: Small, Simple, Secure), ideal para dispositivos embarcados com hardware reduzido.

Várias aplicações que rodam no Docker utilizam o Alpine como sistema operacional base.

Rodar um Linux Alpine em um contêiner
docker run -it --name alpine1 alpine ash
  • O parâmetro --name é o nome do contêiner e alpine é a imagem a ser utilizada.
  • A opção -i roda em modo interativo e a opção -t abre um terminal.

Colocar contêiner em segundo plano:

CTRL-p CTRL-q

Listar contêineres ativos:

docker ps (-a todos os contêineres, ativos e inativos)

Atachar ao terminal do contêiner:

docker attach alpine1

Parar/reiniciar e Parar/remover contêiner:

docker stop alpine1
docker start alpine1
docker stop alpine1
docker rm alpine1

Linux Ubuntu rodando em um contêiner

Rodar um Linux Ubuntu em um contêiner:

docker run -it --name ubuntu1 ubuntu bash
  • O parâmetro --name é o nome do contêiner e ubuntu é a imagem a ser utilizada.
  • A opção -i roda em modo interativo e a opção -t abre um terminal.

Sai do terminal e colocar o contêiner em segundo plano:

CTRL-p CTRL-q

Listar contêineres ativos:

docker ps (-a todos os contêineres, ativos e inativos)

Atachar ao terminal do contêiner:

docker attach ubuntu1

Para rodar uma segunda instância do Ubuntu, pode executar:

docker run -it --name ubuntu2 ubuntu bash

Parar/reiniciar e Parar/remover uma instância rodando em um contêiner:

docker stop ubuntu1
docker start ubuntu1
docker stop ubuntu1
docker rm ubuntu1


Servidor Web Apache em um contêiner Doccker

O Servidor Web Apache pode ser instalado em um contêiner Docker [2]sem necessitar nenhuma instalação de software no computador hospedeiro a partir da execução do seguinte comando:

docker run -dit --name web-server -p 8080:80 -v /home/$USER/Documentos/WebServer:/usr/local/apache2/htdocs/ httpd

Onde:

  • docker run: Executa o contêiner.
  • -dit
    • -d (detached): Roda o contêiner em segundo plano;
    • -i (interactive): Roda o contêiner em modo interativo;
    • -t (tty): Roda o contêiner com um pseudo terminal TTY.
  • -name web-server: Cria um nome para o contêiner.
  • -p 8080:80: Redireciona a porta 80 do contêiner para a porta 8080 do seu computador. Se a porta 80 do hospedeiro estiver livre, não há necessidade de redirecionar.
  • -v /home/$USER/Documentos/WebServer:/usr/local/apache2/htdocs/: Redireciona o volume (diretório) /home/$USER/Documentos/WebServer do seu computador para o diretório /usr/local/apache2/htdocs/ do contêiner. Desse modo, basta você colocar o seu código HTML nesse diretório e ele aparecerá automaticamente dentro do seu contêiner e vice versa, sem perder o seu código quando o contêiner for desligado.
  • httpd: Nome da imagem que será utizada.
Teste do Servidor Web

Incluir o arquivo index.html no diretório:

cd
cd Documentos/WebServer
vim index.html
:Editar o arquivo com o conteúdo a ser mostrado.

Abrir o navegador com o endereço:

localhost:8080

Configurações personalizadas para o Apache

Para personalizar as configurações do Servidor Web Apache rodando no Docker [2], primeiro deve-se obter a configuração atual do contêiner:

docker run --rm httpd cat /usr/local/apache2/conf/httpd.conf > my-httpd.conf

Depois de ajustada a configuração, a mesma pode ser copiada para o contêiner utilizando um arquivo Dockerfile com o conteúdo:

FROM httpd
COPY ./my-httpd.conf /usr/local/apache2/conf/httpd.conf

Configuração de rede

O Docker usa diferentes drivers para conectividade em rede https://docs.docker.com/network/:

Teste de rede bridge com Alpine Linux

Referência: [3]

Lançar duas máquinas alpine no Docker:

docker run -it --name alpine1 alpine ash
docker run -it --name alpine2 alpine ash

Verificar os contêineres iniciados:

docker container ls

Inspecionar a configuração de rede dos contêineres:

docker network inspect bridge 
Próximo ao topo está a sub-rede da bridge (172.17.0.0/16) e o gateway (172.17.0.1) entre o host do Docker e a bridge.
Cada alpine tem seu endereçamento IP pertencente a esta bridge.

Acessar o terminal de cada alpine:

docker attach alpine1

Verificar endereçamento IP:

ip addr show

Testar conectividade:

ping 172.17.0.1 (host Docker)
ping 172.17.0.2 (alpine2)
ping google.com

Parar e remover máquinas alpine:

docker container stop alpine1 alpine2
docker container rm alpine1 alpine2

Referências

Evandro.cantu (discussão) 13h48min de 3 de abril de 2020 (-03)