# Boas práticas

#### Imagem oficial

User imagens oficiais docker como imagens base para a criação dos serviços utilizados na sua aplicação.

Ao invés de pegar uma imagem base de um sistema operacional inteiro (Exemplo: `ubuntu`, `alpine`) e instalar os pacotes necessários para a execução do serviço desejado, procurar no repositório do [Docker Hub](https://hub.docker.com/) imagens oficiais na versão desejada deste serviço.

[![Captura de tela de 2024-07-02 16-08-12.png](https://documentacao.ufvjm.edu.br/uploads/images/gallery/2024-07/scaled-1680-/fw0BJnlVGr2l8dLC-captura-de-tela-de-2024-07-02-16-08-12.png)](https://documentacao.ufvjm.edu.br/uploads/images/gallery/2024-07/fw0BJnlVGr2l8dLC-captura-de-tela-de-2024-07-02-16-08-12.png)

**Exemplo: imagem docker oficial do PHP.**

#### Versões específicas

Ao se escolher a imagem docker a ser utilizada para determinado serviço, definir uma versão específica para se utilizar desta imagem.

Por padrão, quando você não especifica a `tag` da imagem a ser utilizada em uma imagem docker, você utilizará a versão `latest` desta imagem. Conforme novas versões deste serviço são desenvolvidas, a imagem docker da `tag` denominada `latest` será substituída por estas novas versões.

[![Captura de tela de 2024-07-02 16-14-35.png](https://documentacao.ufvjm.edu.br/uploads/images/gallery/2024-07/scaled-1680-/YC6U4LrAmhDMQVae-captura-de-tela-de-2024-07-02-16-14-35.png)](https://documentacao.ufvjm.edu.br/uploads/images/gallery/2024-07/YC6U4LrAmhDMQVae-captura-de-tela-de-2024-07-02-16-14-35.png)

**Imagem docker do PHP, tag latest.**

Essa situação pode se transformar em um problema, porque você poderá perder o controle sobre qual a versão do serviço será utilizado. Por exemplo, quando o desenvolvimento e testes da aplicação for realizado, a tag `latest` pode conter o serviço PHP na versão `7.3`. Num momento futuro, com o desenvolvimento de novas versões, a tag `lastest` poderá conter o serviço PHP na versão `8.0`, que pode ter problema de compatibilidade com a versão anterior e causar um funcionamento imprevisível.

#### Tamanho pequeno

Dê preferência para imagens docker de tamanho pequeno. Além da economia de recursos, prefira imagens que tenham somente os serviços essenciais para o funcionamento da aplicação a ser desenvolvida.

Se for o caso, defina as imagens docker com os pacotes necessários para cada um dos ambientes de execução da aplicação. Por exemplo, a imagem do ambiente de desenvolvimento poderá ter pacotes instalados que não são necessários no ambiente de produção.

Além dos pacotes instalados na imagem, a distribuição que foi utilizada como imagem base também influenciará no tamanho total da imagem docker.

[![Captura de tela de 2024-07-02 16-30-53.png](https://documentacao.ufvjm.edu.br/uploads/images/gallery/2024-07/scaled-1680-/5qCOzkvUqRh118eC-captura-de-tela-de-2024-07-02-16-30-53.png)](https://documentacao.ufvjm.edu.br/uploads/images/gallery/2024-07/5qCOzkvUqRh118eC-captura-de-tela-de-2024-07-02-16-30-53.png)

**Imagens docker PHP 8.3 - diferença de tamanho entre sistemas operacionais**

Quanto mais pacotes, além dos recursos necessários para seu funcionamento, amplia-se potenciais problemas de segurança e maior frequência de necessidade de atualização.

#### .dockerignore

Quando se constrói uma imagem docker, podemos especificar quais os arquivos do repositório não serão incluídos dentro da imagem. O arquivo `.dockerignore` é utilizado na mesma lógica do funcionamento do arquivo .gitignore para um repositório `git`. Adicione neste arquivo o nome ou o padrão de arquivos para serem ignorados no momento da criação da imagem docker.

#### Referências

[7 Práticas recomendadas para usar o Docker em produção](https://blog.convicti.com.br/dicas/7-praticas-recomendadas-para-usar-o-docker-em-producao/)