Imagem de construção de imagem personalizada do Docker
Dockerfile
Um Dockerfile é um arquivo de texto usado para definir uma imagem Docker.Ele contém uma série de instruções e parâmetros para orientar o mecanismo Docker na construção da imagem.
Estrutura básica e sintaxe
A estrutura básica do Dockerfile é a seguinte:
# Comment
INSTRUCTION arguments
# Comment
: Comentário, usado para explicar instruções ou fornecer informações relevantes.INSTRUCTION
: diretiva, usada para especificar as operações executadas pelo mecanismo Docker.arguments
: Parâmetros da instrução, utilizados para especificar o conteúdo específico da operação.
Comandos comuns
No Dockerfile, podemos usar uma variedade de instruções para definir o processo de construção da imagem. Aqui estão algumas instruções comumente usadas:
DE
FROM
A diretiva é usada para especificar a imagem base, ou seja, a imagem da qual depende a nova imagem. Exemplo:
FROM ubuntu:latest
FROM ubuntu:latest
É uma instrução no Dockerfile FROM
, usada para especificar a imagem base na qual construir uma nova imagem. Aqui está uma explicação detalhada dos parâmetros deste comando:
ubuntu
: Este é o nome da imagem base, indicando que o sistema operacional Ubuntu é usado como imagem base. Ubuntu é uma distribuição Linux popular amplamente usada para desenvolver e implantar aplicativos.latest
: esta é uma tag para a imagem base que especifica a versão específica a ser usada. Neste exemplo,latest
significa usar a versão mais recente do Ubuntu como imagem base.
CORRER
RUN
As diretivas são usadas para executar comandos na imagem. Várias RUN
diretivas podem ser usadas para executar vários comandos. Exemplo:
RUN apt-get update && apt-get install -y package
RUN apt-get update && apt-get install -y package
É uma instrução do Dockerfile RUN
, usada para executar comandos na imagem. Aqui está uma explicação detalhada dos parâmetros deste comando:
apt-get
: Esta é uma ferramenta de gerenciamento de pacotes em sistemas Ubuntu e Debian usada para instalar, atualizar e remover pacotes de software.update
: Este éapt-get
um subcomando que atualiza a lista de pacotes para obter as informações mais recentes sobre pacotes disponíveis.&&
: Este é o operador lógico AND no Shell, usado para conectar dois comandos, e o último comando será executado somente após o comando anterior ser executado com sucesso.install
: Este éapt-get
outro subcomando usado para instalar o pacote especificado.-y
: esta éapt-get install
uma opção do comando para responder automaticamente aos prompts de confirmação durante a instalação para evitar a necessidade de confirmação manual durante a instalação.package
: Este é o nome do pacote a ser instalado.
Resumindo, RUN apt-get update && apt-get install -y package
o objetivo do comando é executar dois comandos na imagem: primeiro atualizar a lista de pacotes e, em seguida, instalar o pacote especificado e responder automaticamente ao prompt de confirmação durante o processo de instalação.
CÓPIA DE
COPY
A diretiva é usada para copiar um arquivo ou diretório do contexto de construção para um caminho especificado na imagem. Exemplo:
COPY src/ /app/
COPY src/ /app/
É uma diretiva em um Dockerfile COPY
que copia um arquivo ou diretório do contexto de construção para um caminho especificado na imagem. Aqui está uma explicação detalhada dos parâmetros deste comando:
src/
: Este é o caminho para o arquivo ou diretório de origem a ser copiado. Neste exemplo,src/
significa o diretório no contexto de construçãosrc/
, que é o diretório abaixo do diretório onde o Dockerfile está localizadosrc/
./app/
: este é o caminho de destino, especificando onde na imagem o arquivo ou diretório de origem deve ser copiado. Neste exemplo,/app/
representa o diretório na imagem/app/
.
Resumindo, COPY src/ /app/
a função do comando é copiar o diretório no contexto de construção src/
para o diretório na imagem /app/
. Desta forma, ao executar o container, você pode acessar os arquivos ou diretórios copiados na imagem.
DIRTRABALHO
WORKDIR
O comando é usado para definir o diretório de trabalho, que é o diretório padrão ao executar comandos subsequentes na imagem. Exemplo:
WORKDIR /app
WORKDIR /app
É a instrução no Dockerfile WORKDIR
, usada para definir o diretório de trabalho dentro do contêiner. Aqui está uma explicação detalhada dos parâmetros deste comando:
/app
: Este é o caminho para o diretório de trabalho a ser definido. Neste exemplo,/app
representa o diretório no diretório raiz dentro do contêinerapp
.
Resumindo, WORKDIR /app
a função do comando é definir o diretório de trabalho dentro do contêiner para /app
o diretório. Isso significa que nos comandos subsequentes, se o caminho completo não for especificado, os caminhos relativos serão /app
resolvidos em relação ao diretório. Isso facilita a manipulação e o gerenciamento de arquivos no contêiner.
EXPOR
EXPOSE
A diretiva é usada para declarar a porta que o contêiner precisa escutar durante a execução. Exemplo:
EXPOSE 8080
EXPOSE 8080
é uma diretiva em um Dockerfile EXPOSE
que declara a porta de rede que o contêiner escutará durante a execução. Aqui está uma explicação detalhada dos parâmetros deste comando:
8080
: Este é o número da porta de rede a ser declarado. Neste exemplo,8080
representa o número da porta de rede que o contêiner irá escutar.
Para resumir, EXPOSE 8080
o que o comando faz é declarar uma porta que o contêiner escutará durante a execução, 8080
para que outros contêineres ou hosts possam se comunicar com o contêiner por meio dessa porta. Esta declaração não mapeia automaticamente a porta do contentor para o anfitrião.É necessário utilizar -p
parâmetros ao executar o contentor para realizar o mapeamento da porta.
DMC
CMD
As diretivas são usadas para especificar comandos a serem executados quando o contêiner for iniciado. Várias CMD
instruções podem ser usadas, mas apenas a última entra em vigor. Exemplo:
CMD ["npm", "start"]
CMD ["npm", "start"]
É uma diretiva no Dockerfile CMD
usada para definir o comando padrão a ser executado quando o contêiner for iniciado. Aqui está uma explicação detalhada dos parâmetros deste comando:
["npm", "start"]
: Este é o comando padrão a ser executado. Neste exemplo,npm start
é um comando comum usado para iniciar um aplicativo Node.js.
Resumindo, CMD ["npm", "start"]
a função do comando é definir o comando padrão a ser executado quando o contêiner for iniciado npm start
. Isso significa que quando o contêiner for iniciado, ele executará automaticamente npm start
o comando para iniciar o aplicativo Node.js. Se outros comandos forem fornecidos ao executar o contêiner, o comando padrão será substituído.
Etapas e considerações para construir uma imagem
As etapas para construir uma imagem são as seguintes:
- Crie um novo Dockerfile e defina o processo de construção da imagem nele.
- Use o comando no terminal
docker build
para construir a imagem, especificando o caminho para o Dockerfile.
Ao construir uma imagem, você também precisa prestar atenção ao seguinte:
- Cada instrução cria uma nova camada de imagem, então tente juntar operações semelhantes para reduzir o número de camadas de imagem.
- Use mecanismos de cache apropriados para evitar downloads e instalações repetidos de dependências.
- Tente usar imagens de base oficiais ou imagens verificadas e mantidas.
Caso de exemplo
Aqui está um exemplo de Dockerfile que demonstra como construir uma imagem de um aplicativo Node.js simples:
# 使用Node.js官方基础镜像
FROM node:14
# 设置工作目录
WORKDIR /app
# 复制项目文件到镜像中
COPY package.json .
COPY package-lock.json .
# 安装依赖
RUN npm install
# 复制应用代码到镜像中
COPY . .
# 暴露应用的端口
EXPOSE 3000
# 启动应用
CMD ["npm", "start"]
Neste exemplo, primeiro FROM
especificamos a imagem base como Node.js versão 14 usando a diretiva. Em seguida, use WORKDIR
o comando para definir o diretório de trabalho /app
e copiar os arquivos do projeto para a imagem. Em seguida, use RUN
o comando para instalar as dependências e, em seguida, use COPY
o comando para copiar o código do aplicativo para a imagem. Finalmente, use EXPOSE
a diretiva para declarar a porta do aplicativo e use CMD
a diretiva para especificar o comando para iniciar o aplicativo.
Resumir
Dockerfile é o arquivo chave que define uma imagem Docker. Ao escrever um Dockerfile, podemos definir e construir uma imagem Docker personalizada para atender às necessidades específicas do aplicativo. Este artigo apresenta a estrutura básica e as instruções comuns do Dockerfile e fornece um exemplo de caso para demonstrar como construir uma imagem simples de aplicativo Node.js.
Se quiser aprender e compreender mais o uso e as técnicas mais avançadas do Dockerfile, você pode consultar os seguintes recursos:
- Documentação oficial do Docker: https://docs.docker.com/engine/reference/builder/
- Práticas recomendadas do Dockerfile: https://docs.docker.com/develop/develop-images/dockerfile_best-practices/