สิ่งที่ควรมีก่อนทำ Step ข้างล่าง
ขั้นตอนนี้หากมี Domain name อยู่แล้วไม่จำเป็นต้องทำ
$ echo "registry.softnix" > /etc/hostname
#Restart
$ init 6
$ mkdir -p /home/registry/{certs, data, auth}
ขั้นตอนนี้หากมี Domain name อยู่แล้วไม่จำเป็นต้องทำ
$ ssh-keygen
$ ssh-copy-id registry.softnix
#ถ้ามีเครื่อง Client ให้ทำเช่นเดียวกันทุกๆเครื่อง
$ ssh-copy-id client_host
$ vim /etc/docker/daemon.json
เพิ่มข้อความ Json ชุดนี้ลงไป
{
"allow-nondistributable-artifacts": [
"registry.softnix:5000"
]
}
ขั้นตอนนี้หากมี Domain name อยู่แล้วไม่จำเป็นต้องทำ
$ vim /etc/hosts
#Add <IP Address> <Hostname>
192.168.10.109 registry.softnix
192.168.10.23 another.client
ขั้นตอนเป็นการทำ Self-certs ใช้เฉพาะภายใน Local Network หากมี Domain name อยู่แล้วไม่ต้องทำ
$ openssl req -newkey \
rsa:4096 \
-nodes -sha256 -keyout /home/registry/certs/ca.key \
-x509 -days 365 -out /home/registry/certs/ca.crt \
-subj "/CN=registry.softnix" \
-addext "subjectAltName = DNS:registry.softnix"
$ mkdir -p /etc/docker/certs.d/registry.softnix:5000
$ cp /home/registry/certs/ca.crt /etc/docker/certs.d/registry.softnix:5000/ca.crt
#ครั้งแรกให้รันคำสั่งนี้ก่อนเพื่อสร้างไฟล์ขึ้นมาใหม่
$ htpasswd -Bc /home/registry/auth/htpasswd username
#ถ้าอยากจะเพิ่ม User เพิ่มเติมให้รันคำสั่งนี้
$ htpasswd -B /home/registry/auth/htpasswd username
$ docker run --name registry \
-p 5000:5000 \
--restart=always \
-v /home/registry/certs:/etc/certs \
-v /home/registry/auth:/etc/auth \
-v /home/registry/data:/var/lib/registry \
-e "REGISTRY_AUTH=htpasswd" \
-e REGISTRY_STORAGE_DELETE_ENABLED=true
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/etc/auth/htpasswd \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/etc/certs/ca.crt \
-e REGISTRY_HTTP_TLS_KEY=/etc/certs/ca.key \
-d registry
version: '3.8'
services:
registry:
image: registry
container_name: registry
restart: always
ports:
- 5000:5000
volumes:
- /home/registry/certs:/etc/certs
- /home/registry/auth:/etc/auth
- /home/registry/data:/var/lib/registry
environment:
REGISTRY_STORAGE_DELETE_ENABLED: true
REGISTRY_AUTH: htpasswd
REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm
REGISTRY_AUTH_HTPASSWD_PATH: /etc/auth/htpasswd
REGISTRY_HTTP_TLS_CERTIFICATE: /etc/certs/ca.crt
REGISTRY_HTTP_TLS_KEY: /etc/certs/ca.key
ขั้นตอนนี้หากมี Domain name อยู่แล้วไม่จำเป็นต้องทำ
$ $ssh-keygen
#แลก Key ไปที่ฝั่ง Server
$ $ssh-copy-id registry.softnix
#ฝั่ง Server แลกมา
$ $ssh-copy-id client_host
ขั้นตอนนี้หากมี Domain name อยู่แล้วไม่จำเป็นต้องทำ
$ mkdir -p /etc/docker/certs.d/registry.softnix:5000
$ scp registry.soft$ $nix:/etc/docker/certs.d/registry.softnix:5000/ca.crt \
/etc/docker/certs.d/registry.softnix:5000
$ docker login registry.softnix:5000
#Login
Username: ที่ได้สร้างไว้ใน htpasswd
Password: ที่ได้สร้างไว้ใน htpasswd
#ลอง pull มาจาก docker.io
$ docker pull alpine:latest
$ docker images
$ docker tag image_id registry.softnix:5000/alpine:latest
#Pattern
#<registry_server>:<port>/<images_name>:<tag>
$ docker push registry.softnix:5000/alpine:latest
$ docker pull registry.softnix:5000/alpine:latest
https://registry.softnix:5000/v2/_catalog
{
"repositories":[
"alpine",
"debian",
"ubuntu"
]
}
$ cd /usr/local/bin
$ curl -O https://raw.githubusercontent.com/ezynook/docker-private-registry/main/remove_image.sh
$ mv remove_image.sh remove_image
$ chmod +x remove_image
$ remove_image
หลังจากรัน Script จะมีช่องให้กรอกดังนี้
-
- Image Name
-
- Tag Name
ถ้าไม่มีการกรอก Tag Name จะเป็นการลบ Image นั้นๆ ทุก Tag หากระบุทั้ง Image name และ Tag name จะเป็นการลบ Image เฉพาะ Tags ที่ระบุไว้เท่านั้น
Pasit Yodsoi @Data Engineer