Atividade 01 - Docker

Subindo um container

Crie uma pasta docker com o arquivo index.html a seguir

<html>
    <head>
        <meta charset="utf-8">
        <title>Página de exemplo</title>
    </head>
    <body>
        <h2>Página de exemplo</h2>
        <p>Conteúdo da página de exemplo da atividade de docker</p>
    </body>
</html>

Entre na pasta docker

docker run -p 8080:80 -v $PWD/index.html:/usr/share/nginx/html/index.html registry.nuvem.unicamp.br/curso-kubernetes/nginx

Utilizando imagens bitnami

docker run -p 8080:8080 -v $PWD/index.html:/app/index.html registry.nuvem.unicamp.br/curso-kubernetes/bitnami-nginx

Note que a porta e a pasta dos arquivos HTML muda de um container para outro, sempre busque a documentação do container que você for utilizar.

Customizando seu container

Crie um arquivo Dockerfile com o conteúdo abaixo

FROM registry.nuvem.unicamp.br/curso-kubernetes/bitnami-nginx

COPY index.html /app/index.html

Faça uma build do seu container utilizando o Dockerfile

docker build . -t atividade1
docker run -p 8080:8080 atividade1

Utilizando um registry

Você pode enviar suas imagens customizadas para um registry, para que possa ser utilizada em outros servidores

Fazendo login no registry

docker login registry.nuvem.unicamp.br

Enviando para o registry

docker tag atividade1 registry.nuvem.unicamp.br/curso-kubernetes/atividade1
docker push registry.nuvem.unicamp.br/curso-kubernetes/atividade1

Pode-se fazer o build diretamente com o nome do registry

docker build . -t registry.nuvem.unicamp.br/curso-kubernetes/atividade1
docker push registry.nuvem.unicamp.br/curso-kubernetes/atividade1

Utilizando o docker-compose

Saia da pasta docker e crie uma pasta docker-compose

Crie um arquivo docker-compose.yaml com o conteúdo abaixo

name: "atividade-2"
services:
  web:
    image: registry.nuvem.unicamp.br/curso-kubernetes/bitnami-nginx
    ports:
    - 8080:8080
    configs:
    - source: nginx_config
      target: /opt/bitnami/nginx/conf/server_blocks/my_server_block.conf
    volumes:
    - ./index.php:/app/index.php
  php:
    image: registry.nuvem.unicamp.br/curso-kubernetes/bitnami-php-fpm
    volumes:
    - ./index.php:/app/index.php
  db:
    image: registry.nuvem.unicamp.br/curso-kubernetes/bitnami-mariadb
    environment:
      MARIADB_ROOT_PASSWORD: abc123

configs:
  nginx_config:
    file: ./my_server_block.conf

Crie um arquivo my_server_block.conf com o conteúdo abaixo

server {
  listen 0.0.0.0:8080;
  server_name _;
  root /app;
  index index.php index.html;
  location / {
    try_files $uri $uri/ /index.php$is_args$args;
  }
  location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass php:9000;
    fastcgi_index index.php;
    include fastcgi.conf;
  }
}

Crie um arquivo index.php com o conteúdo abaixo

<?php
phpinfo();

Subindo o ambiente

docker compose up -d

Desligando o ambiente

docker compose down

Projeto

  1. Baseado no git https://gitlab.unicamp.br/curso-kubernetes/code, faça um fork e crie um arquivo Dockerfile para fazer o build do seu container.

    Dicas:

    • Utilize como base a imagem registry.nuvem.unicamp.br/curso-kubernetes/python:3.11-slim.

    • Para instalar as dependencias use pip install --no-cache-dir -r requirements.txt e para rodar use python app.py

    • o Flask expoe o site na porta 5000

  2. Crie um arquivo docker-compose.yaml para fazer o deploy do seu container e do banco de dados mysql

    Dicas:

    • Utilize a imagem registry.nuvem.unicamp.br/curso-kubernetes/mysql:8.0

    • Monte um volume com o arquivo init_db.sql em /docker-entrypoint-initdb.d/ para inicializar o banco de dados

    • Consulte a documentação do container mysql para configurar as variáveis de ambiente