me/my-image olarak etiketlenmiş bir docker imajım var ve dockerhub üzerinde me-private adında özel bir depom var. Me/my-image'ımı push ettiğimde, her zaman public repoya ulaşıyorum.
Resmimi özel repoma özel olarak göndermek için tam sözdizimi nedir?
Önce resminizi registryhost
ile doğru şekilde etiketlemeniz gerekir:
docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
Ardından aynı etiketi kullanarak docker push yapın.
docker push NAME[:TAG]
Örnek:
docker tag 518a41981a6a myRegistry.com/myImage
docker push myRegistry.com/myImage
Önce Docker Hub hesabınıza gidin ve repo oluşturun. İşte Docker Hub hesabımın ekran görüntüsü:
Resimden, repomun "chuangg" olduğunu görebilirsiniz
Şimdi depoya gidin ve resminizin adına tıklayarak onu özel hale getirin. Benim için, "chuangg/gene_commited_image" üzerine tıkladım, sonra Ayarlar -> Özel Yap'a gittim. Sonra ekrandaki talimatları takip ettim
DOCKER GÖRÜNTÜNÜZÜ DOCKER HUB'A NASIL YÜKLERSINIZ
Yöntem #1= Resminizi komut satırı (cli) üzerinden itmek
docker commit <container ID> <repo name>/<İmaja vermek istediğiniz isim>
Evet, sanırım konteyner kimliği olmalı. Muhtemelen görüntü kimliği olamaz.
Örneğin= docker commit 99e078826312 chuangg/gene_commited_image
docker run -it chaung/gene_commited_image
docker login --username=<user username> --password=<user password>
Örneğin= docker login --username=chuangg [email protected]
Evet, önce giriş yapmanız gerekiyor. "docker logout" kullanarak oturumu kapatın
docker push chuangg/gene_commited_image
Yöntem #2= Görüntünüzü pom.xml ve komut satırını kullanarak itin.
Not, "build-docker" adlı bir Maven Profili kullandım. Profil kullanmak istemiyorsanız, <profiles>, <profile> ve <id>build-docker</id>
öğelerini kaldırmanız yeterlidir.
Üst pom.xml'nin içinde:
<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 Görüntüsünü dağıtmak için Docker Terminal Komutu (pom.xml'nizin bulunduğu dizinden)= mvn clean deploy -Pbuild-docker docker:push
Yöntem #2 ve #3 arasındaki fark, Yöntem #3'ün dağıtım için fazladan bir <execution>
içermesidir.
Yöntem #3= Docker Hub'a otomatik olarak dağıtmak için Maven'ı kullanma
Bunları ana pom.xml dosyanıza ekleyin:
<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>
C:\Users\Gene.docker\ dizinine gidin ve bunu config.json dosyanıza ekleyin:
Şimdi Docker Hızlı Başlangıç Terminalinize yazın= mvn clean install -Pbuild-docker
Maven Profilleri kullanmayanlar için mvn clean install
yazmanız yeterlidir
İşte başarı mesajının ekran görüntüsü:
İşte pom.xml dosyamın tamamı ve dizin yapımın ekran görüntüsü:
<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>
İşte benim Docker dosyam:
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" ]
Hata #1 için Çözüm= <execution>
ile maven deploy aşamasını senkronize etmeyin çünkü o zaman maven imajı 2 kez deploy etmeye çalışır ve jar üzerine bir zaman damgası koyar. Bu yüzden <phase>install</phase>
kullandım.
İki seçenek vardır:
Merkeze gidin ve önce depoyu oluşturun ve özel olarak işaretleyin. Daha sonra bu depoya push yaptığınızda depo özel olacaktır. Bu en yaygın yaklaşımdır.
docker hub hesabınıza giriş yapın ve global ayarlar bölümüne gidin. Gönderdiğiniz depolar için varsayılan görünürlüğünüzün ne olduğunu ayarlamanıza izin veren bir ayar vardır. Varsayılan olarak herkese açık olarak ayarlanmıştır, ancak bunu özel olarak değiştirirseniz, gönderdiğiniz tüm depolarınız varsayılan olarak özel olarak işaretlenecektir. Hesabınızda yeterli sayıda özel depo olması gerektiğini, aksi takdirde planınızı yükseltene kadar deponun kilitleneceğini unutmamanız önemlidir.