# Docker Projeto Alura

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