Introdução ao Docker para iniciantes | Docker Tutorial #docker
Introdução ao Docker
O que é Docker?
- O vídeo apresenta uma introdução ao Docker, uma plataforma open source que facilita a criação e administração de ambientes.
- A proposta do vídeo é explicar conceitos básicos do Docker e praticar a criação de contêineres e imagens personalizadas.
Problemas que o Docker Resolve
- O problema abordado é a dificuldade de manter versões consistentes de dependências em diferentes máquinas durante o desenvolvimento.
- Um exemplo prático é dado: um desenvolvedor tem Node 16 e MySQL 5.7 instalados, mas outro membro da equipe pode ter versões diferentes, causando falhas na execução do projeto.
Vantagens do Uso de Contêineres
- Com o uso do Docker, os desenvolvedores podem rodar suas aplicações em contêineres sem precisar instalar as dependências diretamente nas máquinas.
- Apenas o Docker precisa estar instalado; os contêineres podem ser configurados para incluir todas as dependências necessárias.
Criação e Execução de Contêineres
- Para criar um contêiner, utiliza-se uma imagem base; por exemplo, uma imagem do Node pode ser usada para criar múltiplos contêineres.
- A analogia com um pen drive bootável ilustra como imagens são utilizadas para gerar instâncias (contêineres).
Personalização e Conexão com Contêineres
- É possível criar imagens personalizadas para aplicações específicas, permitindo maior flexibilidade no desenvolvimento.
- Os contêineres operam em ambientes isolados, levantando questões sobre como se conectar a eles durante o desenvolvimento.
Conexão com MySQL via Contêiner Docker
Configuração Inicial do Backend
- O backend tentará se conectar ao MySQL através da porta padrão 3306, que é a porta utilizada pelo MySQL.
- Se houver um erro de conexão, isso pode ocorrer porque o contêiner do MySQL está em um ambiente isolado e não expôs a porta necessária para acesso externo.
Ligação entre Portas
- É necessário fazer o "bind" das portas para permitir que a máquina local acesse o contêiner. A configuração deve abrir a porta 3306 do contêiner.
- Após configurar essa ligação, as requisições feitas à porta 3306 da máquina serão redirecionadas automaticamente para a mesma porta no contêiner.
Alternativas de Porta
- Não é obrigatório usar a mesma porta; por exemplo, pode-se mapear a porta 3002 da máquina para a 3306 do contêiner.
- Essa flexibilidade permite que diferentes portas sejam utilizadas conforme necessário, desde que haja uma configuração adequada de redirecionamento.
Prática com VS Code
- O apresentador sugere praticar as configurações utilizando o terminal do VS Code e menciona ter uma pasta vazia para iniciar os comandos.
- Recomenda também instalar extensões úteis como um cliente de banco de dados e uma extensão do Docker para facilitar visualizações dos contêineres.
Tentativa de Conexão ao MySQL
- O apresentador tenta se conectar ao MySQL usando uma extensão simplificada, semelhante ao MySQL Workbench.
- Ao tentar conectar-se, ocorre um erro devido à ausência do MySQL instalado na máquina local; ele explica que usará um contêiner em vez de instalação direta.
Utilização do Docker Hub
- Para rodar o MySQL em um contêiner, será necessário baixar uma imagem do Docker Hub, onde estão disponíveis várias imagens oficiais.
- O apresentador orienta sobre como encontrar e baixar a imagem oficial do MySQL no Docker Hub e menciona comandos necessários para executar essa imagem.
Comandos Necessários
- Ele destaca que o comando
docker pull mysqlé utilizado para baixar a imagem desejada.
Introdução ao Docker e Configuração do MySQL
O que são as flags no Docker?
- O apresentador explica o significado das flags no Docker, destacando que é possível encontrar praticamente todas as imagens necessárias para rodar aplicações, como Node.js e Ubuntu, diretamente no Docker Hub.
Instalação do Docker
- A instalação do Docker em sistemas Linux é descrita como simples. Para usuários de Windows e Mac, há a opção de instalar o Docker Desktop, também fácil de configurar.
Executando um Contêiner MySQL
- O comando
docker runé utilizado para iniciar um contêiner com a imagem do MySQL. É sugerido usar a flag--namepara nomear o contêiner (ex: "myMySQLcontainer").
- É necessário configurar a senha do usuário root ao iniciar o contêiner. Essa configuração pode variar entre diferentes imagens disponíveis no Docker Hub.
- Para definir variáveis de ambiente, utiliza-se a flag
-e. No caso do MySQL, a variávelMYSQL_ROOT_PASSWORDdeve ser configurada com uma senha desejada.
Baixando e Executando Imagens
- Ao especificar uma versão da imagem (ex: MySQL 5.7), basta adicionar dois pontos seguidos da versão após o nome da imagem.
- Se a imagem não estiver disponível localmente, o Docker irá baixá-la automaticamente do Docker Hub antes de executar o contêiner.
Visualizando Contêineres Ativos
- Após iniciar um contêiner, pode-se usar o comando
docker pspara listar os contêineres ativos e obter informações como ID, status e portas utilizadas.
- A interface gráfica do Docker facilita visualizar as imagens e contêineres em execução na máquina.
Parando e Reiniciando Contêineres
- Para parar um contêiner em execução, utiliza-se o comando
docker stop, podendo referenciar tanto pelo nome quanto pelo ID parcial do contêiner.
- Mesmo após parar um contêiner, ele permanece na lista dos existentes; para visualizá-los todos (ativos ou parados), usa-se
docker ps -a.
Iniciando Novamente um Contêiner Parado
- O comando
docker startpermite reiniciar um contêiner parado utilizando seu ID ou através da interface gráfica.
Essas notas oferecem uma visão geral sobre como utilizar o Docker para gerenciar imagens e contêineres com foco na configuração específica do MySQL.
Como Conectar e Configurar um Contêiner MySQL com Docker
Iniciando o Contêiner MySQL
- O comando
docker start D3é utilizado para iniciar o contêiner, que já está rodando uma instância do MySQL.
- A conexão com o banco de dados é tentada usando
localhost, com o nome de usuário como "root" e a porta 3306, mas ocorre um erro.
Problemas de Conexão
- O erro se deve à falta de ligação entre a porta da máquina local e a porta do contêiner. É necessário mapear as portas corretamente para permitir a conexão.
- O contêiner pode ser parado ou removido facilmente, permitindo reconfigurações sem necessidade de reinstalação completa.
Reconfigurando o Contêiner
- Após remover o contêiner, a imagem do MySQL permanece disponível no sistema, evitando downloads desnecessários.
- Ao usar
docker run, é importante definir variáveis de ambiente comoMYSQL_ROOT_PASSWORDe mapear as portas corretamente usando a flag-p.
Executando em Background
- A configuração das portas permite que a porta 3306 da máquina se conecte à mesma porta no contêiner. Alternativamente, outras portas podem ser utilizadas.
- A flag
-dpermite que o contêiner rode em segundo plano (background), liberando o terminal para outros comandos.
Conectando ao Banco de Dados
- Com a imagem do MySQL já baixada, o tempo para iniciar um novo contêiner é reduzido. O terminal retorna rapidamente após executar o comando.
- A conexão ao banco de dados agora é bem-sucedida utilizando as credenciais corretas. É possível criar bancos de dados normalmente.
Criando uma Aplicação React
- Para compartilhar uma aplicação React sem exigir instalação prévia do Node.js na máquina do destinatário, pode-se utilizar Docker para encapsular toda a aplicação.
- Um novo projeto React é iniciado na pasta atual usando
npx create-react-app ., demonstrando como configurar rapidamente uma nova aplicação.
Executando e Compartilhando Aplicações
- Após instalar todas as dependências necessárias, a aplicação React pode ser iniciada com
npm start, mostrando sua execução padrão sem modificações feitas até então.
Como usar Docker para rodar uma aplicação Node.js?
Criando uma imagem personalizada com Docker
- O apresentador inicia a explicação sobre como utilizar o Docker para facilitar o processo de execução de uma aplicação Node.js, especialmente quando o Node não está instalado na máquina do usuário.
- É mencionado que será criado um arquivo chamado
Dockerfile, onde serão definidas as dependências e passos necessários para rodar a aplicação.
- A imagem base escolhida é a do Node, sendo sugerida a versão "Node Alpine", que é mais leve e contém apenas funcionalidades essenciais.
- O conceito de
WORKDIRé introduzido, que define o diretório de trabalho dentro do contêiner. O apresentador cria uma pasta chamadadockerLonpara armazenar o projeto.
- O apresentador explica que ao definir o
WORKDIR, o Docker criará essa pasta dentro do contêiner, permitindo visualizar os arquivos da máquina virtualizada.
Estruturação dos arquivos no contêiner
- É discutido como escolher onde salvar os arquivos da aplicação dentro do contêiner, podendo ser em pastas como
/appou/usr/app.
- A necessidade de copiar os arquivos do projeto para dentro do contêiner é abordada, já que ao clonar um repositório Git, as pastas como
node_modulesnão são incluídas.
- Para executar a aplicação corretamente, é necessário instalar as dependências usando
npm install, pois inicialmente essas dependências não estão presentes no contêiner.
- O apresentador demonstra como copiar os arquivos
package.jsonepackage-lock.jsonpara a pasta designada no contêiner antes de instalar as dependências.
- Após garantir que os arquivos necessários foram copiados, ele menciona que agora pode-se executar o comando
npm installdentro do contêiner para instalar todas as dependências necessárias.
Finalizando a configuração da aplicação
- Uma vez instaladas as dependências, todos os outros arquivos da aplicação devem ser copiados para dentro do contêiner utilizando um comando apropriado.
- O apresentador destaca a importância de expor uma porta (porta 3000), permitindo acesso à aplicação React rodando no contêiner.
- Ele explica a diferença entre os comandos
RUNeCMD, enfatizando que o CMD deve ser usado apenas uma vez por Dockerfile e serve para iniciar a aplicação.
- Por fim, ele configura o comando final no Dockerfile usando CMD com um array contendo
"npm"e"start", preparando assim tudo para iniciar corretamente a aplicação React.
Como Criar e Executar uma Imagem Docker para um Projeto React?
Construindo a Imagem Docker
- A construção da imagem do projeto é iniciada com o comando
docker build, que utiliza o arquivo Dockerfile na raiz do projeto.
- É importante passar o ponto (.) como caminho, indicando que o Dockerfile está na raiz, e adicionar uma barra (/) ao copiar arquivos específicos.
- O uso da flag
--tagpermite nomear a imagem; neste caso, foi escolhida "meu App".
- Durante o processo de build, a imagem base do Node é baixada do Docker Hub, e as dependências são instaladas via
npm install.
- Após a conclusão do build, a nova imagem "meu App" aparece nas imagens disponíveis no computador.
Executando o Contêiner
- Para rodar um contêiner com a nova imagem, utiliza-se o comando
docker run, atribuindo um nome ao contêiner.
- A porta 3000 da máquina deve ser vinculada à porta 3000 do contêiner usando a flag
-p, garantindo que a aplicação funcione corretamente.
- A execução do contêiner com a imagem "meu App" é rápida porque já está construída localmente.
- Ao acessar localhost:3000 no navegador, confirma-se que a aplicação React está rodando dentro do contêiner sem necessidade de instalação local do Node.js.
Considerações Finais
- O vídeo conclui destacando que agora é possível trabalhar no projeto utilizando Docker. Mais detalhes sobre o uso de Docker serão abordados em vídeos futuros.