Docker görüntüsü özel bir depoya nasıl aktarılır


418

Olarak etiketlenmiş bir docker görüntü me/my-imagevar 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?



1
Bağlandığınız web sayfasında "özel" kelimesi bile yer almıyor.
Martin Andersson

Dışarı bu bir atın Docker özel depo yayımlamak
Sylhare

Yanıtlar:


617

Ö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

1
yani, bu görüntü ile: 518a41981a6a, bana özel repo gitmek için gerçek etiket sözdizimi nedir, lütfen?
Eugene Goldberg

10
docker tag 518a41981a6a me-private.com/myPrivateImage && docker push me-private.com/myPrivateImage
Abdullah Jibaly

2
Yukarıdaki cevabımda da bazı sözdizimi sorunlarını çözdüm. Ayrıca, bir kayıt defterine bastığınızda fyi, görüntü kimliği değil gerçek bir görüntü adı kullanmanız gerekir.
Abdullah Jibaly

nedense görüntü hala özel yerine genel dockerhub kayıt defterine gider. Sadece açıklama için - özel kayıt defterim dockerhub'da. Görüntüyü etiketledim ve itmeyi yaptım, ancak geri bildirim tüm katmanların zaten itildiğini gösteriyor, bu da görüntünün ilk kez özel kayıt defterine gitmesi durumunda geçerli olmayacaktı
Eugene Goldberg

11
Özel bir dockerhub kayıt defteri kullanıyorsanız, oldukça basit olmalıdır. docker loginÖnce bir şey yaptığınızdan emin olun , ardından resminizi etiketleyin: docker tag 518a41981a6a me-private/myPrivateImageve itin:docker push me-private/myPrivateImage
Abdullah Jibaly

214

Sadece üç basit adım:

  1. docker login --username username

    • --passwordkomut geçmişinizde saklanmadığı için önerilen şifreyi çıkarırsanız
  2. docker tag my-image username/my-repo

  3. docker push username/my-repo


42
--passwordşifrenizin geçmişte görünmesini istemiyorsanız bayrağı kapalı bırakın . sizi uyarır.
AndrewD

5
hiçbir özel ana bilgisayar adı olarak çalışmaz.
Boris Ivanov

@BorisIvanov, ne demek istiyorsun?
kovboycu

4
@cowlinator, Bu soru özel bir repo yerine Docker Hub kullanıyor gibi görünüyor.
duct_tape_coder

6
Bu, özel bir depoya nasıl itileceği sorusuna cevap vermiyor .
Mark K Cowan

48

Önce Docker Hub hesabınıza gidin ve repoyu yapın. İşte Docker Hub hesabımın ekran görüntüsü: resim açıklamasını buraya girin

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 resim açıklamasını buraya girin

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: resim açıklamasını buraya girin

Ş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ü: resim açıklamasını buraya girin

İş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 Eclipse Dizini: resim açıklamasını buraya girin

İş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" ] 

Genel Hata # 1: resim açıklamasını buraya girin

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>.


46

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

15

İki seçenek vardır:

  1. 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.

  2. 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.


1
Verilen soru, birinin istediği kadar basit değil, ama şüphesiz soru soran için kilit konu Docker Hub'daki depoların varsayılan olarak halka açık olmasıdır. Ancak, bu konudaki herkes çoğunlukla özel kayıtlar için wiki'leri pompalamanın yanı sıra docker pushkomuta 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.
Martin Andersson

Tam olarak aradığım şey. @MartinAndersson'un belirttiği gibi, DockerHub'ı kullanıyorsanız, komut satırındaki yukarıdaki yanıtlar yine de itilen görüntünüzün herkese açık olmasını sağlayacaktır.
Shaung Cheng

9

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


7

Referans: dock.docker.com

Bu konuda, bir kayıt defterini dağıtma ve yapılandırma hakkında temel bilgiler verilmektedir

Yerel bir kayıt defteri çalıştırma

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

Docker Hub'dan kayıt defterinize bir resim kopyalama

  1. ubuntu:16.04Görüntüyü Docker Hub'dan çekin .

    $ docker pull ubuntu:16.04
    
  2. 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
    
  3. Görüntüyü şu adreste çalışan yerel kayıt defterine aktarın localhost:5000:

    $ docker push localhost:5000/my-ubuntu
    
  4. Yerel olarak önbelleğe alınan görüntüleri kaldırın. Bu, localhost:5000/my-ubuntugörüntüyü kayıt defterinizden kaldırmaz .

    $ docker image remove ubuntu:16.04
    $ docker image remove localhost:5000/my-ubuntu
    
  5. localhost:5000/my-ubuntuResmi yerel kayıt defterinizden çekin .

    $ docker pull localhost:5000/my-ubuntu
    
Düz bir HTTP kayıt defteri dağıtma

Docs.docker.com'a göre , bu çok güvensizdir ve önerilmez .

  1. Düzenleme daemon.json, varsayılan konumu olan dosya, /etc/docker/daemon.jsonLinux üzerinde veya C:\ProgramData\docker\config\daemon.jsonWindows Server üzerinde. Eğer kullanıyorsanız Docker for Macveya Docker for Windows, tıklayın Docker icon -> Preferences -> Daemon, eklemek insecure registry.

    Eğer daemon.jsondosya 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:

    • İlk önce HTTPS'yi kullanmayı deneyin.
      • HTTPS kullanılabilir ancak sertifika geçersizse, sertifika hakkındaki hatayı yok sayın.
      • HTTPS kullanılamıyorsa, HTTP'ye geri dönün.
  2. Değişikliklerin etkili olması için Docker'ı yeniden başlatın.


6

Önce özel deponuza giriş yapın.

> docker login [OPTIONS] [SERVER]

[OPTIONS]: 
-u username 
-p password

Örneğin:

> docker login localhost:8080

Ve sonra resminizi özel havuzunuz için etiketleyin

> docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

Örneğin:

> docker tag myApp:v1 localhost:8080/myname/myApp:v1

Son olarak bantlanmış görüntülerinizi özel havuzunuza aktarın

>docker push [OPTIONS] NAME[:TAG]

Örneğin:

> docker push localhost:8080/myname/myApp:v1

Referans


4

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-repositorybu NAME/REPOSITORYgö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 imagesaş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)

Bitti!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.