Offline ( in house ) Docker sistemi çalıştırma genel mantığı

Mustafa Akseli
3 min readOct 2, 2023

Uzun aradan sonra tekrar merhaba;

Photo by Amo on Unsplash

Müşterileriniz için özel çözümler gerekli olduğu zamanlar gelebilir. Bu yazıya konu olan sorun ve çözümü hakkında kısa bilgilendirme yapayım. Docker kod örnek ve test aşamasını sonraya bırakayım.

Durum; müşteriniz, çözüm ürettiğiniz yazılımı kendi kapalı devre sisteminde çalıştırmanızı istedi ve sizde mimarinizi docker üzerinde çalıştırıyorsunuz. Sizin http bir servisiniz var, bu servisi çalıştırırken nginx ve redis e ihtiyacınız olduğunu var sayalım.

Müşteri bu ister :) Şimdi kolları sıvayalım;

Öncelikle docker üzerinde çalıştırdığınız containerlerin isimlendirme ve versiyon numaralandırma işleminizi yapmanız gerekli; Örnek olarak, üç adet image var ve bunlara birde “registry” isimli image i ekliyorsunuz.

  1. nginx:12.34
  2. diveloper-sipesyal-http-service:1.9.34
  3. redis:1.8.34
  4. registry:2.8.2

İlk üçünü siz kullanıyordunuz ama “registry” ne işe yaracak ?

Registry image, sizin kullanıdığınız image lar için lokalinizde “image registry” çalıştırırarak, saklamanıza ve dağıtmanıza olanacak tanır.

Docker Offical image ı https://hub.docker.com/_/registry/tags adresinden edinebilirsiniz. Kendi açıklamaları ise “Docker görüntülerini depolamak ve dağıtmak için Docker Registry 2.0 uygulaması” şeklindedir.

Çalışma örneğine geçmeden önce, tüm bu işlemleri herhangi bir linux PC de yaptığınızı varsayıyorum ve örneklerdeki komutlar linux üzerinde çalıştığını bildiğim komutları paylaşıyorum.

Şimdiii; Çalışma örneğine geçelim.

  1. Öncelikle internet e bağlanan bir pc den “docker pull ve save” komutu ile registry image i indirmeniz gerekli
    docker pull registry:2.8.2 && docker save registry:2.8.2 -o registry.save
  2. Komutu çalıştırdıktan sonra “registry.save” isimli dosya oluşmuş olduğunu görmeniz gerekli. Aşağıdaki komutla veya alttaki docker-compose dosyası ile kendi image registry sunucunuzu ayağa kaldırın;
docker run -d \
-p 63434:5000 \
--restart=always \
--name registry \
-v ./data:/var/lib/registry \
registry:2.8.2

“registry” image bulunamıyor hatası verirse; docker load -i registry.save terminal de çalıştırmanız gerekli.

3. Peki bizim image larımız ne olacak diyebilirsiniz; sıra oraya geldi. Her bir kullanıdığınız image için tek tek “tag ve push” komutlarını kullanmalısınız;

docker tag regis:2.8.2 0.0.0.0:63434/redis:2.8.2
docker push 0.0.0.0:63434/redis:2.8.2

docker tag nginx:12.34 0.0.0.0:63434/nginx:12.34
docker push 0.0.0.0:63434/nginx:12.34

docker tag diveloper-sipesyal-http-service:1.9.34 0.0.0.0:63434/diveloper-sipesyal-http-service:1.9.34
docker push 0.0.0.0:63434/diveloper-sipesyal-http-service:1.9.34

Artık tüm image larınızı offline a çekmiş oldunuz. Eğer imaga larda güncelleme yapmanız gerekirse tekrar “tag ve push” komutlarını kullanabilirsiniz.

Son olarak tüm bu yaptıklarımızın çalışabiliyor olması için, müşterinizin offline ortamındaki docker kurulu sunucuda “/etc/docker/daemon.json” isimli dosyanın içeriğine şunu koymalısınız;

{ 
"insecure-registries":["0.0.0.0:63434"]
}

Peki neden daemon.json daki bu değişikliği yaptık ?

Sunucuzdaki docker default olarak kullanmak istediğiniz image lar için hub.docker.io adresine sormaya ayarlanmıştır. Bizde, “artık” bizim image registry adresimiz var, gel sen lokalden al diyoruz;

Yaniii artık offline çalışmış oluyoruz ;)

Json dosyasını düzenledikten sonra servisi kapatıp yeniden başlatmayı unutmayınız :)

sudo systemctl restart docker

Artık yapmanız gereken şey; Müşterinizin ortamında kendi reponuzu ( offline dosya olarak ) taşımak ve run etmek. Umarım açıklayıcı olmuştur.

Eğer Daha önce hazır olan bir makineden başka makineye taşınmanız gerekirse, kullanacağınız imagelar için öncelike docker pull 0.0.0.0:5000/nginx:1.21.6 şeklinde tekrar yüklemeniz gerekmektedir.

Halen registry.docker.io veya başka bir lokasyondan çekmeye çalışıyor ise, docker-compose ve Dockerfile dosyalarınızdaki image isimlerinin önüne “127.0.0.1:5000" ibaresini ekleyin;
nginx:1.21.6 yazan yeri -> 127.0.0.1:5000/nginx:1.21.6 şeklinde değiştirmelisiniz.

örnek registry docker-compose file aşağıdaki gibidir. 
** Windows ortamında insecure-registries ifadesini tanımlarken 0.0.0.0 değil -> localhost:5000 olarak tanımlamanız iyi olacaktır.
# created by x.com/makseliDEV
version: '2'
services:
registry:
restart: always
image: registry:2.8.2
ports:
- 127.0.0.1:63434:5000
volumes:
- ./data:/var/lib/registry

Sorularınız için yorumları kullanabilirsiniz ;)

İyi çalışmalar millet…

--

--

Mustafa Akseli

#golang #php #backendDEV #golang #linuxcu #docker #bike #baba vee #motosiklet #entrepreneur #bulunsun