programing

도커 이미지를 개인 저장소로 푸시하는 방법

testmans 2023. 9. 17. 12:10
반응형

도커 이미지를 개인 저장소로 푸시하는 방법

도커 이미지에 다음과 같이 태그가 지정되어 있습니다.me/my-image, 도커 허브에 개인 레포가 있어요me-private.
내가 내 것을 밀어줄 때me/my-image, 저는 항상 공개석상에 올라타게 됩니다.

이미지를 개인 레포에 구체적으로 푸시하기 위한 정확한 구문은 무엇입니까?

먼저 이미지에 정확하게 태그를 지정해야 합니다.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. docker login --username username

    • 생략할 경우 암호를 입력하라는 메시지가 표시--password에 저장되지 됩니다.
  2. docker tag my-image username/my-repo

  3. docker push username/my-repo

도커 레지스트리가 비공개이고 자체 호스팅되는 경우 다음을 수행해야 합니다.

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

먼저 도커 허브 계정으로 가서 레포를 작성합니다.다음은 제 도커 허브 계정의 스크린샷입니다.

사진을 보면 제 레포가 "chuangg"인 것을 알 수 있습니다.

이제 레포로 들어가서 이미지 이름을 클릭하여 비공개로 만듭니다.그래서 저는 "chuangg/gene_committed_image"를 누른 다음 설정 -> Make Private로 이동했습니다.그런 다음 화면의 지시를 따릅니다.

도커 이미지를 도커 허브에 업로드하는 방법

방법 #1 = 명령줄을 통해 이미지 푸시(cli)

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

네, 컨테이너 아이디여야 할 것 같습니다.이미지 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 logout"을 사용하여 로그아웃

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>

Image Docker Terminal 으로 Docker Image(pom.xml 에서 )mvn clean deploy -Pbuild-docker docker:push

# #에 여분의 로 #2의 #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 파일에 추가합니다.

"Docker Quickstart Terminal" "를 합니다.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:

Error #1 #1 을 동기화하지 <execution>이미지를 2배로 배포하려고 하고 타임스탬프를 병에 붙이기 때문에 maven 배포 단계를 사용합니다.를 사용했습니다.<phase>install</phase>.

두 가지 옵션이 있습니다.

  1. 허브에 들어가서 먼저 저장소를 만들고 개인으로 표시합니다.그러면 그 레포를 밀면 비공개가 됩니다.이것이 가장 일반적인 접근법입니다.

  2. 도커 허브 계정에 로그인하고 글로벌 설정으로 이동합니다.푸시하는 리포지토리에 대한 기본 가시성을 설정할 수 있는 설정이 있습니다.기본적으로 공용으로 설정되어 있지만, 비공개로 변경하면 기본적으로 푸시하는 모든 리포지토리가 비공개로 표시됩니다.계정에서 사용 가능한 개인 저장소를 충분히 확보해야 합니다. 그렇지 않으면 계획을 업그레이드할 때까지 저장소가 잠기게 됩니다.

참조: dock.docker.com

이 항목에서는 레지스트리 배포 및 구성에 대한 기본 정보를 제공합니다.

로컬 레지스트리 실행

레지스트리를 배포하려면 먼저 호스트에 도커를 설치해야 합니다.

레지스트리 컨테이너를 시작하려면 다음과 같은 명령을 사용합니다.

start_start.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는 이를 푸시할 때 레지스트리의 위치로 해석합니다.

    $ 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
    
Deploy a plain HTTP registry

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. 변경 내용을 적용하려면 도커를 다시 시작합니다.

도커허브에 리포지토리 만들기:

$docker tag IMAGE_ID UsernameOnDockerhub/repoNameOnDockerhub:latest

$docker push UsernameOnDockerhub/repoNameOnDockerhub:latest

참고: 여기 "repoNameOnDockerhub": 말씀하시는 이름의 저장소가 도커허브에 있어야 합니다.

"tag" : 그냥 태그입니다.

먼저 개인 저장소에 로그인합니다.

> 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

언급

다음은 도커 이미지를 도커 허브의 Private Repository로 푸시하는 단계입니다.

1 - 명령을 사용하여 Docker Images(도커 이미지)를 먼저 확인합니다.

docker images

2 - 도커 태그 명령 도움말 확인

docker tag --help

3 - 이제 생성된 이미지에 이름을 태그 지정합니다.

docker tag localImgName:tagName DockerHubUser\Private-repoName:tagName(태그 이름은 선택 사항입니다.은입니다.latest)

4 - 이미지를 DockerHub Private Repo로 푸시하기 전에 명령을 사용하여 DockerHub에 먼저 로그인합니다.

docker login 이름 및 dockerHub 사용자 이름 및 로그인할 암호 제공]

5- 이제 Docker Image를 개인 Repoosing 명령으로 푸시

docker push [options] ImgName[:tag]를 들면docker push DockerHubUser\Private-repoName:tagName

6- 이제 DockerHub Private Repo로 이동하면 이전 단계에서 TagName이라고 쓰인 이름으로 Docker 이미지가 개인 Repository에 푸시되는 것을 볼 수 있습니다.

간단한 작업 솔루션:

로 이동 https://hub.docker.com/PRIVATE 를 들어어이는인면를를면reoe를ahyjohnsmith/private-repositoryNAME/REPOSITORY이미지를 작성할 때 이미지에 사용합니다.

  • 일단 , ,docker login

  • 두번째로 "를 사용합니다.docker build -t johnsmith/private-repository:01 ." (여기서 01은 내 버전 이름입니다) 이미지를 만들기 위해 "를 사용합니다.docker images에 있는 된 이미지를 (수 텍스트 문자열만 붙여넣을 수 있어서 " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "

johnsmith/private-repository (REPOSITORY) 01(TAG) c5f4a2861d6e(IMAGE ID) 2일전(CREATED) 305MB(SIZE)

  • 로는 를 합니다.docker push johnsmith/private-repository:01(개인 레포는 여기 https://hub.docker.com/r/johnsmith/private-repository/) 예시가 될 것입니다.

알았어!

모든 이미지를 개인 저장소로 푸시할 수 있는 빠른 방법을 찾고 있는 사람이 있다면 내 bash 스크립트를 사용하면 됩니다. 그러면 모든 도커 이미지가 새 개인 레지스트리로 푸시됩니다.

#!/bin/bash

repo="<change_to_your_new_repo>"
remote_repo="<the_new_repo_name>"

for img in $(docker images --format "{{.Repository}}:{{.Tag}}")
do
        image=$(echo $img | cut -d ":" -f 1)
        image_tag=$(echo $img | cut -d ":" -f 2)

        docker image tag $image:$image_tag $repo/$remote_repo/$image:$image_tag
        docker image push $repo/$remote_repo/$image:$image_tag

        docker rmi $repo/$remote_repo/$image:$image_tag
done

퍼블릭이든 프라이빗이든 도커 허브 계정으로 푸시할 때 프로세스는 동일합니다.

OP는 이렇게 말했습니다.

저는 저/my-image로 태그된 도커 이미지를 가지고 있고, 저는 도커 허브에 저-프라이빗이라는 이름의 개인 레포를 가지고 있습니다.
제가 제 이미지를 누를 때, 저는 항상 공개 레포를 치게 됩니다.

)입니다.me-private)은 것으로 와 을 와 ( )my-imagerepo와 이미지의 이름이 같아야 합니다(태그 제외).

TLDR;
nmy-image아니면my-image:tag이름을 바꾸어야 합니다my-image.

이 OP 된 로 의 로 된 가 의 me-private한 것으로 Docker Hub라는 이름의 레포를 만듭니다.my-image.

설정을 변경하여 모든 리포지토리를 비공개로 만들지 않는 한 새 리포지토리는 기본적으로 공개됩니다.


2022년 6월 현재 도커 허브 저장소를 설정하는 프로세스는 다음과 같습니다.

다음 값이 주어지면:

이름
= 이미지=지
=그=그

1)로컬 이미지에 태그(또는 커밋)를 지정하고 사용자 이름으로 접두사를 추가합니다.

docker tag theimage:thetag yourusername/theimage:thetag

참고:

  • 조직 있는 경우 이미지의 접두사이중으로 지정해야 합니다.
docker tag theimage:thetag yourusername/yourorganizationname/theimage:thetag
  • 만약 당신의 태그가latest,:thetag부품이 제외될 수 있음, 도커는 다음과 같이 가정합니다.:latest:thetag

2)접두사가 붙은 이미지를 도커 허브로 밀어 넣습니다.

 docker push yourusername/theimage:thetag

오어

 docker push yourusername/yourorganizationname/theimage:thetag

개인 보고서의 경우 다음과 같은 추가 단계 중 하나가 필요합니다.

어느 하나

위의 1단계 전에 Docker Hub 계정에 개인 저장소를 만듭니다.

은 은 과 과 와 같아야 합니다.theimage당신이 밀어붙일 계획이라고 생각합니다.하지 포함 안 함thetag저장소 이름의 일부분입니다.를 들어, 당신의 예,의가gubuntu:14.04, 당신은 당신의 저장소의 이름을 지을 것입니다.ubuntu가 달린 모든 - . (가 - , ),ubuntu:latest,ubuntu:14.04- - - 에 .ubuntu repo)

아니면

저장소를 미리 생성하지 않은 경우(필수는 아님!): 도커 허브에 있는 계정으로 이동하여 새로 푸시된 repo를 클릭한 다음 설정 탭을 클릭하고 repo를 비공개로 만듭니다.

도커허브에는 "기본 개인정보" 설정도 있습니다.https://hub.docker.com/settings/default-privacy 을 방문하거나 계정 설정->기본 개인 정보 보호를 클릭합니다.

토글을 "비공개"로 설정합니다.

이것은 완전한 해결책은 아니지만 적어도 기본적으로 비공개가 기본적으로 공개보다 낫습니다.돌아가서 원하는 것을 공개할 수 있습니다.

로컬에서 이미지를 당긴 후 다음 작업을 수행할 수 있습니다.

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

그런 다음 동일한 태그를 사용하여 도커 푸시.

도커 푸시 NAME[:태그]

예:

docker tag gvenzl/oracle-xe:21-slim quay.io/repository/yourDirectory/oracle_xe:oracle-xe

docker push quay.io/repository/yourDirectory/oracle_xe:oracle-xe

언급URL : https://stackoverflow.com/questions/28349392/how-to-push-a-docker-image-to-a-private-repository

반응형