{"id":21301246,"url":"https://github.com/adrianomonteiroweb/docker-aplication","last_synced_at":"2026-04-18T09:34:33.873Z","repository":{"id":109834000,"uuid":"516916962","full_name":"adrianomonteiroweb/docker-aplication","owner":"adrianomonteiroweb","description":"Projeto Trybe no módulo backend de Docker, containers e osquestração para frontend, backend e testes.","archived":false,"fork":false,"pushed_at":"2022-07-23T00:23:22.000Z","size":77027,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-01-22T08:12:30.969Z","etag":null,"topics":["docker","docker-compose","docker-image","dockerfile"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/adrianomonteiroweb.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-07-23T00:07:20.000Z","updated_at":"2022-07-23T00:24:11.000Z","dependencies_parsed_at":"2023-04-22T17:05:09.582Z","dependency_job_id":null,"html_url":"https://github.com/adrianomonteiroweb/docker-aplication","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adrianomonteiroweb%2Fdocker-aplication","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adrianomonteiroweb%2Fdocker-aplication/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adrianomonteiroweb%2Fdocker-aplication/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adrianomonteiroweb%2Fdocker-aplication/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/adrianomonteiroweb","download_url":"https://codeload.github.com/adrianomonteiroweb/docker-aplication/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243772017,"owners_count":20345566,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","docker-compose","docker-image","dockerfile"],"created_at":"2024-11-21T15:44:37.473Z","updated_at":"2026-04-18T09:34:23.855Z","avatar_url":"https://github.com/adrianomonteiroweb.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Projeto Docker Todo List!\n\nProjeto Trybe no módulo backend de Docker, containers e osquestração para frontend, backend e testes. 🚀\n\n# Sumário\n\n- [Boas vindas ao repositório do projeto Docker Todo List!](#boas-vindas-ao-repositório-do-projeto-docker-todo-list)\n- [Habilidades](#habilidades)\n- [Entregáveis](#entregáveis)\n  - [O que deverá ser desenvolvido](#o-que-deverá-ser-desenvolvido)\n  - [Desenvolvimento](#desenvolvimento)\n- [Instruções para entregar seu projeto](#instruções-para-entregar-seu-projeto)\n  - [Não se esqueça de consultar as documentações!](#não-se-esqueça-de-consultar-as-documentações)\n- [Como desenvolver](#como-desenvolver)\n  - [Execução de testes unitários](#execução-de-testes-unitários)\n- [Requisitos do projeto](#requisitos-do-projeto)\n  - [Comandos docker](#comandos-docker)\n    - [1. Crie um novo container de modo interativo sem roda-lo nomeando-o como `01container` e utilizando a imagem `alpine` usando a versão `3.12`](#1-crie-um-novo-container-de-modo-interativo-sem-roda-lo-nomeando-o-como-01container-e-utilizando-a-imagem-alpine-usando-a-versão-312)\n    - [2. Inicie o container `01container`](#2-inicie-o-container-01container)\n    - [3. Liste os containers filtrando pelo nome `01container`](#3-liste-os-containers-filtrando-pelo-nome-01container)\n    - [4. Execute o comando `cat /etc/os-release` no container `01container` sem se acoplar a ele](#4-execute-o-comando-cat-etcos-release-no-container-01container-sem-se-acoplar-a-ele)\n    - [5. Remova o container `01container` que está em andamento.](#5-remova-o-container-01container-que-está-em-andamento)\n    - [6. Faça o download da imagem `nginx` com a versão `1.21.3-alpine` sem criar ou rodar um container.](#6-faça-o-download-da-imagem-nginx-com-a-versão-1213-alpine-sem-criar-ou-rodar-um-container)\n    - [7. Rode um novo container com a imagem `nginx` com a versão `1.21.3-alpine` em segundo plano nomeando-o como `02images` e mapeando sua porta padrão de acesso para porta `3000` do sistema hospedeiro.](#7-rode-um-novo-container-com-a-imagem--nginx-com-a-versão-1213-alpine-em-segundo-plano-nomeando-o-como-02images-e-mapeando-sua-porta-padrão-de-acesso-para-porta-3000-do-sistema-hospedeiro)\n    - [8. Pare o container `02images` que está em andamento.](#8-pare-o-container-02images-que-está-em-andamento)\n  - [Dockerfile](#dockerfile)\n    - [9. Gere uma build a partir do Dockerfile do `back-end` do `todo-app` nomeando a imagem para `todobackend`.](#9-gere-uma-build-a-partir-do-dockerfile-do-back-end-do-todo-app-nomeando-a-imagem-para-todobackend)\n    - [10. Gere uma build a partir do Dockerfile do `front-end` do `todo-app` nomeando a imagem para `todofrontend`.](#10-gere-uma-build-a-partir-do-dockerfile-do-front-end-do-todo-app-nomeando-a-imagem-para-todofrontend)\n    - [11.Gere uma build a partir do Dockerfile dos `testes` do `todo-app` nomeando a imagem para `todotests`.](#11gere-uma-build-a-partir-do-dockerfile-dos-testes-do-todo-app-nomeando-a-imagem-para-todotests)\n  - [Bônus](#bônus)\n    - [Docker-compose](#docker-compose)\n      - [12. Suba uma orquestração em segundo plano com o docker-compose de forma que `backend`, `frontend` e `tests` consigam se comunicar.](#12-suba-uma-orquestração-em-segundo-plano-com-o-docker-compose-de-forma-que-backend-frontend-e-tests-consigam-se-comunicar)\n- [Avisos Finais](#avisos-finais)\n\n---\n\n# Habilidades\n\nNeste projeto, você será capaz de:\n\n- Usar comandos dockers no CLI - Interface de linha de comando;\n- Criar um contêiner Docker para uma aplicação de front-end;\n- Criar um contêiner Docker para uma aplicação de back-end;\n- Criar um contêiner Docker para uma aplicação de testes;\n- Orquestrar os três contêineres utilizando o Docker compose.\n\n---\n\n# Entregáveis\n\nTemos, neste projeto, uma série de comandos com diferentes níveis de complexidade que devem ser resolvidos cada um em seu arquivo próprio.\n\n1. Leia o requisito e crie um arquivo chamado `commandN.dc` no diretório `docker-commands`, em que N é o número do desafio.\n\n2. O arquivo deve conter apenas o comando do CLI _(Interface de Linha de Comando)_ do Docker do requisito resolvido. Um exemplo de como vai ficar seu arquivo:\n\n```dc\ndocker network inspect bridge\n```\n\n3. Faça isso até finalizar todos os requisitos e depois siga as instruções de como entregar o projeto em [**Instruções para entregar seu projeto**](#instruções-para-entregar-seu-projeto).\n\n4. Os arquivos principais do projeto estão na pasta `docker`, na raiz do projeto, nele estão contidos:\n\n- Pasta `docker-commands`: Onde ficarão os comandos exigidos pelos requisitos;\n  - **⚠️ Importante: você deve assumir que essa é a pasta raiz para os comandos.**\n  - Por exemplo, se você precisa referenciar um caminho em um comando, você deve assumir que sua pasta raiz esta partindo de `./docker`\n- Pasta `todo-app`: Onde fica nossa **pseudo-aplicação**, que servirá como base para nossos `Dockerfile`s e `Compose`;\n  - **⚠️ Essa aplicação conta com um [**README.md**](./docker/todo-app/README.md) próprio, que deve ser usado como referência na criação dos scripts!**\n- A pasta `docker` deve receber o arquivo `docker-compose.yml` para orquestração de aplicações\n\n5. Para entregar o seu projeto você deverá criar um _Pull Request_ neste repositório. Este _Pull Request_ deverá conter no diretório `docker-commands` os arquivos `command01.dc`, `command02.dc` e assim por diante até o `command12.dc`, que conterão seu comando `docker` de cada requisito, respectivamente.\n\n**⚠️ É importante que seus arquivos tenham exatamente estes nomes! ⚠️**\n\n### Sobre o avaliador\n\nO avaliador cria um **container especial** para executar a avaliação de `comandos`, `Dockerfiles` e `docker-compose`.\n\nEsse container é temporário, por tanto, ao começar ou terminar os testes locais, o avaliador remove automaticamente esse mesmo container, assim como seu volume associado.\n\nO volume desse container, mapeia a pasta `./docker/` do seu projeto, para dentro dele, ou seja, a raiz desse container vai conter as pastas `./docker-commands/`, `./todo-app/` e seu arquivo `./docker-compose.yml`, quando estiver pronto.\n\nIsso significa, que se pudessemos olhar para dentro do container de avaliação, veriamos a seguinte estrutura:\n\n```bash\n.\n├── docker-commands\n└── todo-app\n    ├── back-end\n    │   └── *\n    ├── front-end\n    │   └── *\n    └── tests\n        └── *\n```\n\nPor tanto, é importante entender que os comandos docker escritos em `command*.dc` estarão rodando dentro desse container especial (e não a partir da raiz do projeto, como em projetos anteriores).\n\n---\n\n## O que deverá ser desenvolvido\n\nVocê irá \"conteinerizar\" as aplicações de frontend, backend e testes, criar uma conexão entre elas e orquestrar seu funcionamento.\n\n## Desenvolvimento\n\nCrie imagens das aplicações e os configure com o docker-compose.\n\n# Instruções para entregar seu projeto\n\n## Não se esqueça de consultar as documentações!\n\n⚠️ **Importante**:\n\nEsse projeto tem como intuito te treinar para ter mais familiaridade com a documentação de aplicações, por tanto, poderão haver alguns comandos ou atributos que não estão no course, mas que devem ser descritos no decorrer dos requisitos.\n\nNesses casos, é importante se atentar a aquilo que o requisito pede, e lembrar sempre de utilizar a [documentação oficial](https://docs-docker-com.translate.goog/engine/reference/commandline/cli/?_x_tr_sl=en\u0026_x_tr_tl=pt\u0026_x_tr_hl=pt-BR\u0026_x_tr_pto=nui) do Docker para pesquisar detalhes sobre comandos.\n\nAo criar um Dockerfile para o nosso **pseudo-aplicativo**, seu `README` (`./docker/tests/README.md`) deve servir como \"tradutor\" para os passos de execução. Lembre-se de que o `Dockerfile` é como uma receita para execução dessas aplicações.\n\nAqui, também é importante a utilização do comando `--help` no CLI (`docker \u003ccomando\u003e \u003csubcomando\u003e --help`), dado que para cada comando do docker, é possível aplicar subcomandos ou parâmetros, exemplo: `docker network --help`\n\n# Como desenvolver\n\n**⚠️ Importante ⚠️**\nPara que o avaliador funcione corretamente, é importante que a instalação do Docker (vista no dia 1) seja feita corretamente.\nAqui também é importante que o seu usuário esteja no grupo `docker` (para que não haja a necessidade de rodar comandos utilizando o `sudo`)\n\nNesse projeto, temos uma aplicação completa _(Um aplicativo de tarefas)_ que precisa ser conteinerizada para funcionar, aqui, você desenvolver os respectivos arquivos de configuração para cada frente específica: `Front-end`, `Back-end` e no nosso caso um aplicativo de teste que deve validar se as aplicações estão se comunicando.\n\n---\n\n## Execução de testes unitários\n\n⚠ **É necessário ter o Docker instalado corretamente na sua máquina para rodar os testes locais**\n\nTodos os requisitos do projeto serão testados automaticamente por meio do Jest. Basta executar o comando abaixo:\n\n```bash\nnpm test\n```\n\nVocê pode rodar um arquivo de `test` por vez, exemplo:\n\n```bash\nnpm test 01container\n```\n\n⚠ **Atenção:** ⚠\nNão utilize a função `.only` ou `.skip` após o describe. Os testes precisam rodar por completo para que seja avaliado localmente.\n\n---\n\n# Requisitos do projeto\n\n## Comandos docker\n\n#### 1. Crie um novo container de modo interativo sem roda-lo nomeando-o como `01container` e utilizando a imagem `alpine` usando a versão `3.12`\n\n- **Observações técnicas:**\n\n  - O container **não deve ser inicializado**, somente criado;\n  - O container deve estar preparado para acesso interativo;\n\n- **Dica:**\n\n  - Lembre-se aqui, que um parâmetro não é necessariamente aplicável a apenas um comando.\n\n- **O que será testado:**\n  - O container vai ter o `name`: `01container`;\n  - O container vai estar uzando a imagem `alpine` na versão `3.12`.\n\n#### 2. Inicie o container `01container`\n\n- **Observações técnicas:**\n\n  - O container que está parado, deve ser iniciado;\n  - Se o container tiver sido iniciado de modo interativo, ele deve se manter ativo ao inicia-lo.\n\n- **O que será testado:**\n  - O avaliador verificará se o container está parado;\n  - O avaliador rodará o comando;\n  - O avaliador verificará se o container está rodando.\n\n#### 3. Liste os containers filtrando pelo nome `01container`\n\n- **Dica:**\n\n  - Praticamente todo comando de listagem no Docker possui uma forma de filtragem.\n\n- **O que será testado:**\n  - Que o comando retornará uma lista com os dados corretos.\n\n#### 4. Execute o comando `cat /etc/os-release` no container `01container` sem se acoplar a ele\n\n- **Observações técnicas:**\n\n  - O container deve estar rodando, e você deve ser capaz de **executar um comando** nesse container.\n\n- **Dica:**\n\n  - É possível fazer isso sem usar o comando `attach`.\n\n- **O que será testado:**\n  - Que o comando retornará os dados corretos da `distro` no container.\n\n#### 5. Remova o container `01container` que está em andamento.\n\n- **O que será testado:**\n  - O avaliador rodará o comando 5;\n  - O avaliador validará o processo com o comando 3.\n\n#### 6. Faça o download da imagem `nginx` com a versão `1.21.3-alpine` sem criar ou rodar um container.\n\n- **O que será testado:**\n  - Que a imagem correta foi baixada;\n  - Que nenhum container foi iniciado para isso.\n\n#### 7. Rode um novo container com a imagem `nginx` com a versão `1.21.3-alpine` em segundo plano nomeando-o como `02images` e mapeando sua porta padrão de acesso para porta `3000` do sistema hospedeiro.\n\n- **O que será testado:**\n  - Que o container foi iniciado corretamente;\n  - Que é possível ter acesso ao container pelo endereço `localhost:3000`;\n  - Que a página retorna o valor esperado.\n\n#### 8. Pare o container `02images` que está em andamento.\n\n- **O que será testado:**\n  - Que não há nenhum container ativo após seu comando.\n\n## Dockerfile\n\n#### 9. Gere uma build a partir do Dockerfile do `back-end` do `todo-app` nomeando a imagem para `todobackend`.\n\n**Dica:** O comando `ADD` do Dockerfile, também pode ser utilizado para descompactar arquivos dentro do container.\n\n- **O que será testado:**\n- Se existe um arquivo `Dockerfile` em `./docker/todo-app/back-end/`:\n  - O Dockerfile deve rodar uma imagem `node` com a versão `alpine`;\n    - Lembre-se de consultar o README do `todo-app` para validar os requisitos da aplicação;\n  - Deve estar com a porta `3001` exposta;\n  - Deve adicionar o arquivo `node_modules.tar.gz` a imagem;\n  - Deve copiar todos os arquivos da pasta `back-end` para a imagem;\n  - Ao iniciar a imagem deve rodar o comando `npm start`.\n- Se ao _buildar_ o Dockerfile o nome da imagem gerada é igual a `todobackend`.\n\n#### 10. Gere uma build a partir do Dockerfile do `front-end` do `todo-app` nomeando a imagem para `todofrontend`.\n\n**Dica:** O comando `ADD` do Dockerfile, também pode ser utilizado para descompactar arquivos dentro do container.\n\n- **O que será testado:**\n  - Se existe um arquivo `Dockerfile` em `./docker/todo-app/front-end/`:\n    - O `Dockerfile` deve rodar uma imagem `node` com a versão `alpine`;\n      - Lembre-se de consultar o README do `todo-app` para validar os requisitos da aplicação;\n    - Deve estar com a porta `3000` exposta;\n    - Deve adicionar o arquivo `node_modules.tar.gz` a imagem, de maneira que ele seja extraído dentro do `container`;\n    - Deve copiar todos os arquivos da pasta `front-end` para a imagem;\n    - Ao iniciar a imagem deve rodar o comando `npm start`;\n  - Se ao _buildar_ o `Dockerfile` o nome da imagem gerada é igual a `todofrontend`.\n\n#### 11.Gere uma build a partir do Dockerfile dos `testes` do `todo-app` nomeando a imagem para `todotests`.\n\n**Dica:** O comando `ADD` do Dockerfile, também pode ser utilizado para descompactar arquivos dentro do container.\n\n**Observação**: A aplicação `todotests` só funciona corretamente se estiver dockerizada e dentro de uma rede docker configurada corretamente.\n\n- **O que será testado:**\n  - Se existe um arquivo `Dockerfile` em `./docker/todo-app/tests/`:\n    - O Dockerfile deve rodar a imagem `mjgargani/puppeteer:trybe1.0` para que os testes funcionem;\n    - Deve adicionar o arquivo `node_modules.tar.gz` a imagem;\n    - Deve copiar todos os arquivos da pasta `tests` para a imagem;\n    - Ao iniciar a imagem deve rodar o comando `npm test`;\n  - Se ao _buildar_ o Dockerfile o nome da imagem gerada é igual a `todotests`.\n\n## Bônus\n\n### Docker-compose\n\n#### 12. Suba uma orquestração em segundo plano com o docker-compose de forma que `backend`, `frontend` e `tests` consigam se comunicar.\n\n**Dica:** use as imagens já **\"buildadas\"** que foram executadas nos requisitos 9,10 e 11 para a criação do compose.\n\n- **O que será testado:**\n\n  - Se existe um arquivo `docker-compose.yml` na pasta `./docker/`:\n\n    - O docker-compose deve rodar na versão 3.\n\n  - **tests**\n\n    - O container de `todotests` deve ter como dependencia os containers `frontend` e `backend`;\n    - Deve ter uma variável de ambiente `FRONT_HOST` que recebe como valor o nome do container do `frontend`\n      - Lembrando que, dentro de uma rede docker, o host de um container é indentificado pelo seu nome.\n\n  - **front-end**\n  - O container de `todofrontend` deve rodar na porta `3000`;\n  - Deve ter como dependencia o container `backend`;\n  - Deve ter uma variável de ambiente `REACT_APP_API_HOST` que recebe como valor o nome do container do `backend`.\n\n    - Lembrando que, dentro de uma rede docker, o host de um container é indentificado pelo seu nome.\n\n  - **back-end**\n  - O container de `todobackend` deve rodar na porta `3001`\n\n- **Dica:**\n  - Consulte a documentação em `./docker/todo-app/README.md`;\n  - É possível adicionar e extrair arquivos `.tar.gz` no `Dockerfile` com apenas um comando.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadrianomonteiroweb%2Fdocker-aplication","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fadrianomonteiroweb%2Fdocker-aplication","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadrianomonteiroweb%2Fdocker-aplication/lists"}