Olarak etiketlenmiş bir docker görüntü me/my-image
var ve dockerhub adlı özel bir repo var me-private
.
Benim ittiğim zaman me/my-image
, ben her zaman halka repo vurmak.
İmajımı özel repoma özel olarak aktarmak için tam sözdizimi nedir?
Olarak etiketlenmiş bir docker görüntü me/my-image
var ve dockerhub adlı özel bir repo var me-private
.
Benim ittiğim zaman me/my-image
, ben her zaman halka repo vurmak.
İmajımı özel repoma özel olarak aktarmak için tam sözdizimi nedir?
Yanıtlar:
Önce resminizi aşağıdakilerle doğru bir şekilde etiketlemeniz gerekir registryhost
:
docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
Ardından docker aynı etiketi kullanarak itin.
docker push NAME[:TAG]
Misal:
docker tag 518a41981a6a myRegistry.com/myImage
docker push myRegistry.com/myImage
docker tag 518a41981a6a me-private.com/myPrivateImage && docker push me-private.com/myPrivateImage
docker login
Önce bir şey yaptığınızdan emin olun , ardından resminizi etiketleyin: docker tag 518a41981a6a me-private/myPrivateImage
ve itin:docker push me-private/myPrivateImage
Sadece üç basit adım:
docker login --username username
--password
komut geçmişinizde saklanmadığı için önerilen şifreyi çıkarırsanızdocker tag my-image username/my-repo
docker push username/my-repo
--password
şifrenizin geçmişte görünmesini istemiyorsanız bayrağı kapalı bırakın . sizi uyarır.
Önce Docker Hub hesabınıza gidin ve repoyu yapın. İşte Docker Hub hesabımın ekran görüntüsü:
Resimden, repo'mın "chuangg" olduğunu görebilirsiniz.
Şimdi repoya gidin ve resminizin adını tıklayarak gizli hale getirin. Bu yüzden benim için “chuangg / gene_commited_image” üzerine tıkladım, sonra Ayarlar -> Özel Yap'a gittim. Sonra ekrandaki talimatları izledim
DOCKER GÖRÜNTÜSÜNÜ DOCKER HUB'A NASIL YÜKLEMELİ
Yöntem # 1 = Resminizi komut satırından itme (cli)
1) docker commit <container ID> <repo name>/<Name you want to give the image>
Evet, kapsayıcı kimliği olması gerektiğini düşünüyorum. Muhtemelen resim kimliği olamaz.
Örneğin = docker commit 99e078826312 chuangg/gene_commited_image
2) docker run -it chaung/gene_commited_image
3) docker login --username=<user username> --password=<user password>
Örneğin = docker login --username=chuangg --email=gc.genechaung@gmail.com
Evet, önce giriş yapmalısınız. “Docker oturumu kapatma” kullanarak çıkış yapma
4) docker push chuangg/gene_commited_image
Yöntem # 2 = Pom.xml ve komut satırını kullanarak görüntünüzü zorlama.
Not, “build-docker” adında bir Maven Profili kullandım. Profil kullanmak istemiyorsanız, <profiles>, <profile>, and <id>build-docker</id>
öğeleri kaldırmanız yeterlidir.
Ana pom.xml 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 Terminali Docker Görüntüsünü dağıtma komutu (pom.xml dosyanızın bulunduğu dizinden) = mvn clean deploy -Pbuild-docker docker:push
Not, Yöntem # 2 ve # 3 arasındaki fark, Yöntem # 3'ün <execution>
dağıtım için fazladan olmasıdır .
Yöntem # 3 = Maven'i Docker Hub'a otomatik olarak dağıtmak için kullanma
Bu öğeyi ana pom.xml dosyasına 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ıç Terminalinizde = mvn clean install -Pbuild-docker
Maven Profiller kullanmayanlarınız için şunu yazın mvn clean install
İşte başarı mesajının ekran görüntüsü:
İşte tam pom.xml ve dizin yapımın bir 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 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" ]
Hata # 1 için çözüm = <execution>
maven konuşlandırma aşaması ile senkronize etmeyin, çünkü maven resmi 2x konuşlandırmaya çalışır ve kavanoza bir zaman damgası koyar. Bu yüzden kullandım <phase>install</phase>
.
Eğer docker kayıt defteri özel ve kendi kendine barındırılıyorsa aşağıdakileri yapmanız gerekir:
docker login <REGISTRY_HOST>:<REGISTRY_PORT>
docker tag <IMAGE_ID> <REGISTRY_HOST>:<REGISTRY_PORT>/<APPNAME>:<APPVERSION>
docker push <REGISTRY_HOST>:<REGISTRY_PORT>/<APPNAME>:<APPVERSION>
Misal :
docker login repo.company.com:3456
docker tag 19fcc4aa71ba repo.company.com:3456/myapp:0.1
docker push repo.company.com:3456/myapp:0.1
İki seçenek vardır:
Merkeze gidin ve önce havuzu oluşturun ve özel olarak işaretleyin. Sonra o repoya bastığınızda, özel olacak. Bu en yaygın yaklaşımdır.
docker hub hesabınıza giriş yapın ve global ayarlarınıza gidin . Bastığınız havuzlar için varsayılan görünürlüğünüzü ayarlamanıza izin veren bir ayar vardır. Varsayılan olarak herkese açık olarak ayarlanır, ancak gizli olarak değiştirirseniz, ittiğiniz tüm depolarınız varsayılan olarak gizli olarak işaretlenir. Hesabınızda yeterli sayıda özel depoya sahip olmanız gerektiğini, aksi takdirde planınızı yükseltinceye kadar repo kilitleneceğini unutmayın.
docker push
komuta dokunmakla meşgul . Ancak, soruyu doğru anladıysam, bu cevapların hiçbiri doğru değildir ve yukarıda Ken Cochrane tarafından gönderilen cevap kabul edilmesi gereken tek cevaptır.
Dockerhub'da depo oluşturun:
$docker tag IMAGE_ID UsernameOnDockerhub/repoNameOnDockerhub:latest
$docker push UsernameOnDockerhub/repoNameOnDockerhub:latest
Not : here "repoNameOnDockerhub": bahsettiğiniz adın bulunduğu havuzun dockerhub'da bulunması gerekir
"latest": sadece etiket
Referans: dock.docker.com
Bu konuda, bir kayıt defterini dağıtma ve yapılandırma hakkında temel bilgiler verilmektedir
Bir kayıt defterini dağıtmadan önce, ana bilgisayara Docker'ı yüklemeniz gerekir.
Kayıt defteri kapsayıcısını başlatmak için aşağıdakine benzer bir komut kullanın:
start_registry.sh
#!/bin/bash
docker run -d \
-p 5000:5000 \
--restart=always \
--name registry \
-v /data/registry:/var/lib/registry \
registry:2
ubuntu:16.04
Görüntüyü Docker Hub'dan çekin .
$ docker pull ubuntu:16.04
Görüntüyü olarak etiketleyin localhost:5000/my-ubuntu
. Bu, mevcut görüntü için ek bir etiket oluşturur. Etiketin ilk kısmı bir ana bilgisayar adı ve bağlantı noktası olduğunda, Docker bunu iterken bir kayıt defterinin konumu olarak yorumlar.
$ docker tag ubuntu:16.04 localhost:5000/my-ubuntu
Görüntüyü şu adreste çalışan yerel kayıt defterine aktarın localhost:5000
:
$ docker push localhost:5000/my-ubuntu
Yerel olarak önbelleğe alınan görüntüleri kaldırın. Bu, localhost:5000/my-ubuntu
görüntüyü kayıt defterinizden kaldırmaz .
$ docker image remove ubuntu:16.04
$ docker image remove localhost:5000/my-ubuntu
localhost:5000/my-ubuntu
Resmi yerel kayıt defterinizden çekin .
$ docker pull localhost:5000/my-ubuntu
Docs.docker.com'a göre , bu çok güvensizdir ve önerilmez .
Düzenleme daemon.json
, varsayılan konumu olan dosya, /etc/docker/daemon.json
Linux üzerinde veya C:\ProgramData\docker\config\daemon.json
Windows Server üzerinde. Eğer kullanıyorsanız Docker for Mac
veya Docker for Windows
, tıklayın Docker icon -> Preferences -> Daemon
, eklemek insecure registry
.
Eğer daemon.json
dosya yoksa, oluşturun. Dosyada başka ayar olmadığı varsayılarak, aşağıdaki içeriğe sahip olması gerekir:
{
"insecure-registries" : ["myregistrydomain.com:5000"]
}
Güvenli olmayan kayıtlar etkinleştirildiğinde Docker aşağıdaki adımları izler:
Değişikliklerin etkili olması için Docker'ı yeniden başlatın.
> docker login [OPTIONS] [SERVER]
[OPTIONS]:
-u username
-p password
Örneğin:
> docker login localhost:8080
> docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
Örneğin:
> docker tag myApp:v1 localhost:8080/myname/myApp:v1
>docker push [OPTIONS] NAME[:TAG]
Örneğin:
> docker push localhost:8080/myname/myApp:v1
Basit çalışma çözümü:
Buraya gidin https://hub.docker.com/
örneğin adını taşıyan bir ÖZEL depo oluşturmak için johnsmith/private-repository
bu NAME/REPOSITORY
görüntüyü oluştururken size görüntü için kullanacaktır.
İlk, docker login
İkinci olarak, docker build -t johnsmith/private-repository:01 .
resim oluşturmak için " " (01 benim sürüm adımdır) ve docker images
aşağıdaki sarı kutuda olduğu gibi oluşturulan resmi onaylamak için " " kullanıyorum : (üzgünüm tablo biçimini değil, sadece metin dizesini )
johnsmith / private-repository (REPOSITORY) 01 (TAG) c5f4a2861d6e (GÖRÜNTÜ ID) 2 gün önce (YARATILIŞ) 305MB (SIZE)
docker push johnsmith/private-repository:01
(Özel repo burada olacak örnek https://hub.docker.com/r/johnsmith/private-repository/ )Bitti!