ผมมีภาพนักเทียบท่าติดแท็กเป็นme/my-image
และฉันมีซื้อคืนภาคเอกชนใน dockerhub me-private
ชื่อ
เมื่อฉันผลักme/my-image
ฉันลงเอยกระทบกับ repo สาธารณะเสมอ
ไวยากรณ์ที่ถูกต้องในการผลักดันภาพของฉันไปที่ repo ส่วนตัวของฉันคืออะไร?
ผมมีภาพนักเทียบท่าติดแท็กเป็นme/my-image
และฉันมีซื้อคืนภาคเอกชนใน dockerhub me-private
ชื่อ
เมื่อฉันผลักme/my-image
ฉันลงเอยกระทบกับ repo สาธารณะเสมอ
ไวยากรณ์ที่ถูกต้องในการผลักดันภาพของฉันไปที่ repo ส่วนตัวของฉันคืออะไร?
คำตอบ:
คุณต้องติดแท็กรูปภาพให้ถูกต้องก่อนด้วย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 tag 518a41981a6a me-private.com/myPrivateImage && docker push me-private.com/myPrivateImage
docker login
แรกจากนั้นติดแท็กรูปภาพของคุณdocker tag 518a41981a6a me-private/myPrivateImage
แล้วกด:docker push me-private/myPrivateImage
เพียงสามขั้นตอนง่ายๆ:
docker login --username username
--password
สิ่งที่แนะนำเนื่องจากไม่ได้จัดเก็บไว้ในประวัติคำสั่งของคุณdocker tag my-image username/my-repo
docker push username/my-repo
--password
ธงทิ้งไว้หากคุณไม่ต้องการให้รหัสผ่านของคุณปรากฏในประวัติ มันจะแจ้งให้คุณ
ก่อนอื่นให้ไปที่บัญชี Docker Hub ของคุณแล้วทำ repo นี่คือภาพหน้าจอของบัญชี Docker Hub ของฉัน:
จากรูปคุณสามารถเห็น repo ของฉันคือ“ chuangg”
ตอนนี้ไปที่ repo และทำให้เป็นส่วนตัวโดยคลิกที่ชื่อภาพของคุณ ดังนั้นสำหรับฉันฉันคลิกที่“ chuangg / gene_commited_image” จากนั้นฉันไปที่การตั้งค่า -> ทำให้เป็นส่วนตัว จากนั้นฉันทำตามคำแนะนำบนหน้าจอ
วิธีอัปโหลดภาพ DOCKER ของคุณไปยัง DOCKER HUB
วิธีที่ # 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
ใช่คุณต้องเข้าสู่ระบบก่อน ออกจากระบบโดยใช้“ นักเทียบท่าออกจากระบบ”
4) docker push chuangg/gene_commited_image
วิธีที่ # 2 = ผลักรูปภาพของคุณโดยใช้ pom.xml และบรรทัดคำสั่ง
หมายเหตุฉันใช้ Maven Profile ชื่อ "build-docker" หากคุณไม่ต้องการใช้โปรไฟล์ให้ลบ<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 Terminal เพื่อปรับใช้ Docker Image (จากไดเรกทอรีที่ 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 \ directory และเพิ่มลงในไฟล์ config.json ของคุณ:
ตอนนี้อยู่ในเทอร์มินัล Docker Quickstart type = ของคุณ mvn clean install -Pbuild-docker
สำหรับผู้ที่ไม่ได้ใช้ Maven Profiles ให้พิมพ์ 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 = อย่าซิงค์<execution>
กับเฟสการปรับใช้ maven เพราะ maven จะพยายามปรับใช้อิมเมจ 2x และวางการประทับเวลาบน jar <phase>install</phase>
นั่นเป็นเหตุผลที่ผมใช้
หากนักเทียบท่ารีจิสตรีของคุณเป็นส่วนตัวและโฮสต์ด้วยตนเองคุณควรทำสิ่งต่อไปนี้:
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
มีสองตัวเลือก:
ไปที่ฮับและสร้างที่เก็บก่อนแล้วทำเครื่องหมายว่าเป็นส่วนตัว จากนั้นเมื่อคุณกดไปที่ repo มันจะเป็นแบบส่วนตัว นี่เป็นวิธีการทั่วไป
เข้าสู่บัญชีของนักเทียบท่าฮับของคุณและไปที่การตั้งค่าระดับโลก มีการตั้งค่าที่ให้คุณตั้งค่าความสามารถในการมองเห็นเริ่มต้นของคุณสำหรับที่เก็บข้อมูลที่คุณกด ตามค่าเริ่มต้นจะถูกตั้งค่าเป็นสาธารณะ แต่หากคุณเปลี่ยนเป็นส่วนตัวที่เก็บข้อมูลทั้งหมดที่คุณกดจะถูกทำเครื่องหมายเป็นส่วนตัวตามค่าเริ่มต้น เป็นสิ่งสำคัญที่จะต้องทราบว่าคุณจะต้องมี repos ส่วนตัวให้เพียงพอในบัญชีของคุณมิฉะนั้น repo จะถูกล็อคจนกว่าคุณจะอัพเกรดแผนของคุณ
docker push
ออกคำสั่ง แต่ถ้าฉันเข้าใจคำถามถูกต้องไม่มีคำตอบใดที่ถูกต้องและคำตอบที่ Ken Cochrane โพสต์ไว้ข้างต้นเป็นคำตอบเดียวที่ควรได้รับการยอมรับ
สร้างพื้นที่เก็บข้อมูลบน dockerhub:
$docker tag IMAGE_ID UsernameOnDockerhub/repoNameOnDockerhub:latest
$docker push UsernameOnDockerhub/repoNameOnDockerhub:latest
หมายเหตุ : ที่นี่ "repoNameOnDockerhub": ที่เก็บที่มีชื่อที่คุณพูดถึงจะต้องปรากฏบน dockerhub
"ล่าสุด": เป็นเพียงแท็ก
Ref: 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
ดึงubuntu:16.04
ภาพจาก Docker Hub
$ 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
บน Linux หรือC:\ProgramData\docker\config\daemon.json
บน Windows Server ถ้าคุณใช้Docker for Mac
หรือDocker for Windows
คลิกเพิ่มในDocker icon -> Preferences -> Daemon
insecure registry
หากdaemon.json
ไฟล์ไม่มีอยู่ให้สร้างขึ้น สมมติว่าไม่มีการตั้งค่าอื่น ๆ ในไฟล์ควรมีเนื้อหาดังต่อไปนี้:
{
"insecure-registries" : ["myregistrydomain.com:5000"]
}
เมื่อเปิดใช้งานการลงทะเบียนที่ไม่ปลอดภัย Docker จะทำตามขั้นตอนต่อไปนี้:
รีสตาร์ท Docker เพื่อให้การเปลี่ยนแปลงมีผล
> 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
วิธีการทำงานที่เรียบง่าย:
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 (รหัสภาพ) 2 วันที่ผ่านมา (สร้างแล้ว) 305MB (ขนาด)
docker push johnsmith/private-repository:01
(repo ส่วนตัวของคุณจะอยู่ที่นี่ตัวอย่างhttps://hub.docker.com/r/johnsmith/private-repository/ )ทำ!