Estudos envolvendo a criação de três containers usando docker. A idéia é a criação de um container mysql que armazenará um banco de dados, um container conectado que armazenará uma API nodejs que conecta ao banco de dados e retorna uma lista de itens e por fim um container PHP que conterá um website que busca os dados da API
Imagem do site em PHP rodando em um container, realizando consultas na API NODE em outro container que busca dados outro container com uma imagem do mysql.

O processo todo foi feito pelo Terminal do Windows, mas também tem opções para trabalhar com a interface conforme você pode ver no docker Desktop:

Instale o Doker: https://www.docker.com/products/docker-desktop Imagens para usar: https://hub.docker.com/_/node
FROM mysql
ENV MYSQL_ROOT_PASSWORD senha_db
docker build -t mysql-image -f .\db\Dockerfile .| flag | Descrição |
|---|---|
| t | Nome para a imagem (Nome aleatório) |
| f | Espcifica o docker file |
| . | pasta atual para construiri o docker |
docker image lsdocker run -d -v ${PWD}/db/data:/var/lib/mysql --rm --name mysql-container mysql-image| flag | Descrição |
|---|---|
| -d | detect => Libera o terminal |
| -v | Pasta Compartilhar:Pasta Container |
| --rm | Remover se já existir |
| --name | Nome do container |
| Nome da imagem |
docker psdocker exec -it mysql-container //bin//bash| flag | Descrição |
|---|---|
| -it | Acessar o terminal |
| Container | |
| Local do bash |
mysql -uroot -psenha_db
create database database_db;
ALTER USER 'root' IDENTIFIED WITH mysql_native_password BY 'senha_db';
flush privileges;
exit;
exitnpm initnpm install --save-dev nodemon
npm install --save express
npm install --save mysql"scripts": {
"start": "nodemon ./src/index"
}FROM node:14-slim
WORKDIR /home/node/app
CMD npm startdocker build -t node-image -f Dockerfile .docker run -d -v $pwd/:/home/node/app -p 9001:9001 --link mysql-container --rm --name node-container node-image| flag | Descrição |
|---|---|
| -p | Porta do local: Porta do container |
| --link | Link com o mysql-container |
http://localhost:9001/obter_itens
FROM php:7.2-apache
WORKDIR /var/www/htmldocker build -t php-image -f .\site\Dockerfile .docker run -d -v $pwd/site:/var/www/html -p 8888:80 --link node-container --rm --name php-container php-imagedocker stop nome-containerGet-Content db/script.sql | docker exec -i mysql-container mysql -uroot -psenha_db| flag | Descrição |
|---|---|
| Get..nt | Código para o docker executar |
| exec | Rodar comandos no container |
| -i | Modo interativo, esperar resposta |
| --name | Nome do container |
| -p | Senha do mysql do dockerfile |
Realizar build, mostrar o progresso e sem cache docker compose build --progress=plain --no-cache
docker compose -f docker-compose.yml build docker compose -f docker-compose.yml up docker compose -f docker-compose.yml down docker compose ps
docker compose exec container-name /bin/sh docker compose exec container-name /bin/bash docker exec -it container-name bash docker exec -it container-name /bin/sh docker logs container-name
===========
Install docker https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-22-04
Install make https://linuxgenie.net/install-use-make-ubuntu-22-04/
===========
sudo groupadd docker sudo usermod -aG docker $USER newgrp docker
dockerize --wait tcp://db:3306 docker exec -it app bash
docker compose ps docker compose up -d
docker exec -it app2 bash
docker pull ubuntu
docker volume prune
Executar docker com o name meuubuntuname, deatchment mapeando esse volume e rodando a imagem do ubuntu
docker run --name meuubuntuname -d -v example-volume:/app ubuntu
docker run --mount type=bind,source=$(pwd)/files,target=/home -it ubuntu bash
docker volume inspect meuvolume
docker ps -a
docker run --rm --name seraremovidoao rodar -d -v example-volume:/app ubuntu
docker run -it ubuntu bash
docker run --mount type=volume,source=ubt7,target=/src -it ubuntu bash
docker run --mount type=bind,source=$(pwd)/files,target=/src -it ubuntu bash
docker run -p 80:8080 -it ubuntu bash
mostrar onde estão echo $(pwd)
docker logs container_name
docker images
docker login
docker ps -a -q
docker rm $(docker ps -a -q) -f
fica segurando
é um comando, ele roda, não é feito para segurar e pode ser substituido ao chamar a execução
FROM ubuntu:latest
ENTRYPOINT [ "echo", "hello"]
CMD [ "world" ]
# docker build -t mycontainer -f ./Dockerfile .
# docker run --rm mycontainer # hello world
# docker run --rm mycontainer opa # hello opa
docker network ls
docker network prune
No docker, isso vai falhar se essas pastas home/documents não existirem COPY ./home/documents/config.json / COPY ./home/documents/config.json /api
é preciso especificar tudo COPY ./home/documents/package*.json /api/home/documents/ (TEM QUE TER O / PARA FUNCIONAR e copiar dentro de documenbts)
ai ele cria as subpastas
COPY --from=build /example/item/.dist /example/item/ isso vai soltar o dist dentro da pasta item
docker run -it ubuntu bash
Redes precisam de estar no mesmo docker file para se enchergarem. Em diferentes docker file eles não se enchergam
services:
uptime-kuma:
image: louislam/uptime-kuma:2
restart: unless-stopped
volumes:
- ./data:/app/data
ports:
- "3001:3001"
networks:
- testapp
api:
container_name: api
deploy:
resources:
limits:
memory: 2G
cpus: '2.0'
build:
context: ./examples
dockerfile: ./Dockerfile
ports:
- '3333:3333'
volumes:
- ./examples:/usr/src/app/
networks:
- testapp
networks:
testapp: