Cách đẩy hình ảnh docker vào kho lưu trữ riêng


418

Tôi có một hình ảnh me/my-imagedocker được gắn thẻ là , và tôi có một repo riêng trên dockerhub có tên me-private.
Khi tôi đẩyme/my-image , cuối cùng tôi luôn nhấn repo công khai.

Cú pháp chính xác để đặc biệt đẩy hình ảnh của tôi đến repo riêng của tôi là gì?



1
Từ "riêng tư" thậm chí không xuất hiện trên trang web bạn đã liên kết.
Martin Andersson

Câu trả lời:


617

Bạn cần gắn thẻ hình ảnh của bạn chính xác trước tiên với registryhost:

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

Sau đó docker đẩy bằng cách sử dụng cùng một thẻ.

docker push NAME[:TAG]

Thí dụ:

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

1
vì vậy, với hình ảnh này: 518a41981a6a, cú pháp thẻ thực tế để làm cho nó đi đến repo me-private là gì?
Eugene Goldberg

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

2
Tôi đã sửa một số vấn đề cú pháp trong câu trả lời của tôi ở trên là tốt. Ngoài ra, fyi khi bạn đẩy đến một sổ đăng ký, bạn phải sử dụng tên hình ảnh thực tế chứ không phải id hình ảnh.
Abdullah Jibaly

vì một số lý do, hình ảnh vẫn được đăng ký công khai dockerhub thay vì đăng ký riêng tư. Chỉ cần làm rõ - đăng ký riêng của tôi cũng có trên dockerhub. Tôi đã gắn thẻ hình ảnh và thực hiện thao tác đẩy, nhưng phản hồi cho thấy rằng tất cả các lớp đã được đẩy, điều này sẽ không xảy ra nếu hình ảnh lần đầu tiên được đăng ký riêng tư
Eugene Goldberg

11
Ồ, nếu bạn đang sử dụng một đăng ký dockerhub riêng thì nó khá đơn giản. Hãy chắc chắn rằng bạn thực hiện docker logintrước, sau đó gắn thẻ hình ảnh của bạn: docker tag 518a41981a6a me-private/myPrivateImagevà đẩy:docker push me-private/myPrivateImage
Abdullah Jibaly

214

Chỉ cần ba bước đơn giản:

  1. docker login --username username

    • lời nhắc nhập mật khẩu nếu bạn bỏ qua --passwordkhuyến nghị vì nó không lưu nó trong lịch sử lệnh của bạn
  2. docker tag my-image username/my-repo

  3. docker push username/my-repo


42
rời khỏi --passwordcờ nếu bạn không muốn mật khẩu của mình hiển thị trong lịch sử. nó sẽ nhắc bạn
AndrewD

5
không làm việc như không có tên máy chủ tư nhân được đề cập.
Boris Ivanov

@BorisIvanov, ý bạn là gì?
bồi

4
@cowlinator, Câu trả lời này dường như đang sử dụng Docker Hub chứ không phải là repo riêng như câu hỏi.
duct_tape_coder

6
Điều này không trả lời câu hỏi, làm thế nào để đẩy đến một kho lưu trữ riêng .
Mark K Cowan

48

Đầu tiên hãy vào tài khoản Docker Hub của bạn và thực hiện repo. Đây là một ảnh chụp màn hình tài khoản Docker Hub của tôi: nhập mô tả hình ảnh ở đây

Từ pic, bạn có thể thấy repo của tôi là Chu chugg '

Bây giờ đi vào repo và đặt nó ở chế độ riêng tư bằng cách nhấp vào tên hình ảnh của bạn. Vì vậy, đối với tôi, tôi đã nhấp vào chu chugg / gen_commited_image, sau đó tôi đã đi tới Cài đặt -> Đặt riêng tư. Sau đó, tôi làm theo hướng dẫn trên màn hình nhập mô tả hình ảnh ở đây

CÁCH TẢI LÊN HÌNH ẢNH DOCKER CỦA BẠN TRÊN DUBER HUB

Phương pháp # 1 = Đẩy hình ảnh của bạn qua dòng lệnh (cli)

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

Vâng, tôi nghĩ rằng nó phải là ID container. Nó có thể không thể là ID hình ảnh.

Ví dụ = docker commit 99e078826312 chuangg/gene_commited_image

2) docker run -it chaung/gene_commited_image

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

Ví dụ = docker login --username=chuangg --email=gc.genechaung@gmail.com

Vâng, bạn phải đăng nhập trước. Đăng xuất bằng cách sử dụng docker

4) docker push chuangg/gene_commited_image

Phương pháp # 2 = Đẩy hình ảnh của bạn bằng pom.xml và dòng lệnh.

Lưu ý, tôi đã sử dụng Hồ sơ Maven có tên là build build-docker. Nếu bạn không muốn sử dụng hồ sơ, chỉ cần xóa<profiles>, <profile>, and <id>build-docker</id> yếu tố.

Bên trong tệp cha mẹ:

<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 để triển khai Docker Image (từ thư mục chứa pom.xml của bạn) = mvn clean deploy -Pbuild-docker docker:push

Lưu ý, điểm khác biệt giữa Phương thức # 2 và # 3 là Phương thức # 3 có thêm <execution> phần triển khai.

Phương pháp # 3 = Sử dụng Maven để tự động triển khai đến Docker Hub

Thêm nội dung này vào tệp cha mẹ của bạn:

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

Chuyển đến thư mục C: \ Users \ Gene.docker \ và thêm tệp này vào tệp config.json của bạn: nhập mô tả hình ảnh ở đây

Bây giờ trong Docker Quickstart Terminal type = mvn clean install -Pbuild-docker

Đối với những bạn không sử dụng Maven Profiles, chỉ cần gõ mvn clean install

Dưới đây là ảnh chụp màn hình của thông báo thành công: nhập mô tả hình ảnh ở đây

Đây là pom.xml đầy đủ của tôi và ảnh chụp màn hình cấu trúc thư mục của tôi:

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

Đây là thư mục Eclipse của tôi: nhập mô tả hình ảnh ở đây

Đây là Dockerfile của tôi:

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

Lỗi thường gặp # 1: nhập mô tả hình ảnh ở đây

Giải pháp cho Lỗi # 1 = Không đồng bộ hóa <execution>với giai đoạn triển khai maven vì sau đó maven cố gắng triển khai hình ảnh 2x và đặt dấu thời gian trên bình. Đó là lý do tại sao tôi sử dụng <phase>install</phase>.


46

Nếu bạn đăng ký docker là riêng tư và tự lưu trữ, bạn nên làm như sau:

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

Thí dụ :

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

Có hai lựa chọn:

  1. Đi vào trung tâm và tạo kho lưu trữ trước và đánh dấu nó là riêng tư. Sau đó, khi bạn đẩy đến repo đó, nó sẽ ở chế độ riêng tư. Đây là cách tiếp cận phổ biến nhất.

  2. đăng nhập vào tài khoản trung tâm docker của bạn và đi đến cài đặt toàn cầu của bạn . Có một cài đặt cho phép bạn đặt mức độ hiển thị mặc định của bạn cho các kho lưu trữ mà bạn đẩy. Theo mặc định, nó được đặt thành công khai, nhưng nếu bạn thay đổi thành riêng tư, tất cả các kho lưu trữ mà bạn đẩy sẽ được đánh dấu là riêng tư theo mặc định. Điều quan trọng cần lưu ý là bạn sẽ cần phải có đủ repos riêng trên tài khoản của mình, nếu không thì repo sẽ bị khóa cho đến khi bạn nâng cấp gói của mình.


1
Cấp, câu hỏi được đăng không đơn giản như người ta mong muốn, nhưng tôi không nghi ngờ gì vấn đề quan trọng đối với người hỏi là thực tế là các kho lưu trữ trên Docker Hub được công khai theo mặc định. Tuy nhiên, tất cả mọi người trong chủ đề này chủ yếu là chiếm dụng việc bơm wiki cho các cơ quan đăng ký tư nhân cũng như chạm vào docker pushlệnh. Nhưng nếu tôi đã hiểu đúng câu hỏi, không có câu trả lời nào trong số này là đúng và câu trả lời được đăng ở trên bởi Ken Cochrane là câu duy nhất nên được chấp nhận.
Martin Andersson

Chính xác những gì tôi đang tìm kiếm. Như @MartinAndersson đã đề cập, các câu trả lời ở trên trong dòng lệnh sẽ vẫn để hình ảnh được đẩy của bạn ở chế độ công khai, nếu bạn đang nhấn vào DockerHub.
Shaung Cheng

9

Tạo kho lưu trữ trên dockerhub:

$docker tag IMAGE_ID UsernameOnDockerhub/repoNameOnDockerhub:latest

$docker push UsernameOnDockerhub/repoNameOnDockerhub:latest

Lưu ý : ở đây "repoNameOnDockerhub": kho lưu trữ với tên bạn đang đề cập phải có mặt trên dockerhub

"mới nhất": chỉ là thẻ


7

Tham chiếu: dock.docker.com

Chủ đề này cung cấp thông tin cơ bản về việc triển khai và định cấu hình sổ đăng ký

Chạy đăng ký cục bộ

Trước khi bạn có thể triển khai một sổ đăng ký, bạn cần cài đặt Docker trên máy chủ.

Sử dụng một lệnh như sau để bắt đầu container đăng ký:

start_regology.sh

#!/bin/bash

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

Sao chép một hình ảnh từ Docker Hub vào sổ đăng ký của bạn

  1. Kéo ubuntu:16.04hình ảnh từ Docker Hub.

    $ docker pull ubuntu:16.04
    
  2. Tag hình ảnh như localhost:5000/my-ubuntu. Điều này tạo ra một thẻ bổ sung cho hình ảnh hiện có. Khi phần đầu tiên của thẻ là tên máy chủ và cổng, Docker diễn giải đây là vị trí của sổ đăng ký, khi đẩy.

    $ docker tag ubuntu:16.04 localhost:5000/my-ubuntu
    
  3. Đẩy hình ảnh vào sổ đăng ký cục bộ đang chạy tại localhost:5000:

    $ docker push localhost:5000/my-ubuntu
    
  4. Loại bỏ các hình ảnh lưu trữ cục bộ. Điều này không loại bỏ localhost:5000/my-ubuntuhình ảnh từ đăng ký của bạn.

    $ docker image remove ubuntu:16.04
    $ docker image remove localhost:5000/my-ubuntu
    
  5. Kéo localhost:5000/my-ubuntuhình ảnh từ đăng ký địa phương của bạn.

    $ docker pull localhost:5000/my-ubuntu
    
Triển khai một sổ đăng ký HTTP đơn giản

Theo docs.docker.com , điều này rất không an toàn và không được khuyến khích .

  1. Chỉnh sửa daemon.jsontệp, có vị trí mặc định là /etc/docker/daemon.jsontrên Linux hoặc C:\ProgramData\docker\config\daemon.jsontrên Windows Server. Nếu bạn sử dụng Docker for Machoặc Docker for Windows, nhấp vào Docker icon -> Preferences -> Daemon, thêm vào insecure registry.

    Nếu daemon.jsontập tin không tồn tại, tạo nó. Giả sử không có cài đặt nào khác trong tệp, nó sẽ có các nội dung sau:

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

    Khi đăng ký không an toàn được bật, Docker thực hiện các bước sau:

    • Trước tiên, hãy thử sử dụng HTTPS.
      • Nếu HTTPS có sẵn nhưng chứng chỉ không hợp lệ, hãy bỏ qua lỗi về chứng chỉ.
      • Nếu HTTPS không có sẵn, hãy quay lại HTTP.
  2. Khởi động lại Docker để những thay đổi có hiệu lực.


6

Đầu tiên đăng nhập kho riêng của bạn.

> docker login [OPTIONS] [SERVER]

[OPTIONS]: 
-u username 
-p password

ví dụ:

> docker login localhost:8080

Và sau đó gắn thẻ hình ảnh của bạn cho kho lưu trữ riêng tư của bạn

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

ví dụ:

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

Cuối cùng đẩy hình ảnh bị trói của bạn vào kho lưu trữ riêng tư của bạn

>docker push [OPTIONS] NAME[:TAG]

ví dụ:

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

Tài liệu tham khảo


4

Giải pháp làm việc đơn giản:

Tới đây https://hub.docker.com/để tạo một kho lưu trữ RIÊNG với tên, ví dụ johnsmith/private-repositoryđây là kho NAME/REPOSITORYbạn sẽ sử dụng cho hình ảnh của mình khi xây dựng hình ảnh.

  • Đầu tiên, docker login

  • Thứ hai, tôi sử dụng " docker build -t johnsmith/private-repository:01 ." (trong đó 01 là tên phiên bản của tôi) để tạo hình ảnh và tôi sử dụng " docker images" để xác nhận hình ảnh được tạo như trong hộp màu vàng bên dưới: (xin lỗi tôi không thể dán định dạng bảng nhưng chỉ có chuỗi văn bản )

johnsmith / private-repository (REPOSITORY) 01 (TAG) c5f4a2861d6e (ID IMAGE) 2 ngày trước (TẠO) 305MB (KÍCH THƯỚC)

Làm xong!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.