Índice
fundo
Um projeto pai-filho construído com maven. Existem vários subprojetos no projeto pai. A função a ser realizada agora é empacotar um determinado projeto como uma imagem docker e, em seguida, enviá-lo para um armazém espelho Docker (armazém espelho Harbour).
dockerfile-maven-plugin
No pom pai, importe o plugin:
<pluginManagement>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>${docker.maven.plugin.version}</version>
<executions>
<execution>
<id>default</id>
<goals>
<!--如果package时不想用docker打包,就注释掉这个goal-->
<goal>build</goal>
<goal>push</goal>
</goals>
</execution>
</executions>
<configuration>
<contextDirectory>${project.basedir}</contextDirectory>
<useMavenSettingsForAuth>true</useMavenSettingsForAuth>
<repository>${docker.repostory}/${docker.registry.name}/${project.artifactId}</repository>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
</plugins>
</pluginManagement>
Dentre eles, a configuração de atributos do plug-in é a seguinte:
<properties>
<!--Harbor仓库的地址,ip:port-->
<docker.repostory>192.168.1.6:9001</docker.repostory>
<!--上传的Docker镜像前缀,此前缀一定要和Harbor中的项目名称一致,表示打包后的Docker镜像会上传到Harbor的哪个项目中-->
<docker.registry.name>fyk_project</docker.registry.name>
<docker.maven.plugin.version>1.4.10</docker.maven.plugin.version>
</properties>
Desta forma, em cada subprojeto, basta realizar algumas outras configurações personalizadas, como configurar o rótulo da imagem, conforme segue:
<finalName>fyk-config</finalName>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<configuration>
<tag>${docker.image.tag}</tag>
</configuration>
</plugin>
</plugins>
As propriedades de configuração aqui são:
<properties>
<!--Docker镜像的标签,也就是版本-->
<docker.image.tag>v1.0.0</docker.image.tag>
</properties>
Neste ponto, no IDEA, a configuração maven do dockerfile-maven-plugin está concluída. No entanto, o espelhamento e o espelhamento push não podem ser feitos neste momento e as outras duas configurações precisam ser espelhadas.
Faça uma configuração de espelho
Depois de concluir a configuração do plug-in maven do IDEA, agora começamos a fazer a imagem.
Antes de mais nada é preciso entender: a produção da imagem e a operação push são todas feitas pelo Docker, portanto o ambiente Docker deve estar instalado. Simplificando, dockerfile-maven-plugin apenas simplifica a complexidade da operação direta do Docker.Isso deve ser feito pelo Docker e deve ser feito pelo Docker.
Então, depois de entender esse ponto, você sabe que não é necessário instalar o ambiente Docker localmente, desde que exista um ambiente Docker.
Como basta ter um ambiente Docker, aqui eu utilizo o ambiente Docker no servidor (claro, você também pode usar o ambiente Docker local, usar o ambiente Docker local não requer configuração adicional, basta seguir o tutorial para instalar o Docker localmente). Para utilizar o ambiente Docker do servidor, é necessário configurar uma variável de ambiente (por padrão, o plug-in está conectado ao ambiente Docker local, ou seja, 127.0.0.1), a configuração da variável de ambiente é a seguinte, basta alterar para o seu próprio ambiente Docker do servidor (pode exigir reiniciar o computador ):
DOCKER_HOST tcp://192.168.1.6:2375
Neste momento, mais uma etapa é necessária para criar a imagem Docker. Escreva o Dockerfile: crie um Dockerfile no diretório do subprojeto (mesmo nível do arquivo pom), o conteúdo é o seguinte:
FROM frolvlad/alpine-oraclejdk8
EXPOSE 10000
ADD target/fyk-config.jar /fyk-config.jar
ENTRYPOINT exec java -jar /fyk-config.jar
Ok, agora execute o comando mvn clean package package para criar a imagem. Após a execução do comando, você pode visualizar a imagem no ambiente Docker. A seguir está a imagem que acabei de criar:
Envie a imagem para o armazém
Como o warehouse que desejo enviar é privado e requer nome de usuário e senha, preciso adicionar a seguinte configuração no arquivo de configuração maven (arquivo de configuração) :
<servers>
<server>
<id>192.168.1.6:9001</id>
<username>fyk</username>
<password>Fyk123456</password>
<configuration>
<email>[email protected]</email>
</configuration>
</server>
</servers>
O id aqui é o IP e a porta do warehouse.
Após a configuração, execute o comando:
mvn dockerfile:push
O significado deste comando é enviar a imagem para o armazém de espelhos. A imagem enviada é a imagem que acabou de ser gerada no Docker (na instância, este comando envia a imagem no Docker para o warehouse e não importa como a imagem é criada). Depois de executar este comando, verifique o armazém do Harbour:
Neste ponto, o IDEA usa o plug-in maven dockerfile-maven-plugin para criar e enviar a imagem do Docker para o armazém privado (Harbor) e ele é concluído.
pergunta
Não é possível conectar-se ao serviço Docker remoto?
Este problema pode ser causado pelo firewall (isto é simples, desligue o firewall ou abra uma parede dupla-face, se a parede não puder ser aberta, instale o Docker localmente); se a parede estiver aberta, pode ser que o Docker não tenha acesso remoto habilitado: abra
o acesso remoto do docker :
digite /lib/systemd/system/docker.service
vim /lib/systemd/system/docker.service
Encontre a linha ExecStart e modifique-a para o seguinte
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
reinicie o daemon
systemctl daemon-reload
reiniciar a janela de encaixe
systemctl restart docker
Verifique
http://ip:2375/images/json com um navegador
até agora, o acesso remoto do docker está aberto.
Durante o processo de operação, uma determinada etapa da operação falha, por exemplo, a falha solicita que o login do docker seja necessário e assim por diante.
Na verdade, esse problema não tem nada a ver com o plugin dockerfile-maven-plugin. Primeiro de tudo, entenda que o plug-in é apenas para simplificar a operação, deve ser feito pelo Docker, ou deve ser feito pelo Docker. Portanto, se houver muitos desses problemas, você pode fazer upload manualmente de uma imagem para o warehouse no ambiente docker para tentar. Se o upload for bem-sucedido, então, de acordo com o método descrito neste artigo, tudo deverá ser bem-sucedido. Se o upload manual falhar, provavelmente há algo errado com seu ambiente. Por exemplo, se o login do docker for solicitado, basta fazer login. Para perguntas específicas, você pode consultar outros materiais novamente.
Erro: Obtenha https://192.168.1.6:9001/v2/: http: o servidor deu resposta HTTP ao cliente HTTPS
No arquivo do ambiente Docker (no servidor): /etc/docker/daemon.json, adicione:
"inseguro - registros":["192.168.1.6:9001"]
da seguinte forma: