Install Habor (Container Registry) ฉบับภาษาไทย

Damrongsak Reetanon
3 min readNov 30, 2020

--

จากประกาศของ ​Docker Inc. ที่จะจำกัดจำนวน pull image จาก Docker Hub ให้เหลือ 100 หรือ 200 ครั้งต่อ 6 ชั่วโมง ผมก็เลยอาจจะมีปัญหา เพราะว่าต้องไปสอนนักเรียนประมาณ 50 คน ก็เลยต้องหาทางออก

The rate limits of 100 container image requests per six hours for anonymous usage, and 200 container image requests per six hours for free Docker accounts are now in effect. Image requests exceeding these limits will be denied until the six hour window elapses.Ref: https://www.docker.com/increase-rate-limits

หลังจากลองมาหลายตัว ผมตัดสินใจเลือก ​Harbor ด้วยความลงตัวที่สามารถทำงานร่วมกันหลาย ๆ อย่างได้ Harbor เป็น OpenSource Container Registry โครงการภายได้ CNCF (Cloud Native Computing Foundation) ที่อยู่ใน สถานะ Graduated แล้ว

ว่ากันไปจริง ๆ แล้ว Harbor เองก็มี Deploy Harbor with the Quick Installation Script ให้อยู่แล้ว ….. แต่ ….. มันไม่ work !!!! เพราะว่า ใน harbor.yml ที่เป็นข้อมูลสำหรับ installation เขาต้องการ key & cert สำหรับทำ HTTPS ผมก็เลยค่อย ๆ แกะ script นี้มาทำเป็นเอกสารชุดนี้

0. รายละเอียด Harware ที่ใช้

OS: Ubuntu 20.04 TLS
vCPU: 2
Memory: 4 GB
VM template: https://cloud-images.ubuntu.com/focal/
  1. ติดตั้ง software ที่จำเป็น
{
sudo apt update -y
sudo apt install golang-cfssl apt-transport-https ca-certificates curl gnupg-agent software-properties-common
}

2. เตรียมความพร้อม

{
sudo swapoff --all
sudo sed -ri '/\sswap\s/s/^#?/#/' /etc/fstab
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
}

3. เตรียม TLS Key และ Certificate

{
mkdir ~/pki
cd ~/pki
IPorFQDN=$(hostname -I|cut -d" " -f 1)
cat > ca-config.json <<EOF
{
"signing": {
"default": {
"expiry": "8760h"
},
"profiles": {
"exacademy": {
"usages": ["signing", "key encipherment", "server auth", "client auth"],
"expiry": "8760h"
}
}
}
}
EOF

cat > ca-csr.json <<EOF
{
"CN": "exacademy",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "TH",
"O": "exacademy",
"OU": "CA",
"ST": "Bangkok"
}
]
}
EOF

cfssl gencert -initca ca-csr.json | cfssljson -bare ca
cp ca-key.pem ca.key
cp ca.pem ca.crt
}
{
cat > harbor-csr.json <<EOF
{
"CN": "harbor",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "TH",
"O": "harbor",
"OU": "exacademy",
"ST": "Bangkok"
}
]
}
EOF

cfssl gencert \
-ca=ca.pem \
-ca-key=ca-key.pem \
-config=ca-config.json \
-hostname=${IPorFQDN} \
-profile=exacademy \
harbor-csr.json | cfssljson -bare harbor

mv harbor-key.pem harbor.key
mv harbor.pem harbor.crt
cd ..
}

4. ติดตั้ง Docker

{
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update -y
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
}

{
IPorFQDN=$(hostname -I|cut -d" " -f 1)
sudo tee /etc/docker/daemon.json >/dev/null <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"insecure-registries" : ["$IPorFQDN:443","$IPorFQDN:80","0.0.0.0/0"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
sudo mkdir -p /etc/systemd/system/docker.service.d
#sudo groupadd docker
MAINUSER=$(logname)
sudo usermod -aG docker $MAINUSER
sudo systemctl daemon-reload
sudo systemctl restart docker
}

5. ติดตั้ง Docker Compose

{
COMPOSEVERSION=$(curl -s https://github.com/docker/compose/releases/latest/download 2>&1 | grep -Po [0-9]+\.[0-9]+\.[0-9]+)
sudo curl -L "https://github.com/docker/compose/releases/download/$COMPOSEVERSION/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
}

6. ติดตั้ง Harbor

{
IPorFQDN=$(hostname -I|cut -d" " -f 1)
KEY="\/home\/drs\/pki\/harbor.key"
CERT="\/home\/drs\/pki\/harbor.crt"
#latest version
#HARBORVERSION=$(curl -s #https://github.com/goharbor/harbor/releases/latest/download 2>&1 | grep -Po [0-9]+\.[0-9]+\.[0-9]+)
#curl -s https://api.github.com/repos/goharbor/harbor/releases/latest | grep browser_download_url | grep online | cut -d '"' -f 4 | wget -qi -
#tar xvf harbor-online-installer-v$HARBORVERSION.tgz
#cd harbor
#fix v2.1.1
HARBORVERSION=2.1.1
wget -qi https://github.com/goharbor/harbor/releases/download/v2.1.1/harbor-online-installer-v2.1.1.tgz
tar xvf harbor-online-installer-v$HARBORVERSION.tgz
cd harbor
cp -a harbor.yml.tmpl harbor.yml
sed -i "s/reg.mydomain.com/$IPorFQDN/g" harbor.yml
sed -i "s/\/your\/certificate\/path/$CERT/g" harbor.yml
sed -i "s/\/your\/private\/key\/path/$KEY/g" harbor.yml
}
#Install Harbor with Clair and Chartmuseum
#sudo ./install.sh --with-clair --with-chartmuseum
#Install Harbor only
sudo ./install.sh

7. ใช้งาน Harbor ผ่านทาง browser ด้วยผู้ใช้ admin รหัสผ่าน Harbor12345

#มูลค่าความสุข

--

--

Damrongsak Reetanon
Damrongsak Reetanon

Written by Damrongsak Reetanon

OpenSource |Cloud Computing|Automation|DevOps

No responses yet