Docker için yardımcı script

Aug 5, 2018 3 minute read

Docker’da projenin çalıştırılacağı ortam sayısı arttıkça, konteynerler çoğaldıkça, yapılandırma dosyalarında satır sayısı uzadıkça komutlar da uzamaya, parametreler artmaya başlıyor. Django shell’e nasıl bağlanılıyordu, çeviri dosyalarını nasıl güncelliyorduk, frontend sunucusu hazır mı değil mi nasıl anlıyorduk demek yerine, sık kullanılan komutları basit bir scriptle çalıştırırsak beni rahatlatır diye düşündüm ve internette bununla ilgili bir araştırma yaptım.

Öncelikle bu tip işler için Makefile kullanma önerisi çok hoşuma gitti. Epey basit ve anlaşılır bir sözdizimi var, komut satırında çift tab yapıp autocomplete yapabiliyorsunuz ve bu tip yardımcı özellikler epey verimliliği artırıyor. Zaten amacımız verimliliği artırmak. Ama Windows kullananların Makefile’i ayrıca yüklemesi gerekiyor.

Makefile’i yüklemek (veya yükletmek) bir problem değil; ama yine de alternatiflere bakma gereği duydum1. Docker compose‘da her bir komut için ayrı ayrı servis oluşturma fikri çok mantıklı gelmedi, bir de help çıktısı ile tüm komutları açıklamalarıyla birlikte görmek istiyordum. O nedenle basit bir shell scripting ile zaten bağımlılığımız olan eldeki araçları kullanarak bu işi yapabileceğimizi gördüm.

Kısaca

  • Komutu parametresiz çalıştırdığımda bana nasıl kullanabileceğimi gösterecek.
  • Sistemin production mu, yoksa geliştirme ortamı mı olduğunu ben belirleyeceğim.
  • Komutu çalıştırırken emin olmak için ortamı ve hatırlatmak için asıl komutu gösterecek.
$ ./do.sh
 Available environments
   - DEV (default)
   - PROD
   - STAGING

 Available commands
   > shell               Open Bash
   > start               Create and start containers
   > status              List containers
   > stop                Stop services

Öntanımlı ortam, DEV:

$ ./do.sh status
Environment: development
    Command: docker-compose -f docker-compose.yml -f docker-compose.dev.yml ps

Name                  State      Ports
----------------------------------------------------------------------------------------------
prj_amqp_1            Up         15671/tcp, 15672/tcp, 25672/tcp, 4369/tcp, 5671/tcp, 5672/tcp
prj_backend_1         Exit 137
prj_celery-beat_1     Up
prj_celery-worker_1   Up
prj_db_1              Up         5432/tcp
prj_es_1              Up         9200/tcp, 9300/tcp
prj_frontend_1        Up         0.0.0.0:8080->8080/tcp

STAGING ortamını kullanmak istersek:

$ ENV=STAGING ./do.sh shell
Environment: staging
    Command: docker-compose -f docker-compose.yml -f docker-compose.staging.yml up -d db frontend backend ...

...

Windows PowerShell‘de kullanmak için:

> $env:ENV = "PROD";
> bash do.sh status
Environment: production
    Command: docker-compose -f docker-compose.yml -f docker-compose.prod.yml ps
...

Windows’ta Git Bash kullanıyorsanız:

$ ENV=STAGING winpty bash do.sh status
Environment: staging
    Command: docker-compose -f docker-compose.yml -f docker-compose.staging.yml ps
...

Örnek script

Yannick PEREIRA-REIS1‘e teşekkürler. Az Mesai slack grubuna da geribildirim için teşekkürler.