एक निजी रिपॉजिटरी के लिए एक डॉकटर इमेज को कैसे पुश करें


418

मेरे पास एक डॉकटर की छवि है me/my-image, और मेरे पास डॉकहॉब नाम का एक निजी रेपो है me-private
जब मैं अपने को धक्का देता हूं me/my-image, तो मैं हमेशा जनता के रेपो को खत्म करता हूं।

विशेष रूप से मेरी छवि को मेरे निजी रेपो में धकेलने के लिए सटीक सिंटैक्स क्या है?



1
"निजी" शब्द आपके द्वारा लिंक किए गए वेब पेज पर भी नहीं होता है।
मार्टिन एंडरसन

जवाबों:


617

आपको अपनी छवि को पहले अपने साथ टैग करने की आवश्यकता है registryhost:

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

फिर उसी टैग का उपयोग करके डॉकटर पुश करें।

docker push NAME[:TAG]

उदाहरण:

docker tag 518a41981a6a myRegistry.com/myImage
docker push myRegistry.com/myImage

1
इसलिए, इस छवि के साथ: 518a41981a6a, यह वास्तविक टैग सिंटैक्स क्या है जो मुझे निजी प्रायवेट करने के लिए जाता है, कृपया?
यूजीन गोल्डबर्ग 16

10
docker tag 518a41981a6a me-private.com/myPrivateImage && docker push me-private.com/myPrivateImage
अब्दुल्ला जिबली

2
मैंने अपने उत्तर में भी कुछ वाक्यविन्यास मुद्दे तय किए। इसके अलावा, फी जब आप एक रजिस्ट्री को धक्का देते हैं तो आपको एक वास्तविक छवि नाम का उपयोग करना होगा न कि छवि आईडी का।
अब्दुल्ला जिबली

किसी कारण के लिए छवि अभी भी निजी के बजाय सार्वजनिक dockerhub रजिस्ट्री में जाती है। स्पष्टीकरण के लिए - मेरी निजी रजिस्ट्री भी डॉक्यूहब पर है। मैंने इमेज को टैग किया, और पुश किया, लेकिन फीडबैक यह संकेत दे रहा था कि सभी लेयर्स को पहले ही पुश किया जा चुका है, जो कि पहली बार निजी रजिस्ट्री में जा रही थी तो ऐसा नहीं होगा
यूजीन गोल्डबर्ग

11
ओह, अगर आप एक निजी डॉकहब रजिस्ट्री का उपयोग कर रहे हैं तो यह बहुत सरल होना चाहिए। सुनिश्चित करें कि आप docker loginपहली बार करते हैं, फिर अपनी छवि को टैग करें: docker tag 518a41981a6a me-private/myPrivateImageऔर धक्का दें:docker push me-private/myPrivateImage
अब्दुल्ला जिबल

213

सिर्फ तीन सरल कदम:

  1. docker login --username username

    • पासवर्ड के लिए संकेत देता है अगर आप --passwordइसे छोड़ देते हैं जो कि अनुशंसित है क्योंकि यह आपके कमांड इतिहास में संग्रहीत नहीं करता है
  2. docker tag my-image username/my-repo

  3. docker push username/my-repo


42
--passwordयदि आप इतिहास में अपना पासवर्ड नहीं दिखाना चाहते हैं तो ध्वज को छोड़ दें । यह आपको संकेत देगा।
एंड्रयू डे

5
काम नहीं के रूप में कोई privateregistry hostname उल्लेख किया है।
बोरिस इवानोव

@ बोरिस इवानोव, आपका क्या मतलब है?
काऊलीनटैटर

4
@cowlinator, यह उत्तर एक निजी रेपो के बजाय डॉकर हब का उपयोग करता प्रतीत होता है जैसा कि प्रश्न पूछता है।
duct_tape_coder

6
यह इस सवाल का जवाब नहीं देता है कि निजी भंडार में कैसे धकेलना है।
मार्क के कोवान

48

सबसे पहले अपने डॉकर हब खाते में जाएं और रेपो बनाएं। यहाँ मेरे डॉकर हब खाते का एक स्क्रीनशॉट है: यहां छवि विवरण दर्ज करें

तस्वीर से, आप देख सकते हैं कि मेरा रेपो "चुआंग" है

अब रेपो में जाएं और अपनी छवि के नाम पर क्लिक करके इसे निजी बनाएं। तो मेरे लिए, मैंने "chuangg / gen_commited_image" पर क्लिक किया, फिर मैं सेटिंग्स -> मेक प्राइवेट में गया। फिर मैंने ऑन स्क्रीन निर्देशों का पालन किया यहां छवि विवरण दर्ज करें

अपने डॉकटर इमेज को जारी करने के लिए कैसे करें डॉकटर हब

विधि # 1 = कमांड लाइन (cli) के माध्यम से अपनी छवि को धक्का

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

हां, मुझे लगता है कि यह कंटेनर आईडी होना चाहिए। यह शायद छवि आईडी नहीं हो सकता।

उदाहरण के लिए = docker commit 99e078826312 chuangg/gene_commited_image

2) docker run -it chaung/gene_commited_image

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

उदाहरण के लिए = docker login --username=chuangg --email=gc.genechaung@gmail.com

हां, आपको पहले लॉगिन करना होगा। "डॉकटर लॉगआउट" का उपयोग कर लॉगआउट करें

4) docker push chuangg/gene_commited_image

विधि # 2 = pom.xml और कमांड लाइन का उपयोग करके अपनी छवि को धक्का।

ध्यान दें, मैंने "बिल्ड-डूकर" नामक एक मैवेन प्रोफाइल का उपयोग किया था। यदि आप प्रोफ़ाइल का उपयोग नहीं करना चाहते हैं, तो <profiles>, <profile>, and <id>build-docker</id>तत्वों को हटा दें ।

मूल pom.xml के अंदर:

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

डॉकर टर्मिनल कमांड को डॉकर इमेज (उस निर्देशिका से जहां आपका pom.xml स्थित है) को तैनात करने के लिए = mvn clean deploy -Pbuild-docker docker:push

ध्यान दें, विधि # 2 और # 3 के बीच का अंतर यह है कि विधि # 3 में एक अतिरिक्त है <execution> परिनियोजन के लिए ।

विधि # 3 = स्वचालित रूप से डॉकर हब पर तैनात करने के लिए मावेन का उपयोग करना

इस सामग्री को अपने मूल pom.xml में जोड़ें:

    <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 \ निर्देशिका पर जाएं और इसे अपने config.json फ़ाइल में जोड़ें: यहां छवि विवरण दर्ज करें

अब अपने डॉकर क्विकस्टार्ट टर्मिनल टाइप = में mvn clean install -Pbuild-docker

आप में से लोग मावेन प्रोफाइल का उपयोग नहीं कर रहे हैं, बस टाइप करें mvn clean install

यहाँ सफलता संदेश का स्क्रीनशॉट है: यहां छवि विवरण दर्ज करें

यहाँ मेरा पूरा pom.xml और मेरी निर्देशिका संरचना का एक स्क्रीनशॉट है:

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

यहाँ मेरी ग्रहण निर्देशिका है: यहां छवि विवरण दर्ज करें

यहाँ मेरा डॉकफ़ाइल है:

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

सामान्य त्रुटि # 1: यहां छवि विवरण दर्ज करें

त्रुटि # 1 के लिए समाधान = <execution>मावेन की तैनाती के चरण के साथ सिंक न करें क्योंकि तब मावेन छवि 2x को तैनात करने की कोशिश करता है और जार पर एक टाइमस्टैम्प डालता है। इसलिए मैंने इस्तेमाल किया <phase>install</phase>


46

यदि आप docker रजिस्ट्री निजी है और स्वयं को होस्ट किया है तो आपको निम्नलिखित कार्य करने चाहिए:

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

उदाहरण :

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

दो विकल्प हैं:

  1. हब में जाएं, और पहले भंडार बनाएं, और इसे निजी के रूप में चिह्नित करें। फिर जब आप उस रेपो को धक्का देते हैं, तो यह निजी होगा। यह सबसे आम तरीका है।

  2. अपने डॉकटर हब खाते में प्रवेश करें, और अपनी वैश्विक सेटिंग्स पर जाएं । एक सेटिंग है जो आपको यह निर्धारित करने की अनुमति देती है कि आपके द्वारा चुने गए रिपॉजिटरी के लिए आपका डिफ़ॉल्ट विज़िबिलिटी क्या है। डिफ़ॉल्ट रूप से यह सार्वजनिक पर सेट होता है, लेकिन यदि आप इसे निजी में बदलते हैं, तो आपके सभी रिपॉजिटरी जो आप पुश करते हैं, उन्हें डिफ़ॉल्ट रूप से निजी के रूप में चिह्नित किया जाएगा। यह ध्यान रखना महत्वपूर्ण है कि आपको अपने खाते पर पर्याप्त निजी रेपो उपलब्ध होने की आवश्यकता होगी, या जब तक आप अपनी योजना को अपग्रेड नहीं करते तब तक रेपो लॉक रहेगा।


1
दी गई है, पोस्ट किया गया प्रश्न उतना सीधा नहीं है जितना कोई व्यक्ति चाहता है, लेकिन मुझे इसमें कोई संदेह नहीं है कि प्रश्नकर्ता के लिए मुख्य मुद्दा यह है कि डॉकर हब पर रिपॉजिटरी डिफ़ॉल्ट रूप से सार्वजनिक हैं। फिर भी, इस धागे पर हर कोई निजी रजिस्ट्रियों के साथ-साथ docker pushकमांड पर छूने के लिए विकियों को बाहर निकालने पर कब्जा कर लेता है । लेकिन अगर मैंने प्रश्न को सही समझा है, तो इनमें से कोई भी उत्तर सही नहीं है और केन कोचरन द्वारा ऊपर पोस्ट किया गया केवल वही है जिसे स्वीकार किया जाना चाहिए।
मार्टिन एंडरसन

बिल्कुल वही, जिसकी मुझे तलाश है। जैसा कि @MartinAndersson ने उल्लेख किया है, कमांड लाइन में ऊपर दिए गए उत्तर अभी भी आपकी पुश की हुई छवि को सार्वजनिक करने देंगे, यदि आप DockerHub पर जोर दे रहे हैं।
शांग चेंग

9

Dockerhub पर भंडार बनाएँ:

$docker tag IMAGE_ID UsernameOnDockerhub/repoNameOnDockerhub:latest

$docker push UsernameOnDockerhub/repoNameOnDockerhub:latest

नोट : यहाँ "repoNameOnDockerhub": जिस नाम का आप उल्लेख कर रहे हैं उसके साथ रिपॉजिटरी को dockerhub पर उपस्थित होना है

"नवीनतम": सिर्फ टैग है


7

रेफरी: dock.docker.com

यह विषय रजिस्ट्री को तैनात करने और कॉन्फ़िगर करने के बारे में बुनियादी जानकारी प्रदान करता है

एक स्थानीय रजिस्ट्री चलाएँ

इससे पहले कि आप एक रजिस्ट्री को तैनात कर सकें, आपको होस्ट पर डॉकर स्थापित करना होगा।

रजिस्ट्री कंटेनर को शुरू करने के लिए निम्न की तरह एक कमांड का उपयोग करें:

start_registry.sh

#!/bin/bash

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

अपनी रजिस्ट्री में डॉकर हब से एक छवि की प्रतिलिपि बनाएँ

  1. ubuntu:16.04डॉकर हब से छवि खींचो ।

    $ docker pull ubuntu:16.04
    
  2. के रूप में छवि को टैग करें localhost:5000/my-ubuntu। यह मौजूदा छवि के लिए एक अतिरिक्त टैग बनाता है। जब टैग का पहला भाग होस्टनाम और पोर्ट होता है, तो डॉकटर इसे पुश करते समय रजिस्ट्री के स्थान के रूप में व्याख्या करता है।

    $ docker tag ubuntu:16.04 localhost:5000/my-ubuntu
    
  3. स्थानीय रजिस्ट्री में छवि को पुश करें localhost:5000:

    $ docker push localhost:5000/my-ubuntu
    
  4. स्थानीय रूप से कैश्ड छवियों को हटा दें। यह localhost:5000/my-ubuntuआपकी रजिस्ट्री से छवि को नहीं हटाता है ।

    $ docker image remove ubuntu:16.04
    $ docker image remove localhost:5000/my-ubuntu
    
  5. localhost:5000/my-ubuntuअपने स्थानीय रजिस्ट्री से छवि खींचो ।

    $ docker pull localhost:5000/my-ubuntu
    
एक सादे HTTP रजिस्ट्री की तैनाती करें

Docs.docker.com के अनुसार , यह बहुत असुरक्षित है और इसकी सिफारिश नहीं की जाती है

  1. daemon.jsonफ़ाइल को संपादित करें , जिसका डिफ़ॉल्ट स्थान /etc/docker/daemon.jsonलिनक्स या C:\ProgramData\docker\config\daemon.jsonविंडोज सर्वर पर है। यदि आप उपयोग करते हैं Docker for Macया Docker for Windowsक्लिक करते हैं Docker icon -> Preferences -> Daemon, तो में जोड़ें insecure registry

    यदि daemon.jsonफ़ाइल मौजूद नहीं है, तो इसे बनाएं। यह मानते हुए कि फ़ाइल में कोई अन्य सेटिंग्स नहीं हैं, इसमें निम्नलिखित सामग्री होनी चाहिए:

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

    असुरक्षित रजिस्ट्रियों को सक्षम करने के साथ, डॉकर निम्नलिखित चरणों से गुजरता है:

    • सबसे पहले, HTTPS का उपयोग करके देखें।
      • यदि HTTPS उपलब्ध है, लेकिन प्रमाणपत्र अमान्य है, तो प्रमाणपत्र के बारे में त्रुटि को अनदेखा करें।
      • यदि HTTPS उपलब्ध नहीं है, तो HTTP पर वापस जाएं।
  2. परिवर्तनों को प्रभावी करने के लिए डॉकर को पुनः प्रारंभ करें।


6

सबसे पहले अपने प्राइवेट रिपॉजिटरी को लॉगिन करें।

> docker login [OPTIONS] [SERVER]

[OPTIONS]: 
-u username 
-p password

उदाहरण के लिए:

> docker login localhost:8080

और फिर अपनी छवि को अपने निजी भंडार के लिए टैग करें

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

उदाहरण के लिए:

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

अंत में अपनी निजी छवियों को अपनी निजी छवियों को पुश करें

>docker push [OPTIONS] NAME[:TAG]

उदाहरण के लिए:

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

संदर्भ


4

सरल काम समाधान:

यहां जाएं https://hub.docker.com/उदाहरण के लिए नाम के साथ एक निजी भंडार बनाने के लिए johnsmith/private-repositoryयह है NAME/REPOSITORYकि आप जब छवि का निर्माण कर अपनी छवि के लिए प्रयोग करेंगे।

  • प्रथम, docker login

  • दूसरा, मैं docker build -t johnsmith/private-repository:01 .छवि बनाने के लिए " " (जहां 01 मेरा संस्करण नाम है) का उपयोग करता हूं, और मैं docker imagesनीचे दिए गए इस पीले बॉक्स में बनाई गई छवि की पुष्टि करने के लिए " " का उपयोग करता हूं : (क्षमा करें मैं तालिका प्रारूप को पेस्ट नहीं कर सकता लेकिन केवल पाठ स्ट्रिंग )

johnsmith / private-repository (REPOSITORY) 01 (TAG) c5f4a2861d6e (IMAGE ID) 2 दिन पहले (सृजित) 305MB (SIZE)

किया हुआ!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.