Para alguns projetos simples e únicos, você pode usar o comando docker run para executar o contêiner diretamente na linha de comando, sem criar uma imagem antecipadamente. Este é outro método de implantação simples em comparação com o uso anterior de arquivos dockerfile para executar projetos de implantação.Em relação ao método anterior de uso de arquivos dockerfile para executar implantações, consulte o seguinte artigo:
Implantação do Docker (1) - Transforme o pacote jar em uma imagem docker e inicie o contêiner
Primeiro, coloque o pacote jar e os arquivos de configuração no diretório do projeto.
Em seguida, execute o comando docker run diretamente neste diretório:
docker run -d -p 20238:20238 --name my-container-name \
-v $(pwd):/app \
-e CONFIG_FILE=/app/application.yml \
-e CONFIG_FILE_1=/app/config1.properties \
-w /app \
dockette/jdk8 java -Duser.timezone=GMT+08 -Dfile.encoding=utf-8 -jar /app/reportools-1.0.0.RELEASE.jar
Os resultados da execução são os seguintes:
Explicações relacionadas sobre comandos do docker:
①: Com o parâmetro -v, você pode montar diretórios ou arquivos do host no contêiner. No seu comando, os arquivos de configuração, arquivos de modelo e arquivos JAR do aplicativo são montados nos caminhos correspondentes do contêiner com o parâmetro -v. About -v $(pwd):/app \ é o resultado simplificado do seguinte código:
-v /mnt/docker/files/ssexcel/config:/app/config \
-v /mnt/docker/files/ssexcel/template.xlsx:/app/template.xlsx \-v /mnt/docker/files/ssexcel/reporttools-1.0.0.RELEASE.jar:/app/app.jar \
②: CONFIG_FILE é uma variável de ambiente usada para especificar o caminho do arquivo de configuração. No comando fornecido, defina a variável de ambiente CONFIG_FILE como /app/application.yml via -e CONFIG_FILE=/app/application.yml, ou seja, defina o caminho do arquivo de configuração do aplicativo como /app/application.yml. O parâmetro -e é usado para definir variáveis de ambiente dentro do contêiner. No comando, duas variáveis de ambiente CONFIG_FILE e CONFIG_FILE_1 são definidas.
-e faz parte das opções de linha de comando do Docker e é usado para definir variáveis de ambiente dentro do contêiner. É usado para passar variáveis de ambiente dentro do contêiner durante a execução do contêiner. Variáveis de ambiente na forma de pares chave-valor podem ser definidas como variáveis de ambiente dentro do contêiner usando a opção -e. Por exemplo, -e VAR_NAME=value define uma variável de ambiente chamada VAR_NAME com valor.
③: O parâmetro -d indica a execução do contêiner em modo de segundo plano (daemon). Isso permite que o contêiner continue rodando em segundo plano sem bloquear o terminal. Em seguida, o parâmetro -p 20238:20238 mapeia a porta 20238 do contêiner para a porta 20238 do host, para que os serviços dentro do contêiner possam ser acessados por meio dessa porta no host.
Por fim, dockette/jdk8 é o nome da imagem especificada e java -jar app.jar é o comando a ser executado no contêiner.
④: Se você deseja adicionar uma conexão ao contêiner da biblioteca de dados com base nisso, você pode usar a função de rede do Docker para obter comunicação entre dois contêineres, um contêiner é usado para executar o arquivo JAR do aplicativo e o outro contêiner é usado Execute o serviço MySQL. Isso permite uma melhor dissociação e gerenciamento de aplicativos e bancos de dados. Modifique o comando da seguinte forma:
Crie uma rede personalizada:
docker network create my-network
Execute o contêiner MySQL e conecte-o à rede:
docker run -d --name mysql-container --network my-network -p <MySQL端口>:3306 -e MYSQL_ROOT_PASSWORD=<密码> mysql:5.6
Substitua
<MySQL端口>
e<密码>
pela porta e senha reais do MySQL.Execute o contêiner do aplicativo e conecte-o à mesma rede:
docker run -d --name app-container --network my-network -p 20238:20238 \ -v /mnt/docker/files/ssexcel/config:/app/config \ -v /mnt/docker/files/ssexcel/template.xlsx:/app/template.xlsx \ -e CONFIG_FILE=/app/config/application.yml \ -e CONFIG_FILE_1=/app/config/config1.properties \ -e DB_HOST=mysql-container -e DB_PORT=<MySQL端口> \ -v /mnt/docker/files/ssexcel/reportools-1.0.0.RELEASE.jar:/app/app.jar \ -w /app \ openjdk:8 java -Duser.timezone=GMT+08 -Dfile.encoding=utf-8 -jar app.jar
Observe que
DB_HOST
o valor na variável de ambiente émysql-container
, que é o nome do contêiner MySQL, pois eles estão na mesma rede e podem se comunicar através do nome do contêiner.
Resumir
Existem as seguintes diferenças entre a implantação de projetos usando o comando docker run e o arquivo Dockerfile:
comando de execução do docker:
Use o comando docker run para executar o contêiner diretamente da linha de comando sem criar uma imagem antecipadamente. Os parâmetros e opções fornecidos na linha de comando definem a configuração e o comportamento de tempo de execução do contêiner. Adequado para cenários simples e não requer imagens Docker personalizadas.
Arquivo Docker:
Use um Dockerfile para definir uma imagem personalizada que contenha configuração específica e pacotes de software. O arquivo Dockerfile descreve as etapas e instruções para construir uma imagem e gera a imagem durante o processo de construção. Você pode modificar livremente o conteúdo do Dockerfile de acordo com suas necessidades, adicionar dependências, arquivos de configuração, etc. Adequado para programas ou projetos complexos que exigem imagens personalizadas e podem precisar ser implantados em vários ambientes. Configurações de conteinerização mais avançadas podem ser obtidas usando Dockerfiles, como adicionar variáveis de ambiente específicas, instalar pacotes de software necessários, configurar redes, etc. Além disso, o Dockerfile também pode ser integrado com ferramentas de CI/CD para obter integração e implantação automáticas e contínuas.
O método que você escolher usar depende de suas necessidades e cenários específicos:
- Se for apenas uma conteinerização simples e nenhuma imagem personalizada for necessária, você poderá usar
docker run
o comando. - Se o projeto for complexo, envolver vários componentes e configurações ou precisar ser implantado em ambientes diferentes, é recomendado usar o Dockerfile para construir uma imagem customizada. Isso permite melhor gerenciamento e reutilização de código e garante consistência em diferentes ambientes.
Em resumo, o comando docker run é adequado para execução simples de contêineres, enquanto Dockerfile é adequado para construir imagens personalizadas e gerenciar projetos ou aplicativos complexos. A escolha de qual método usar depende das necessidades específicas e da complexidade do projeto.