Gehen Sie zuerst zu Ihrem Docker Hub-Konto und machen Sie das Repo. Hier ist ein Screenshot meines Docker Hub-Kontos:
Auf dem Bild können Sie sehen, dass mein Repo "Chuangg" ist.
Gehen Sie nun in das Repo und machen Sie es privat, indem Sie auf den Namen Ihres Bildes klicken. Also habe ich für mich auf "chuangg / gene_commited_image" geklickt und bin dann zu "Einstellungen" -> "Privat machen" gegangen. Dann folgte ich den Anweisungen auf dem Bildschirm
SO LADEN SIE IHR DOCKER-BILD AUF DOCKER HUB hoch
Methode 1 = Schieben Sie Ihr Bild durch die Befehlszeile (cli)
1) docker commit <container ID> <repo name>/<Name you want to give the image>
Ja, ich denke es muss die Container ID sein. Es kann wahrscheinlich nicht die Bild-ID sein.
Zum Beispiel = docker commit 99e078826312 chuangg/gene_commited_image
2) docker run -it chaung/gene_commited_image
3) docker login --username=<user username> --password=<user password>
Zum Beispiel = docker login --username=chuangg --email=gc.genechaung@gmail.com
Ja, Sie müssen sich zuerst anmelden. Abmelden mit "Docker-Abmelden"
4) docker push chuangg/gene_commited_image
Methode 2 = Verschieben Ihres Bildes mit pom.xml und der Befehlszeile.
Beachten Sie, dass ich ein Maven-Profil namens "Build-Docker" verwendet habe. Wenn Sie kein Profil verwenden möchten, entfernen Sie einfach die <profiles>, <profile>, and <id>build-docker</id>
Elemente.
In der übergeordneten Datei pom.xml:
<profiles>
<profile>
<id>build-docker</id>
<build>
<plugins>
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.18.1</version>
<configuration>
<images>
<image>
<name>chuangg/gene_project</name>
<alias>${docker.container.name}</alias>
<!-- Configure build settings -->
<build>
<dockerFileDir>${project.basedir}\src\docker\vending_machine_emulator</dockerFileDir>
<assembly>
<inline>
<fileSets>
<fileSet>
<directory>${project.basedir}\target</directory>
<outputDirectory>.</outputDirectory>
<includes>
<include>*.jar</include>
</includes>
</fileSet>
</fileSets>
</inline>
</assembly>
</build>
</image>
</images>
</configuration>
<executions>
<execution>
<id>docker:build</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
Docker Terminal Befehl zum Bereitstellen des Docker-Images (aus dem Verzeichnis, in dem sich Ihre pom.xml befindet) = mvn clean deploy -Pbuild-docker docker:push
Beachten Sie, dass der Unterschied zwischen Methode 2 und 3 darin besteht, dass Methode 3 ein Extra <execution>
für die Bereitstellung enthält.
Methode 3 = Verwenden von Maven zur automatischen Bereitstellung auf Docker Hub
Fügen Sie dieses Zeug Ihrer übergeordneten pom.xml hinzu:
<distributionManagement>
<repository>
<id>gene</id>
<name>chuangg</name>
<uniqueVersion>false</uniqueVersion>
<layout>legacy</layout>
<url>https://index.docker.io/v1/</url>
</repository>
</distributionManagement>
<profiles>
<profile>
<id>build-docker</id>
<build>
<plugins>
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.18.1</version>
<configuration>
<images>
<image>
<name>chuangg/gene_project1</name>
<alias>${docker.container.name}</alias>
<!-- Configure build settings -->
<build>
<dockerFileDir>${project.basedir}\src\docker\vending_machine_emulator</dockerFileDir>
<assembly>
<inline>
<fileSets>
<fileSet>
<directory>${project.basedir}\target</directory>
<outputDirectory>.</outputDirectory>
<includes>
<include>*.jar</include>
</includes>
</fileSet>
</fileSets>
</inline>
</assembly>
</build>
</image>
</images>
</configuration>
<executions>
<execution>
<id>docker:build</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
<execution>
<id>docker:push</id>
<phase>install</phase>
<goals>
<goal>push</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
Wechseln Sie in das Verzeichnis C: \ Users \ Gene.docker \ und fügen Sie dieses Ihrer Datei config.json hinzu:
Geben Sie jetzt in Ihrem Docker-Schnellstart-Terminal = ein mvn clean install -Pbuild-docker
Für diejenigen unter Ihnen, die keine Maven-Profile verwenden, geben Sie einfach ein mvn clean install
Hier ist der Screenshot der Erfolgsmeldung:
Hier ist meine vollständige pom.xml und ein Screenshot meiner Verzeichnisstruktur:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.gene.app</groupId>
<artifactId>VendingMachineDockerMavenPlugin</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Maven Quick Start Archetype</name>
<url>www.gene.com</url>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.gene.sample.Customer_View</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.2</version>
<scope>test</scope>
</dependency>
</dependencies>
<distributionManagement>
<repository>
<id>gene</id>
<name>chuangg</name>
<uniqueVersion>false</uniqueVersion>
<layout>legacy</layout>
<url>https://index.docker.io/v1/</url>
</repository>
</distributionManagement>
<profiles>
<profile>
<id>build-docker</id>
<properties>
<java.docker.version>1.8.0</java.docker.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.18.1</version>
<configuration>
<images>
<image>
<name>chuangg/gene_project1</name>
<alias>${docker.container.name}</alias>
<!-- Configure build settings -->
<build>
<dockerFileDir>${project.basedir}\src\docker\vending_machine_emulator</dockerFileDir>
<assembly>
<inline>
<fileSets>
<fileSet>
<directory>${project.basedir}\target</directory>
<outputDirectory>.</outputDirectory>
<includes>
<include>*.jar</include>
</includes>
</fileSet>
</fileSets>
</inline>
</assembly>
</build>
</image>
</images>
</configuration>
<executions>
<execution>
<id>docker:build</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
<execution>
<id>docker:push</id>
<phase>install</phase>
<goals>
<goal>push</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
Hier ist mein Eclipse-Verzeichnis:
Hier ist meine Docker-Datei:
FROM java:8
MAINTAINER Gene Chuang
RUN echo Running Dockerfile in src/docker/vending_machine_emulator/Dockerfile directory
ADD maven/VendingMachineDockerMavenPlugin-1.0-SNAPSHOT.jar /bullshitDirectory/gene-app-1.0-SNAPSHOT.jar
CMD ["java", "-classpath", "/bullshitDirectory/gene-app-1.0-SNAPSHOT.jar", "com/gene/sample/Customer_View" ]
Häufiger Fehler Nr. 1:
Lösung für Fehler Nr. 1 = Synchronisieren Sie die <execution>
Bereitstellungsphase nicht mit Maven, da Maven dann 2x versucht, das Image bereitzustellen, und einen Zeitstempel auf das JAR setzt. Deshalb habe ich verwendet <phase>install</phase>
.