Skip to content

Projeto criado para demonstrar a utilização do Docker, publicação do Docker HUB

Notifications You must be signed in to change notification settings

nathy-mesquita/Docker.Demo

Repository files navigation

API Docker Demo

Projeto criado para demonstrar a utilização do Docker, publicação do Docker HUB

Badge Open Source? Yes! .NET Visual Studio Code

Tabela de conteúdos

Sobre o Projeto

Este projeto foi desenvolvido na Formação DevOps, ministrada pelo Luis Dev. Ele visa o conhecimento de fundamentos de DevOps com foco em programadores, onde iremos gerar uma imagem da aplicação (desenvolvida em .Net 6.0) e publicá-la no docker hub.

Docker

É uma plataforma open-souse para desenvolvimento, em execusão e entrega de aplicações, escrito em Go. Permite separar aplicações de sua infra-estrutura(host), construído em um ambiente isolado e reproduzível. Funciona na minha máquina, e nas outras!

Benefícios

  • Entrega rápida de aplicações;
  • Eficiência no consumo de recursos, quando comparado a máquina virtual;
  • Mais leve e mais rápido de se iniciar a execusão de aplicações.

Containers com Docker


conteiners com docker

O Docker usa uma arquitetura cliente-servidor.

O cliente Docker conversa com o daemon do Docker, que faz o trabalho pesado de construir, executar e distribuir seus contêineres Docker.

O cliente e o daemon do Docker podem ser executados no mesmo sistema ou você pode conectar um cliente do Docker a um daemon remoto do Docker.

O cliente Docker e o daemon se comunicam usando uma API REST, em soquetes UNIX ou uma interface de rede.

Outro cliente do Docker é o Docker Compose, que permite trabalhar com aplicativos que consistem em um conjunto de contêineres.

Componentes do Docker

  • Docker Daemon
  • Docker Client
  • Docker Registries
  • Docker Objects
    • Images
    • Containers

Instalação

  • Para Windows

    • Instalar Docker Desktop on Windows, com WSL2 ou Hyper-V (que exige Windows 10 Pro) habilitados

    Instalar o WSL: https://docs.microsoft.com/pt-br/windows/wsl/install

    Esse arquivo restringe a memória consumida. Extensão .wslconfig -temos que salvar na pasta do usuário

    [wsl2]
    memory=2GB # Any size you feel like
    swap=0
    localhostForwarding=true.wslconfig
  • Para Linux

    • Instalar Docker Engine pelo site oficial
  • Para MacOs

    • Instalar Docker Descktop for Mac pelo site oficial

Documentação do do site oficial

Docker Imagens e Docker Containers

Um Docker Image é um template que permite a criação de um container Docker, através de um conjunto de instruções.

Uma analogia simples seria o de uma classe e instância:

- Uma classe contém o template, com dados e comportamentos, enquanto uma instância é um objeto real baseado nela, em memória.

- Um container é uma instância em execusão de um Doker Image.

Sobre Docker Images

  • O Docker Images podem incluir código, arquivos de configuração, bibliotecas, runtimes, e variáveis de ambiente.

  • Uma imagem pode ser utilizada em qualquer host que tenha suporte a Docker, fornecendo a portabilidade e agilidade entre ambientes.

Já containers são executados a partir de imagens, e executam em cima do sistema operacional (host), compartilhando o seu kernel.

Docker files

  • São usados para que o Docker gere iamgens a partir deles
  • Basicamente, é um arquivo de texto que contém todas as instruções necessárias para construir uma imagem
  • A imagem é construída a partir do comando
    docker build -t nomeimagem

Começando

Criando Dockerfile

Para criar um Dockerfile é simples, basta criar um arquivo com o nome `Dockerfile``

No arquivo criado iremos definir uma instrução obrigatória, que indica qual imagem será utilizada como base para ser modificada usando o FROM:

FROM mcr.microsoft.com/dotnet/aspnet:6.0-alpine

O comando acima indica que será criado uma imagem com .NET 6.0

Utilizando instrução LABEL para definir informações para a imagem como versão, descrição e autor (opicional).

LABEL version="1.0.0" description="Disponibilizando API Docker Demo" maintainer="Nathaly Mesquita<nnathalygm@gmail.com>"

Definimos as informações que eram necessárias, sendo elas: Versão (version), descrição (description) e autor/responsável (maintainer).

Copiando o projeto para a imagem. Sabemos que o dotnet armazena os seus binários no seguinte caminho: bin/Release/net6.0/publish após ter executado dotnet publish --configuration Release, utilizando a instrução COPY passando o nome do arquivo ou pasta que pretendemos copiar seguida pelo caminho onde as mesmas devem ser copiadas:

COPY bin/Release/net6.0/publish App/

Repare que estamos copiando os arquivos localizado dentro da pasta publish para o caminho do App/

O próximo passo é definir uma pasta dentro do container onde os comandos serão executados (pasta que irá conter a aplicação). Ela é a pasta que será direcionado quando acessarmos nosso container, para fazer isso podemos utilizar a instrução WORKDIRpassando a pasta:

WORKDIR /App

Por fim, definiremos o aplicativo padrão usado toda vez que um contêiner é criado a partir da imagem, usando a instrução ENTRYPOINT:

ENTRYPOINT [ "dotnet", "Docker.Demo.dll" ]

Segue o arquivo final:

FROM mcr.microsoft.com/dotnet/aspnet:6.0-alpine

LABEL version="1.0.0" description="Disponibilizando API Docker Demo" maintainer="Nathaly Mesquita<nnathalygm@gmail.com>"

COPY bin/Release/net6.0/publish App/

WORKDIR /App

ENTRYPOINT [ "dotnet", "Docker.Demo.dll" ]

Documentaçõ oficial

Construindo e rodando a imagem Docker

Abra um prompt de comando e navegue até a pasta do seu projeto. Use o seguinte comando para criar sua imagem do Docker:

docker build -t formacao-devops .

Após a execução

Use o seguinte comando para executar sua imagem do Docker:

docker run -d -p 5000:80 --name Decker.Demo formacao-devops
<comando> <parâmetro> "<porta-host>:<porta-container>" <parâmetro> 

Após a execução

Parâmetro Explicação
-d Execução do container em background
--name Nomear o container
-p Mapeamento de porta

Publicando imagem no docker hub

Primeiro crie uma conta no Docker Hub

Faça login utilizando o seu DockerID

docker login -u <seu-docker-id>

Crie um repositório no Docker Hub:

Iremos alterar o nome da TAGpara adequar com o nome do repositório criado com o seguinte comando:

docker tag <imagem-existente> <imagem-nova-repositorio-criado>

Observe que o nome da nossa imagem criada anteriomente era formacao-devopse foi criada uma nova imagem com o nome nathalymesquita/docker.demo. Execute a publicação com o seguinte comando:

docker push <imagem-nova-com-nome-do-repositorio-criado>

Como baixar uma Docker image

Para baixar uma imagem, basta utilizar o comando:

docker pull [PARAMETROS] NOME[:TAG]

No comando docker run , caso a imagem referênte ao container não exista, uma tentativa de baixar será realizada durante a execução.

Inicialmente removi todas as referências de imagens criadas desta aplicação com os seguintes comandos:

docker ps --all
docker container stop 4ca6d09c1103
docker container rm 4ca6d09c1103
docker image list
docker image rm test-image

Para utilizar a imagem publicada no docker hub utilizaremos os seguintes comandos:

docker pull nathalymesquita/docker.demo
docker run -d -p 5000:80 --name docker.hub.demo nathalymesquita/docker.demo

Resultado

Comandos básicos do docker

Abaixo segue a lista com os principais comandos do docker que utilizamos.

Comando Conteúdo
docker build -t nome_da_imagem → Gera uma imagem a partir de um Dockerfile
docker images → Lista as imagens disponíveis no host
docker run nome_da_imagem → Cria um conteiner a partir dessa imagem constrída
docker login → Registra ou faz o login em um servidor de registry
docker pull → Faz o pull de uma imagem a partir de um servidor de registry
docker push → az o push de uma imagem a partir de um servidor de registry
docker rm → Remove um ou mais containeres
docker stop → Para um container que esteja rodando
docker tag → Coloca tag em uma imagem para o repositorio

Contribuição

Contribuições são o que fazem a comunidade open source um lugar incrível para aprender, inspirar e criar. Qualquer contribuição que você fizer será muito apreciada.

  1. Faça um Fork do projeto
  2. Crie uma Branch para sua Feature (git checkout -b feature/FeatureIncrivel)
  3. Adicione suas mudanças (git add .)
  4. Comite suas mudanças (git commit -m 'Adicionando uma Feature incrível!)
  5. Faça o Push da Branch (git push origin feature/FeatureIncrivel)
  6. Abra uma Pull Request

Licença

Distribuído sob a licença MIT. Veja LICENSE para mais informações.

Contato

Nathaly Mesquita - Github - nnathalygm@gmail.com

About

Projeto criado para demonstrar a utilização do Docker, publicação do Docker HUB

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published