如何将Docker映像推送到私有存储库


418

我有一个标记为me/my-image的Docker 镜像,并且在dockerhub上有一个名为的私有仓库me-private
当我推动我的工作时me/my-image,我最终总是会碰到公共仓库。

将图片专门推送到我的私人存储库的确切语法是什么?



1
您链接的网页上甚至都没有出现“私人”一词。
马丁·安德森

将此内容

Answers:


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,请问将其用于我-私人仓库的实际标记语法是什么?
尤金·戈德堡

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

2
我也在上面的答案中修复了一些语法问题。同样,当您推送到注册表时,必须使用实际的映像名称而不是映像ID。
Abdullah Jibaly 2015年

由于某种原因,映像仍会转到公共dockerhub注册中心,而不是私有注册中心。只是为了澄清-我的私人注册表也在dockerhub上。我标记了图像并进行了推送,但是反馈表明所有层都已被推送,如果图像是第一次进入私有注册表,则情况并非如此
Eugene Goldberg,2015年

11
哦,如果您使用的是私有dockerhub注册表,它应该非常简单。确保docker login先进行操作,然后标记图像:docker tag 518a41981a6a me-private/myPrivateImage并推送:docker push me-private/myPrivateImage
Abdullah Jibaly 2015年

213

只需三个简单步骤:

  1. docker login --username username

    • 如果省略密码,则提示输入密码,因为--password该密码未存储在命令历史记录中
  2. docker tag my-image username/my-repo

  3. docker push username/my-repo


42
--password如果您不希望密码出现在历史记录中,请不要设置标志。它会提示您。
AndrewD

5
由于未提及任何私有注册表主机名,因此无法正常工作。
鲍里斯·伊凡诺夫

@BorisIvanov,您是什么意思?
cowlinator

4
@cowlinator,此问题似乎是在使用Docker Hub而不是私有存储库。
–duct_tape_coder

6
这没有回答有关如何推送到私有存储库的问题。
马克·科文

48

首先转到您的Docker Hub帐户并进行回购。这是我的Docker Hub帐户的屏幕截图: 在此处输入图片说明

从图片中,您可以看到我的仓库是“ chuangg”

现在,进入存储库并通过单击图像名称将其设为私有。因此,对我来说,我单击“ chuangg / gene_commited_image”,然后转到“设置”->“设为私有”。然后我按照屏幕上的说明进行操作 在此处输入图片说明

如何在DOCKER HUB上上传DOCKER图像

方法#1 =通过命令行(cli)推送图像

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

是的,我认为必须是容器ID。它可能不是图像ID。

例如= 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

是的,您必须先登录。使用“ docker注销”注销

4) docker push chuangg/gene_commited_image

方法#2 =使用pom.xml和命令行推送图像。

注意,我使用了一个名为“ build-docker”的Maven配置文件。如果您不想使用配置文件,只需删除<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>

Docker终端命令以部署Docker映像(从pom.xml所在的目录)= mvn clean deploy -Pbuild-docker docker:push

请注意,方法2和方法3之间的区别在于方法3 <execution>对于部署有额外的要求。

方法#3 =使用Maven自动部署到Docker Hub

将此东西添加到您的父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文件中: 在此处输入图片说明

现在在您的Docker Quickstart Terminal中输入type = mvn clean install -Pbuild-docker

对于那些不使用Maven配置文件的人,只需键入 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>

这是我的Eclipse目录: 在此处输入图片说明

这是我的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" ] 

常见错误#1: 在此处输入图片说明

错误1的解决方案=不要<execution>与maven部署阶段同步,因为maven会尝试将映像2x部署并在jar上放置时间戳。这就是我使用的原因<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. 登录您的Docker Hub账户,然后转到您的全局设置。有一个设置可让您设置所推送存储库的默认可见性。默认情况下,它设置为public,但是如果将其更改为private,则默认情况下,您推送的所有存储库都将标记为private。请务必注意,您的帐户上需要有足够的私人存储库,否则该存储库将被锁定,直到升级您的计划为止。


1
诚然,发布的问题并不像人们所希望的那么简单,但是对于提问者来说,我毫无疑问的关键问题是默认情况下Docker Hub上的存储库是公共的。但是,该线程上的每个人大多数都忙于为私有注册簿抽出Wiki 以及触摸docker push命令。但是,如果我理解正确的问题,那么这些答案都不正确,肯·科克伦(Ken Cochrane)上面发布的答案是唯一应该接受的答案。
马丁·安德森

正是我想要的。正如@MartinAndersson所提到的,如果您在DockerHub上进行推送,则在命令行中的上述答案仍将使您推送的图像公开。
ung诚

9

在dockerhub上创建存储库:

$docker tag IMAGE_ID UsernameOnDockerhub/repoNameOnDockerhub:latest

$docker push UsernameOnDockerhub/repoNameOnDockerhub:latest

注意:此处为“ repoNameOnDockerhub”:dockerhub中必须存在您要提及的名称的存储库

“最新”:只是标签


7

参考:dock.docker.com

本主题提供有关部署和配置注册表的基本信息

运行本地注册表

在部署注册表之前,您需要在主机上安装Docker。

使用以下命令来启动注册表容器:

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复制到注册表

  1. ubuntu:16.04离泊坞枢纽的形象。

    $ docker pull ubuntu:16.04
    
  2. 将图像标记为localhost:5000/my-ubuntu。这将为现有图像创建一个附加标签。当标签的第一部分是主机名和端口时,推入时Docker会将其解释为注册表的位置。

    $ 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在Linux或C:\ProgramData\docker\config\daemon.jsonWindows Server上。如果使用Docker for MacDocker for Windows,请单击Docker icon -> Preferences -> Daemon,然后添加insecure registry

    如果daemon.json文件不存在,请创建它。假设文件中没有其他设置,则该文件应具有以下内容:

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

    启用不安全的注册表后,Docker会执行以下步骤:

    • 首先,尝试使用HTTPS。
      • 如果HTTPS可用但证书无效,请忽略有关证书的错误。
      • 如果HTTPS不可用,请退回到HTTP。
  2. 重新启动Docker以使更改生效。


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/创建一个名称为PRIVATE的存储库,例如,johnsmith/private-repository这是NAME/REPOSITORY构建映像时将用于映像的名称。

  • 第一, docker login

  • 其次,我使用“ docker build -t johnsmith/private-repository:01 .”(版本名称为01)创建图像,并使用“ docker images”确认所创建的图像,例如下面的黄色框:(对不起,我无法粘贴表格格式,只能粘贴文本字符串)

johnsmith / private-repository(存储库)01(TAG)c5f4a2861d6e(图像ID)2天前(创建)305MB(大小)

做完了!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.