15 puan yazan GN⁺ 2024-01-15 | 7 yorum | WhatsApp'ta paylaş

#! nedir?

  • #! ("shebang" diye okunur), Unix'te çoğunlukla Python veya Bash gibi betik dilleri için kullanılan bir gelenektir
  • Bunun, çapraz platformda ve farklı Linux dağıtımlarında uygulama dağıtımı için tek bir dosya halinde paketleme amacıyla nasıl kullanıldığına dair bir örnek tanıtılıyor
  • Örnek Dockerfile, backend, veritabanı ve UI dahil tam yığın bir sunucuyu tek bir dosyada yapılandırıyor
  • Cosmopolitan Libc'ye benziyor, ancak uygulama paketleme için tasarlanmış

Neden kullanılıyor?

  • Neden kullanılmasın ki?

Güvenli mi?

  • Muhtemelen değil.

Kullanmalı mıyım?

  • İsterseniz kullanabilirsiniz.

Performansı iyi mi?

  • Olabilir.

Bakımı yapılabilir mi?

  • Hayır.

Çalışıyor mu?

  • Evet.

Nasıl çalıştırılır?

  • Şu komutla çalıştırabilirsiniz: chmod +x ./Dockerfile ./Dockerfile
  • Ardından http://127.0.0.1:8080 adresine gidin.

GN⁺ görüşü

  • Bu yazı, #! (shebang) kullanarak tek bir Dockerfile ile tam yığın bir sunucuyu paketlemenin sıra dışı bir yöntemini tanıtıyor.
  • Teknik merakı tetikliyor ve geleneksel uygulama dağıtım yöntemlerine yeni bir yaklaşım sunuyor.
  • Bu yöntem bakım ve güvenilirlik açısından önerilmese de, deneysel ve yenilikçi projelerle ilgilenen geliştiriciler için ilgi çekici bir alternatif olabilir.

7 yorum

 
minhoryang 2024-01-17

<<EOF gibi bir heredoc kullanmak için Dockerfile'ın en üstüne # syntax = docker/dockerfile:1.4.0 eklemek gerekiyor. Şaşırtıcı olan ise syntax'ın da Docker registry'den çekilmesi.

 
pmc7777 2024-01-16

Vay canına... bu yılın en büyük zihinsel şoku bu oldu ahahahahah

 
arfwene 2024-01-15

Eğlenceli bir yöntemmiş.

 
bbulbum 2024-01-15

Haha... gerçekten çok yaratıcı.

 
sagee 2024-01-15

Vay be... Bu gerçekten çok yaratıcı. Sanki betonarme kombinasyonunu keşfetmiş gibi... demek biraz abartı olur ama hoşuma gitti.
#! shebang tam da Dockerfile'da # yorum karakteri olduğu için böyle bir hilenin işe yaraması da ayrı güzel...
Bundan sonra build-run-test.sh gibi ayrı bir dosya yerine bunu Dockerfile'a koymak gerekir sanırım.

 
GN⁺ 2024-01-15
Hacker News görüşleri
  • nix-shell shebang kullanım örneği

    • nix-shell shebang kullanarak, gerekli tüm bağımlılıkları içeren çalıştırılabilir bir betiğin nasıl oluşturulacağı açıklanıyor.
    • Görüntüyü %50 küçülten bir Python betiği örneği veriliyor.
    • Betiğe çalıştırma izni verildiğinde (chmod +x), belirtilen bağımlılıklara sahip bir çalıştırılabilir dosya haline geliyor.
  • /usr/bin/env içindeki -S / --split-string seçeneği

    • GNU Coreutils 8.30'dan beri kullanılabilen -S seçeneği açıklanıyor.
    • Bu seçenek standart dışı bir davranışa dayanıyor ve yalnızca tüm metni çalıştırılabilir dosyanın argümanları olarak işleyen işletim sistemlerinde çalışıyor.
    • Modern GNU/Linux dağıtımlarının, BSD'lerin ve macOS'in çoğunda bu standart dışı davranış destekleniyor.
  • Docker ve mimari uyumluluğu

    • Docker'ın, Linux dışındaki platformlarda aslında bir Linux VM gerektirdiğine dikkat çekiliyor.
    • Linux container'ları harika olsa da Docker'ı gerçekten çapraz platform bir çözüm olarak görmek zor.
  • tek dosyalı uygulamalar hakkındaki görüşler

    • Tüm uygulamayı tek bir dosyada toplama fikri övülüyor.
    • Docker'ın karmaşıklığı eleştiriliyor ve container'ların güvenlik ya da sürüm yönetimi için kullanılmasının ne kadar anlamlı olduğu sorgulanıyor.
    • WebAssembly'nin (WASM) bu sorunları çözüp çözemeyeceği soruluyor.
  • Docker alternatifi olarak Podman ve bubblewrap'ten söz edilmesi

    • Docker yerine Podman veya bubblewrap kullanmanın daha iyi olabileceği belirtiliyor.
    • Podman'ın belirli dağıtımlara biraz daha bağımlı olduğu, bubblewrap'in ise bazı dağıtımlarda güvenlik sorunları nedeniyle dahil edilmeyebileceği ifade ediliyor.
  • heredoc'lar kullanılarak tek dosyalı proje oluşturma

    • Karmaşık bir shebang olmadan da heredoc'lar kullanarak herhangi bir dil veya altyapı için tek dosyalı proje oluşturulabileceği belirtiliyor.
    • Bash betiği olarak paketlenmiş aynı uygulamaya dair bir örnek veriliyor.
  • “tek dosya” takıntısına yönelik eleştiri

    • Her şeyi tek bir dosyada paketlemek yerine, dizinler kullanarak kendi içinde yeterli uygulamalar oluşturulabileceğine dikkat çekiliyor.
    • Tek dosya yapmanın mutlaka daha iyi bir yöntem olmadığı belirtiliyor.
  • kendi kendini tüketen betik deseni

    • Betiğin içine başka yorumlayıcı betiklerini gömüp, etiketler arasındaki betiği sed ile çıkarmanın bir yöntemi açıklanıyor.
    • Bu yaklaşımın bazen çok faydalı olabileceği, ancak karmaşıklaşabileceği de kabul ediliyor.
  • shebang konumunda guix shell kullanma yöntemi

    • Guix kılavuzundan alınmış, guix shell kullanan bir örnek veriliyor.
    • Daha karmaşık ortamları tanımlayan bir manifest dosyasıyla birlikte çalışıyor.
  • kendi kendini derleyen ve çalıştıran Dockerfile

    • 2021 Kasım'ında yazılmış, kendi kendini derleyip çalıştıran bir Dockerfile'a ilişkin açıklama ve örnek kod sunuluyor.