Docker before docker:
- chroot
- cgroups (limitação pro processo que está rodando)
- namespace (monta um ambiente isolado pro processo)
https://www.baeldung.com/linux/rootfs
Container é um processo ou um grupo de processos que usa o sistema operacional de forma isolada.
Creating a docker container for mysql
Pull MySQL image
sudo docker pull mysql
Start a MySQL container using the image, passing a password and a default database name
sudo docker run --name mysql_docker -p 33060:3306 -e MYSQL_ROOT_PASSWORD=mysql123 -e MYSQL_DATABASE=projectmanager -d mysql
Execute the mysql cli to be able to create tables, users, etc
sudo docker exec -it mysql_docker mysql -p
Dockerfile example:
FROM golang:1.22.0 AS build-stage
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY *.go ./
RUN CGO_ENABLED=0 GOOS=linux go build -o /api
FROM build-stage as run-test-stage
RUN go test -v ./...
FROM scratch as run-release-stage
WORKDIR /app
COPY --from=build-stage /api /api
EXPOSE 8080
CMD ["/api"]
Docker Compose
Example
version: '3.8'
services:
mysql_docker:
image: mysql
container_name: mysql_docker
environment:
MYSQL_ROOT_PASSWORD: mysql123
MYSQL_DATABASE: projectmanager
ports:
- "33060:3306"
restart: unless-stopped
backend:
build:
context: .
dockerfile: Dockerfile.backend
depends_on:
- mysql_docker
network_mode: "host"
To start the docker-compose run this comand in the root of the project
sudo docker-compose up -d
To see the logs of the backend container:
sudo docker-compose logs backend