Personalizando imagens no Docker Hub

Personalizando imagens no Docker Hub

Neste artigo vou abordar como efetuar a criação de uma imagem personalizada no Docker. De forma bem resumida, o objetivo aqui é obtermos uma imagem existente, personaliza-la de acordo com a necessidade e depois envia-la para um repositório privado no Docker Hub.

Então vamos lá, o primeiro passo é usar uma máquina que esteja com o Docker instalado e operacional. Com isso, podemos iniciar a preparação do arquivo Dockerfile. O meu arquivo está bem simples, pois preciso apenas de uma imagem leve que contenha o Apache e por isso escolhi o Alpine Linux. Então a primeira linha está obtendo a imagem do Docker Hub e a segunda está copiando o conteúdo da pasta thumbs do meu servidor local para dentro do container.

FROM httpd:alpine3.19
COPY ./thumbs/ /usr/local/apache2/htdocs/

Agora basta executar o build com o nome da imagem que voce quer criar. É necessário executar este comando no mesmo diretório do Dockerfile que criamos anteriormente.

docker build -t ricardoconzatti/homer-web:1.0 .

Valide que a imagem foi criada e está sendo exibida corretamente, use o comando docker images. Além disso, é interessante criar um container com a nova imagem e garantir que tudo está de acordo.

docker run --name web -p 80:80 -d ricardoconzatti/homer-web:1.0

Se tudo estiver certo, então podemos enviar a nova imagem para o Docker Hub. Para isso, é necessário possuir um repositório lá, tanto faz se é privado ou público. E antes de usarmos o push, garanta que já fez login no Docker Hub utilizando o comando docker login.

docker push ricardoconzatti/homer-web:1.0

Se nenhum erro foi exibido, então a sua imagem personalizada foi enviada para o seu repositório no Docker Hub e já está disponivel para ser utilizada.

Pronto, agora toda vez que você quiser usar o container que você personalizou, basta chamar a imagem seguindo este padrão: usuário/repositório:versão. No meu caso, ficou assim docker pull ricardoconzatti/homer-web:1.0.

O artigo poderia terminar por aqui, mas já que estou brincando com isso, vou mostrar um outro exemplo de Dockerfile, um pouco mais complexo. Este utiliza uma imagem do Ubuntu e além do Apache, possui também o PHP e MySQL

FROM ubuntu:latest

RUN apt-get update && \
    DEBIAN_FRONTEND="noninteractive" apt-get install -y apache2 php mysql-server php-mysql && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

RUN rm /var/www/html/index.html

COPY ./thumbs/ /var/www/html/

RUN service mysql start && mysql < /var/www/html/setup.sql

RUN rm /var/www/html/setup.sql

EXPOSE 80

CMD service mysql start && /usr/sbin/apache2ctl -D FOREGROUND

Lembrando que toda a configuração que a minha aplicação precisa para funcionar corretamente deve ser realizada no Dockerfile. Neste caso, tenho algumas configurações especificas no banco de dados. Criei um arquivo chamado setup.sql para realizar a criação do banco de dados, tabela e usuário.

CREATE DATABASE IF NOT EXISTS homer_db;
USE homer_db;

CREATE TABLE IF NOT EXISTS thumbs (
    code INT AUTO_INCREMENT PRIMARY KEY,
    status VARCHAR(50),
    date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE USER 'homer'@'localhost' IDENTIFIED BY 'homerJayS123';
GRANT ALL PRIVILEGES ON homer_db.thumbs TO 'homer'@'localhost';
FLUSH PRIVILEGES;

Agora basta executar o build, depois criar um container com a nova imagem para garantir que tudo está OK e por fim apenas enviar para o meu repositório no Docker Hub. Estou usando a tag 2.0 para diferenciar da anterior.

docker build -t ricardoconzatti/homer-web:2.0 .

docker run --name web -p 80:80 -d ricardoconzatti/homer-web:2.0

docker push ricardoconzatti/homer-web:2.0

É isso aí, até a próxima!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *