도커 이미지를 개인 저장소로 푸시하는 방법
도커 이미지에 다음과 같이 태그가 지정되어 있습니다.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
간단한 세 가지 단계만 있으면 됩니다.
docker login --username username
- 생략할 경우 암호를 입력하라는 메시지가 표시
--password
에 저장되지 됩니다.
- 생략할 경우 암호를 입력하라는 메시지가 표시
docker tag my-image username/my-repo
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>
.
두 가지 옵션이 있습니다.
허브에 들어가서 먼저 저장소를 만들고 개인으로 표시합니다.그러면 그 레포를 밀면 비공개가 됩니다.이것이 가장 일반적인 접근법입니다.
도커 허브 계정에 로그인하고 글로벌 설정으로 이동합니다.푸시하는 리포지토리에 대한 기본 가시성을 설정할 수 있는 설정이 있습니다.기본적으로 공용으로 설정되어 있지만, 비공개로 변경하면 기본적으로 푸시하는 모든 리포지토리가 비공개로 표시됩니다.계정에서 사용 가능한 개인 저장소를 충분히 확보해야 합니다. 그렇지 않으면 계획을 업그레이드할 때까지 저장소가 잠기게 됩니다.
참조: 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
도커 허브에서 레지스트리로 이미지 복사
를 .
ubuntu:16.04
도커 허브의 이미지.$ docker pull ubuntu:16.04
에 :
localhost:5000/my-ubuntu
이미지에 됩니다. 그러면 기존 이미지에 대한 추가 태그가 생성됩니다.태그의 첫 번째 부분이 호스트 이름과 포트인 경우, Docker는 이를 푸시할 때 레지스트리의 위치로 해석합니다.$ docker tag ubuntu:16.04 localhost:5000/my-ubuntu
이미지를 실행 중인 로컬 레지스트리로 푸시
localhost:5000
:$ docker push localhost:5000/my-ubuntu
로컬로 캐시된 영상을 제거합니다. 해서다다가 .
localhost:5000/my-ubuntu
레지스트리에서 가져온 이미지입니다.$ docker image remove ubuntu:16.04 $ docker image remove localhost:5000/my-ubuntu
를 .
localhost:5000/my-ubuntu
로컬 레지스트리에서 가져온 이미지입니다.$ docker pull localhost:5000/my-ubuntu
docs.docker.com 에 따르면, 이것은 매우 안전하지 않으며 권장되지 않습니다.
편집합니다.
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로 다시 이동합니다.
- 일단 HTTPS를 사용해보세요.
변경 내용을 적용하려면 도커를 다시 시작합니다.
도커허브에 리포지토리 만들기:
$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-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일전(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-image
repo와 이미지의 이름이 같아야 합니다(태그 제외).
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
'programing' 카테고리의 다른 글
12c에서 데이터 펌프 덤프 위치 찾기 (0) | 2023.09.17 |
---|---|
MVC, C# 및 jQuery를 사용하여 CSV로 내보내기 (0) | 2023.09.17 |
Oracle 업데이트가 중지됨 (0) | 2023.09.12 |
AppDelegate 인스턴스 변수 참조 (0) | 2023.09.12 |
Oracle SQL - 열의 값을 기준으로 문자를 반복하는 방법 (0) | 2023.09.12 |