J'ai une image docker étiquetée sous le nom de "me/my-image", et j'ai un repo privé sur le dockerhub nommé "me-private". Lorsque je pousse mon image me/my-image, je finis toujours par toucher le dépôt public.
Quelle est la syntaxe exacte pour pousser spécifiquement mon image vers mon repo privé ?
Vous devez d'abord marquer votre image correctement avec votre registryhost
:
docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
Ensuite, faites un push docker en utilisant ce même tag.
docker push NAME[:TAG]
Exemple :
docker tag 518a41981a6a myRegistry.com/myImage
docker push myRegistry.com/myImage
Tout d'abord, allez sur votre compte Docker Hub et créez le dépôt. Voici une capture d'écran de mon compte Docker Hub : [!entrer la description de l'image ici][1]][1]
Sur l'image, vous pouvez voir que mon repo est "chuangg".
Maintenant, allez dans le repo et rendez-le privé en cliquant sur le nom de votre image. Donc, pour moi, j'ai cliqué sur "chuangg/gene_commited_image", puis je suis allé à Settings -> Make Private. Puis j'ai suivi les instructions à l'écran [!entrez la description de l'image ici][2]][2]
COMMENT TÉLÉCHARGER VOTRE IMAGE DOCKER SUR DOCKER HUB
Méthode #1= Pousser votre image par la ligne de commande (cli)
docker commit <container ID> <repo name>/<Nom que vous voulez donner à l'image>
Oui, je pense que cela doit être l'ID du conteneur. Cela ne peut probablement pas être l'ID de l'image.
Par exemple= docker commit 99e078826312 chuangg/gene_commited_image
docker run -it chaung/gene_commited_image
docker login --username=<nom d'utilisateur> --password=<mot de passe de l'utilisateur>
Par exemple= docker login --username=chuangg [email protected]
Oui, vous devez d'abord vous connecter. Déconnexion à l'aide de "docker logout"
docker push chuangg/gene_commited_image
Méthode #2= Pousser votre image en utilisant pom.xml et la ligne de commande.
Note, j'ai utilisé un profil Maven appelé "build-docker". Si vous ne voulez pas utiliser un profil, enlevez simplement les éléments <profiles>, <profile>, et <id>build-docker</id>
.
Dans le pom.xml parent :
<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>
Commande du terminal Docker pour déployer l'image Docker (depuis le répertoire où se trouve votre pom.xml)= mvn clean deploy -Pbuild-docker docker:push
Notez, la différence entre la méthode #2 et #3 est que la méthode #3 a un <execution>
supplémentaire pour le déploiement.
Méthode n°3 = Utilisation de Maven pour le déploiement automatique sur le hub de Docker.
Ajoutez ces éléments à votre pom.xml parent :
<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>
Allez dans le répertoire C:\Users\Gene.docker\ et ajoutez ceci à votre fichier config.json : [ ![entrez la description de l'image ici][3]][3]
Maintenant, dans votre terminal de démarrage rapide de Docker, tapez mvn clean install -Pbuild-docker
.
Pour ceux d'entre vous qui n'utilisent pas les profils Maven, tapez simplement mvn clean install
.
Voici la capture d'écran du message de réussite : [!entrer la description de l'image ici][4]][4]
Voici mon pom.xml complet et une capture d'écran de ma structure de répertoire :
<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>
Voici mon Dockerfile :
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" ]
Erreur commune n°1 : [!entrer la description de l'image ici][5]][5]
Solution pour l'erreur #1= Ne pas synchroniser la <execution>
avec la phase de déploiement de maven car alors maven essaie de déployer l'image 2x et met un timestamp sur le jar. C'est pourquoi j'ai utilisé <phase>install</phase>
.
[1] : https://i.stack.imgur.com/tLeZZ.png [2] : https://i.stack.imgur.com/DWVke.png [3] : https://i.stack.imgur.com/10Jur.png [4] : https://i.stack.imgur.com/Wc7Uq.png [5] : https://i.stack.imgur.com/uwQCQ.png [6] : https://i.stack.imgur.com/VGsVg.png
Il existe deux options :
Allez dans le hub, et créez d'abord le dépôt, et marquez-le comme privé. Ensuite, lorsque vous poussez vers ce dépôt, il sera privé. C'est l'approche la plus courante.
connectez-vous à votre compte docker hub, et allez dans vos [paramètres globaux][1]. Il y a un paramètre qui vous permet de définir la visibilité par défaut pour les dépôts que vous poussez. Par défaut, il est défini comme public, mais si vous le changez en privé, tous les dépôts que vous envoyez seront marqués comme privés par défaut. Il est important de noter que vous devrez avoir suffisamment de dépôts privés disponibles sur votre compte, sinon le dépôt sera verrouillé jusqu'à ce que vous mettiez votre plan à niveau.
[1] : https://registry.hub.docker.com/account/settings/global/