Cara mendorong gambar buruh pelabuhan ke repositori pribadi

418

Saya memiliki gambar docker yang ditandai me/my-image, dan saya memiliki repo pribadi di dockerhub bernama me-private.
Ketika saya mendorong sayame/my-image , saya selalu memukul repo publik.

Apa sintaks yang tepat untuk secara spesifik mendorong gambar saya ke repo pribadi saya?

Eugene Goldberg
sumber
1
Kata "pribadi" bahkan tidak muncul di halaman web yang Anda tautkan.
Martin Andersson

Jawaban:

617

Anda harus menandai gambar Anda dengan benar terlebih dahulu dengan registryhost:

docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]

Kemudian buruh pelabuhan mendorong menggunakan tag yang sama.

docker push NAME[:TAG]

Contoh:

docker tag 518a41981a6a myRegistry.com/myImage
docker push myRegistry.com/myImage
Abdullah Jibaly
sumber
1
jadi, dengan gambar ini: 518a41981a6a, apa sintaks tag sebenarnya untuk membuatnya pergi ke repo me-private, tolong?
Eugene Goldberg
10
docker tag 518a41981a6a me-private.com/myPrivateImage && docker push me-private.com/myPrivateImage
Abdullah Jibaly
2
Saya memperbaiki beberapa masalah sintaks dalam jawaban saya di atas juga. Juga, ketika Anda mendorong ke registri Anda harus menggunakan nama gambar yang sebenarnya dan bukan id gambar.
Abdullah Jibaly
untuk beberapa alasan gambar masih masuk ke registry dockerhub publik, bukan yang pribadi. Hanya untuk klarifikasi - registri pribadi saya juga ada di dockerhub. Saya memberi tag pada gambar, dan melakukan push, tetapi umpan balik menunjukkan bahwa semua lapisan telah didorong, yang tidak akan terjadi jika gambar tersebut masuk ke registri pribadi untuk pertama kalinya
Eugene Goldberg
11
Oh, jika Anda menggunakan registry dockerhub pribadi seharusnya cukup sederhana. Pastikan Anda melakukan yang docker loginpertama, kemudian docker tag 518a41981a6a me-private/myPrivateImagedocker push me-private/myPrivateImage
beri
214

Hanya tiga langkah sederhana:

  1. docker login --username username

    • meminta kata sandi jika Anda menghilangkan --passwordyang direkomendasikan karena tidak menyimpannya dalam riwayat perintah Anda
  2. docker tag my-image username/my-repo

  3. docker push username/my-repo

Abhishek Dasgupta
sumber
42
tinggalkan --passwordbendera jika Anda tidak ingin kata sandi Anda muncul di riwayat. itu akan meminta Anda.
AndrewD
5
tidak berfungsi karena tidak ada nama host privateregistry yang disebutkan.
Boris Ivanov
@ BorisIvanov, apa maksudmu?
cowlinator
4
@ clinlinator, Jawaban ini sepertinya menggunakan Docker Hub daripada repo pribadi saat pertanyaan diajukan.
duct_tape_coder
6
Ini tidak menjawab pertanyaan, tentang bagaimana mendorong ke repositori pribadi .
Mark K Cowan
48

Pertama pergi ke akun Docker Hub Anda dan buat repo. Berikut ini adalah tangkapan layar akun Docker Hub saya: masukkan deskripsi gambar di sini

Dari gambar, Anda dapat melihat repo saya adalah "chuangg"

Sekarang masuklah ke repo dan jadikan pribadi dengan mengklik nama gambar Anda. Jadi bagi saya, saya mengklik "chuangg / gene_commited_image", lalu saya pergi ke Pengaturan -> Jadikan Privat. Kemudian saya mengikuti instruksi di layar masukkan deskripsi gambar di sini

BAGAIMANA CARA MENGAPA GAMBAR DOCKER ANDA KEPADA DUBER HUB

Metode # 1 = Mendorong gambar Anda melalui baris perintah (cli)

1) docker commit <container ID> <repo name>/<Name you want to give the image>

Ya, saya pikir itu harus menjadi ID wadah. Mungkin bukan ID gambar.

Misalnya = docker commit 99e078826312 chuangg/gene_commited_image

2) docker run -it chaung/gene_commited_image

3) docker login --username=<user username> --password=<user password>

Misalnya = docker login --username=chuangg [email protected]

Ya, Anda harus masuk terlebih dahulu. Logout menggunakan "docker logout"

4) docker push chuangg/gene_commited_image

Metode # 2 = Mendorong gambar Anda menggunakan pom.xml dan baris perintah.

Catatan, saya menggunakan Profil Maven yang disebut "build-docker". Jika Anda tidak ingin menggunakan profil, hapus saja <profiles>, <profile>, and <id>build-docker</id>elemen - elemennya.

Di dalam pom.xml induk:

<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 Command untuk menggunakan Docker Image (dari direktori tempat pom.xml Anda berada) = mvn clean deploy -Pbuild-docker docker:push

Catatan, perbedaan antara Metode # 2 dan # 3 adalah bahwa Metode # 3 memiliki tambahan <execution>untuk penyebaran.

Metode # 3 = Menggunakan Maven untuk secara otomatis digunakan ke Docker Hub

Tambahkan barang ini ke pom.xml induk Anda:

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

Buka direktori C: \ Users \ Gene.docker \ dan tambahkan ini ke file config.json Anda: masukkan deskripsi gambar di sini

Sekarang di Docker Quickstart Terminal Anda type = mvn clean install -Pbuild-docker

Bagi Anda yang tidak menggunakan Profil Maven, cukup ketik mvn clean install

Ini screenshot dari pesan sukses: masukkan deskripsi gambar di sini

Ini pom.xml lengkap saya dan tangkapan layar dari struktur direktori saya:

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

Inilah Direktori Eclipse saya: masukkan deskripsi gambar di sini

Ini Dockerfile saya:

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

Kesalahan Umum # 1: masukkan deskripsi gambar di sini

Solusi untuk Kesalahan # 1 = Jangan menyinkronkan <execution>fase dengan maven deploy karena kemudian maven mencoba untuk menyebarkan gambar 2x dan menempatkan cap waktu pada jar. Itu sebabnya saya menggunakan <phase>install</phase>.

Gene
sumber
46

Jika Anda docker registry adalah pribadi dan di-host sendiri Anda harus melakukan hal berikut:

docker login <REGISTRY_HOST>:<REGISTRY_PORT>
docker tag <IMAGE_ID> <REGISTRY_HOST>:<REGISTRY_PORT>/<APPNAME>:<APPVERSION>
docker push <REGISTRY_HOST>:<REGISTRY_PORT>/<APPNAME>:<APPVERSION>

Contoh:

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
Nicolas Delaforge
sumber
15

Ada dua opsi:

  1. Pergilah ke hub, dan buat repositori terlebih dahulu, dan tandai sebagai pribadi. Kemudian ketika Anda mendorong repo itu, itu akan menjadi pribadi. Ini adalah pendekatan yang paling umum.

  2. masuk ke akun hub docker Anda, dan pergi ke pengaturan global Anda . Ada pengaturan yang memungkinkan Anda untuk mengatur apa visibilitas default Anda untuk repositori yang Anda dorong. Secara default itu diatur ke publik, tetapi jika Anda mengubahnya ke pribadi, semua repositori yang Anda tekan akan ditandai sebagai pribadi secara default. Penting untuk dicatat bahwa Anda perlu memiliki cukup repo pribadi yang tersedia di akun Anda, atau repo itu akan dikunci sampai Anda meningkatkan rencana Anda.

Ken Cochrane
sumber
1
Memang, pertanyaan yang diposting tidak semudah yang diharapkan, tetapi saya tidak ragu bahwa masalah utama untuk penanya adalah fakta bahwa repositori di Docker Hub bersifat publik secara default. Namun, semua orang di utas ini sebagian besar sibuk memompa wiki untuk pendaftar pribadi serta menyentuh docker pushperintah. Tetapi jika saya telah memahami pertanyaan dengan benar, tidak ada jawaban yang benar dan yang diposting di atas oleh Ken Cochrane adalah satu-satunya yang harus diterima.
Martin Andersson
Persis apa yang saya cari. Seperti @MartinAndersson sebutkan, jawaban di atas di baris perintah masih akan membiarkan gambar yang Anda buat menjadi publik, jika Anda menekan DockerHub.
Shaung Cheng
9

Buat repositori di dockerhub:

$docker tag IMAGE_ID UsernameOnDockerhub/repoNameOnDockerhub:latest

$docker push UsernameOnDockerhub/repoNameOnDockerhub:latest

Catatan : di sini "repoNameOnDockerhub": repositori dengan nama yang Anda sebutkan harus ada di dockerhub

"terbaru": hanya tag

Anurag Manikkame
sumber
7

Ref: dock.docker.com

Topik ini memberikan informasi dasar tentang penggunaan dan konfigurasi registri

Jalankan registri lokal

Sebelum Anda dapat menggunakan registri, Anda harus menginstal Docker di host.

Gunakan perintah seperti berikut untuk memulai wadah registri:

start_registry.sh

#!/bin/bash

docker run -d \
  -p 5000:5000 \
  --restart=always \
  --name registry \
  -v /data/registry:/var/lib/registry \
  registry:2

Salin gambar dari Docker Hub ke registri Anda

  1. Tarik ubuntu:16.04gambar dari Docker Hub.

    $ docker pull ubuntu:16.04
    
  2. Tandai gambar sebagai localhost:5000/my-ubuntu. Ini membuat tag tambahan untuk gambar yang ada. Ketika bagian pertama dari tag adalah nama host dan port, Docker menafsirkan ini sebagai lokasi registri, ketika mendorong.

    $ docker tag ubuntu:16.04 localhost:5000/my-ubuntu
    
  3. Dorong gambar ke registri lokal yang berjalan di localhost:5000:

    $ docker push localhost:5000/my-ubuntu
    
  4. Hapus gambar yang di-cache secara lokal. Ini tidak menghapuslocalhost:5000/my-ubuntu gambar dari registri Anda.

    $ docker image remove ubuntu:16.04
    $ docker image remove localhost:5000/my-ubuntu
    
  5. Tarik localhost:5000/my-ubuntugambar dari registri lokal Anda.

    $ docker pull localhost:5000/my-ubuntu
    
Menyebarkan registri HTTP biasa

Menurut docs.docker.com , ini sangat tidak aman dan tidak aman tidak direkomendasikan .

  1. Edit daemon.jsonfile, yang lokasi default-nya ada /etc/docker/daemon.jsondi Linux atau C:\ProgramData\docker\config\daemon.jsondi Windows Server. Jika Anda menggunakan Docker for Macatau Docker for Windows, klikDocker icon -> Preferences -> Daemon , tambahkan insecure registry.

    Jika daemon.jsonfile tidak ada, buatlah. Dengan asumsi tidak ada pengaturan lain dalam file, itu harus memiliki konten berikut:

    {
      "insecure-registries" : ["myregistrydomain.com:5000"]
    }
    

    Dengan pendaftaran yang tidak aman diaktifkan, Docker melewati langkah-langkah berikut:

    • Pertama, coba gunakan HTTPS.
      • Jika HTTPS tersedia tetapi sertifikat tidak valid, abaikan kesalahan tentang sertifikat.
      • Jika HTTPS tidak tersedia, kembali ke HTTP.
  2. Mulai ulang Docker agar perubahan diterapkan.

David Ding
sumber
6

Login terlebih dahulu repositori pribadi Anda.

> docker login [OPTIONS] [SERVER]

[OPTIONS]: 
-u username 
-p password

misalnya:

> docker login localhost:8080

Dan kemudian beri tag pada gambar Anda untuk repositori pribadi Anda

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

misalnya:

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

Akhirnya dorong gambar yang Anda tandai ke repositori pribadi Anda

>docker push [OPTIONS] NAME[:TAG]

misalnya:

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

Referensi

derek-yuan
sumber
4

Solusi kerja sederhana:

Buka di sini https://hub.docker.com/untuk membuat repositori PRIVATE dengan nama misalnya johnsmith/private-repositoryini adalah yang NAME/REPOSITORYakan Anda gunakan untuk gambar Anda saat membangun gambar.

  • Pertama, docker login

  • Kedua, saya menggunakan " docker build -t johnsmith/private-repository:01 ." (di mana 01 adalah nama versi saya) untuk membuat gambar, dan saya menggunakan " docker images" untuk mengonfirmasi gambar yang dibuat seperti dalam kotak kuning di bawah ini: (maaf saya tidak bisa menempelkan format tabel tetapi hanya string teks saja )

johnsmith / private-repository (REPOSITORY) 01 (TAG) c5f4a2861d6e (ID GAMBAR) 2 hari yang lalu (CREATED) 305MB (SIZE)

Selesai!

Kotoran
sumber