# Docker Projeto Alura ![](https://i.imgur.com/IZx2OcK.png) ### .dockerignore ```= node_modules readme.md ``` ### docker-compose.yml ```= version: '3.9' services: mongodb: image: mongo:4.4.6 container_name: meu-mongo networks: - compose-bridge alurabooks: image: aluradocker/alura-books:1.0 container_name: alurabooks networks: - compose-bridge ports: - 3000:3000 depends_on: - mongodb networks: compose-bridge: driver: bridge ``` ### Dockerfile ```= FROM node:14 WORKDIR /app-node ARG PORT_BUILD=3000 ENV PORT=$PORT_BUILD EXPOSE $PORT_BUILD COPY . . RUN npm install ENTRYPOINT npm start ``` ### index.html ```= <!DOCTYPE html> <html lang="pt-br"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width"> <title>Docker <3</title> <link rel="stylesheet" href="main.css"> </head> <body> <h1>Eu amo Docker porta 4000</h1> </body> </html> ``` ### index.js ```= const express = require('express') let app = express(); app.use(express.static(".")); app.get("/", (req,res)=>{ res.sendFile(__dirname + '/index.html') }) // app.listen("3000", ()=>{ app.listen(process.env.PORT, ()=>{ console.log("Server rodando na porta 3000") }) ``` ### main.css ```= * { margin: 0; padding: 0; } body { width: 100%; height: 100%; text-align: center; background-color: #3799ce; } h1 { color: #ffffff; font-family: "Lucida Sans", "Lucida Sans Regular", "Lucida Grande", "Lucida Sans Unicode", Geneva, Verdana, sans-serif; font-size: 5em; padding-top: 20%; } ``` ### package.json ```= { "name": "volume-exemplo", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "node ." }, "author": "", "license": "ISC", "dependencies": { "express": "^4.15.3" } } ``` https://docs.docker.com/engine/reference/builder/ - docker build -t lucianamedeiros/app-node:1.0 . - docker stop $(docker container ls -q) -> PARAR TODOS OS CONTAINERS - sudo killall docker PARAR NA FORÇA - docker run -p 8083:3000 -d lucianamedeiros/app-node:1.0 -> RODA NA PORTA 8083 DA NOSSA MAQUINA E 3000 DO CONTAINER - docker ps FOI FEITO UMA ATUALIZAÇÃO NO PROJETO - docker build -t lucianamedeiros/app-node:1.1 . - docker run -d lucianamedeiros/app-node:1.1 - docker ps FOI FEITO UMA ATUALIZAÇÃO NO PROJETO - docker build -t lucianamedeiros/app-node:1.2 . - docker run -d lucianamedeiros/app-node:1.2 - docker ps - docker run -p 9090:6000 -d lucianamedeiros/app-node:1.2 - docker ps SUBIR IMAGEM - docker push lucianamedeiros/app-node:1.2 - docker container rm $(docker container ls -aq) -> REMOVER TODOS OS CONTAINERS - docker rmi $(docker image ls -aq) --force -> REMOVER TODOS AS IMAGENS EXEMPLO BAIXANDO UBUNTU - docker run -it ubuntu bash - docker ps -s -> PARA VER O TAMANHO DO CONTAINER PARA GRAVAR LOCALMENTE E NO DOCKER AO MESMO TEMPO UTILIZANDO VOLUMES mkdir volume-docker docker run -it -v /home/luciana/volume-docker:/app ubuntu bash -> CRIANDO NOVO CONTAINER ls cd app ls touch arquivo-qualquer.txt OUTRA FORMA DE FAZER A MESMA COISA docker run -it --mount type=bind, source=/home/luciana/volume-docker, target=/app ubuntu bash PARA VER OS VOLUMES NA MAQUINA docker volume ls -> PARA VER docker volume create meu-volume -> PARA CRIAR docker run -it -v meu-volume:/app ubuntu bash cd app ls -l touch arquivo-lu.txt exit -> SAIR DO CONTAINER CRIAR OUTRO CONTAINER PARA VER SE GUARDOU O ARQUIVO docker run -it -v meu-volume:/app ubuntu bash cd app ls -l LOCAL FISICO ONDE FICA OS VOLUMES GRAVADOS /var/lib/docker/volumes docker volumes prume -> REMOVE SOMENTE OS VOLUMES QUE NAO ESTAO SENDO USADOS OUTRA FORMA - NAO FUNCIONOU NA MINHA MAQUINA docker run -it --mount source=meu-volume, target=/app ubuntu bash CRIANDO OUTRO VOLUME - NAO FUNCIONOU NA MINHA MAQUINA docker run -it --mount source=meu-novo-volume, target=/app ubuntu bash PARA VISUALIZAR OS VOLUMES CRIADOS docker volume ls GRAVAR DADOS USANDO TMPFS. CRIA A PASTA APP TEMPORARIAMENTE SOMENTE NO LINUX docker run -it --tmpfs=/app ubuntu bash OUTRA FORMA SOMENTE NO LINUX docker run -it --mount type=tmpfs destination=/app ubuntu bash REDES: PID - Prove isolamento dos processos rodando dentro do container NET - Prove isolamento das interfaces de rede IPC - Prove isolamento da comunicação entre processos e memoria compartilhada MNT - Prove isolamento do sistema de arquivos/pontos de montagem UTS - Prove isolamento do kernel. Age como se o container fosse outro host COMUNCAÇÃO DE REDES docker run -it ubuntu bash docker ps docker inspect "container_id" docker inspect 22ccfed44806 -> MOSTRA OS DADOS DA REDE docker network ls FAZER A COMUNICAÇÃO ENTRE CONTAINERS (PELA REDE) docker run -it ubuntu bash ping apt-get update apt-get install iputils-ping -y -> O -Y É PARA NÃO PEDIR CONFIRMAÇÃO NA INSTALAÇÃO OBJETIVO COMUNICAR DOIS CONTEINERS VIA HOSTNAME CRIAR UMA REDE PADRÃO docker network create --driver bridge minha-bridge DEFINIR NOME PARA OS CONTAINERS (NOME: UBUNTU1) docker run -it --name ubuntu1 --network minha-bridge ubuntu bash RESULTADO: 760d54db5b96efc23406632e1afd1382f3caf181abd4288b27fda946b44af140 EM OUTRO TERMINAL (NAO DESLIGAR O DOCKER ATIVO) docker ps -a -> PARA PEGAR O ID RESULTADO: a303c12e37f0 docker inspect a303c12e37f0 RESULTADO: "Networks": { "minha-bridge": { "IPAddress": "172.18.0.2", CRIAR OUTRO CONTAINER (NOME: PONG) docker run -d --name pong --network minha-bridge ubuntu sleep 1d -> -D PARA LIBERAR O TERMINAL E SLEEP PARA FICAR EM EXECUÇÃO POR 1 DIA RESULTADO: 1d4a80adac4b088fe4399b850e612cd593d7e477ccda7e677cb55ba7057c6256 docker ps RESULTADO: 1d4a80adac4b docker inspect 1d4a80adac4b088fe4399b850e612cd593d7e477ccda7e677cb55ba7057c6256 RESULTADO: "Networks": { "minha-bridge": { "IPAddress": "172.18.0.3", AGORA TENHO DOIS CONTAINERS ATIVOS: UBUNTU1 E PONG NO CONTAINER UBUNTU1 apt-get install update apt-get install iputils-ping -y ping pong -> NO MEU NAO FUNCIONOU UTILIZANDO A REDE NONE docker run -d --network none ubuntu sleep 1d RESULTADO: 37b3cc51bad9f9edc27461a2dec10396859104a81a40d3ae3e9b5f96fa2ffc4f docker inspect 37b3cc51bad9f9edc27461a2dec10396859104a81a40d3ae3e9b5f96fa2ffc4f RESULTADO: "Networks": { "none": { A REDE HOST REMOVE O ISOLAMENTO ENTRE CONTAINERS E O SISTEMA, ENQUANTO A REDE NONE REMOVE A INTERFACE DE REDE. *************************** EXEMPLO PRATICO COM MONGO 4.4.6 docker pull mongo:4.4.6 docker run -d --network minha-bridge --name meu-mongo mongo:4.4.6 docker run -d --network minha-bridge --name alurabooks -p 3000:3000 aluradocker/alura-books:1.0 *********************** DOCKER COMPOSE - COORDERNAÇÃO de containers configurar docker-compose.yml no terminal docker-compose up docker-compose ps -> MOSTRA OS SERVIÇOS CRIADOS docker-compose down -> INTERROMPE OS CONTAINERS docker-compose down -V -> REMOVE OS VOLUMES ###### tags: `docker` `alura`