---
# System prepended metadata

title: Docker Projeto Alura
tags: [docker, alura]

---

# 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` 