Bir Docker görüntüsünü kendi web uygulamanızı çalıştıracak şekilde özelleştirme

Tamamlandı

Docker Hub, kendi kapsayıcılı uygulamalarınızı oluşturmaya başlamanıza yardımcı olacak görüntülerin bulunduğu harika bir kaynaktır. gereken temel işlevleri sağlayan bir görüntüyü indirebilir, ardından yeni bir özel görüntü oluşturmak için kendi uygulamanızı bunun üzerine katmanlayabilirsiniz . Dockerfile yazarak bu işlemin adımlarını otomatikleştirebilirsiniz.

Çevrimiçi giyim mağazası senaryosunda, şirket Docker'ın ileriye doğru olduğuna karar verdi. Bir sonraki adım, web uygulamalarınızı kapsayıcılı hale getirmek için en iyi yöntemi belirlemektir. Şirket, ASP.NET Core kullanarak uygulamaların çoğunu oluşturmayı planlıyor. Docker Hub'ın bu çerçeveyi içeren bir temel görüntü içerdiğini fark ettiniz. Kavram kanıtı olarak, bu temel görüntüyle başlamak ve web uygulamalarından birinin kodunu ekleyerek yeni bir özel görüntü oluşturmak istiyorsunuz. Ayrıca, web uygulamasının yeni bir sürümünü yayımladığınızda otomatik hale getirmek için bu işlemin kolayca yinelenebilir olmasını istiyorsunuz.

Bu ünitede özel bir Docker görüntüsü oluşturmayı ve Dockerfile yazarak işlemi otomatikleştirmeyi öğreneceksiniz.

Dockerfile ile özel görüntü oluşturma

Uygulamanızı içeren bir Docker görüntüsü oluşturmak için genellikle dosya ve yapılandırma bilgilerini eklediğiniz temel görüntüyü tanımlayarak başlarsınız. Uygun bir temel görüntüyü tanımlama işlemi genellikle Docker Hub'daki bir görüntü aramasıyla başlar. Zaten bir uygulama çerçevesi ve Ubuntu veya Alpine gibi bir Linux dağıtımının tüm yardımcı programlarını ve araçlarını içeren bir görüntü istiyorsunuz. Örneğin kapsayıcı halinde paketlemek istediğiniz bir ASP.NET Core uygulamanız varsa, Microsoft'un ASP.NET Core çalışma zamanını içeren mcr.microsoft.com/dotnet/core/aspnet adlı görüntüsünden faydalanabilirsiniz.

Bir kapsayıcıyı temel görüntüyle başlatıp değişiklik yaparak görüntüyü özelleştirebilirsiniz. Değişiklikler genellikle dosyaları yerel dosya sisteminden kapsayıcıya kopyalama ve kod derlemek için çeşitli araçlar ve yardımcı programlar çalıştırma gibi etkinlikleri içerir. İşiniz bittiğinde, değişiklikleri yeni bir görüntüye kaydetmek için komutunu kullanırsınız docker commit .

Yukarıdaki işlemin el ile tamamlanması zaman alan ve hataya açık olan bir süreçtir. Bash gibi bir betik diliyle betik yazabilirsiniz, ancak Docker, Dockerfile aracılığıyla görüntü oluşturmayı otomatikleştirmek için daha etkili bir yol sağlar.

Dockerfile, görüntü oluşturmak için gereken tüm komutları içeren bir düz metin dosyasıdır. Dockerfile dosyaları, görüntü oluşturma ve yapılandırma için tasarlanmış olan minimal bir betik dilinde yazılır. Temel görüntüden başlayarak görüntü oluşturmak için gereken işlemleri belgeler.

Aşağıdaki örnekte bir .NET Core 2.2 uygulaması oluşturan ve bunu yeni bir görüntüye paketleyen bir Dockerfile gösterilmiştir.

FROM mcr.microsoft.com/dotnet/core/sdk:2.2
WORKDIR /app
COPY myapp_code .
RUN dotnet build -c Release -o /rel
EXPOSE 80
WORKDIR /rel
ENTRYPOINT ["dotnet", "myapp.dll"]

Bu dosyada aşağıdaki işlemler gerçekleşir:

Command Eylem
FROM Belirtilen görüntüyü indirir ve bu görüntüyü temel alan yeni bir kapsayıcı oluşturur.
WORKDIR Sonraki komutlar tarafından kullanılan kapsayıcıdaki geçerli çalışma dizinini ayarlar.
KOPYA Dosyaları konak bilgisayardan kapsayıcıya kopyalar. İlk bağımsız değişken (myapp_code), konak bilgisayardaki bir dosya veya klasördür. İkinci bağımsız değişken (.), kapsayıcıda hedef olarak kabul edilecek olan dosyanın veya klasörün adını belirtir. Bu durumda hedef, geçerli çalışma dizinidir (/app).
ÇALIŞTIR Kapsayıcıda bir komut yürütür. RUN komutu bağımsız değişkenleri, komut satırı komutlarıdır.
GÖSTERMEK Yeni görüntüde, kapsayıcı çalıştırıldığında hangi bağlantı noktalarının açıldığını belirten bir yapılandırma oluşturur. Kapsayıcı bir web uygulaması çalıştırıyorsa EXPOSE komutu genellikle 80 numaralı bağlantı noktası için kullanılır.
ENTRYPOINT Kapsayıcı başlatıldığında çalışması gereken işlemi belirtir. Bu örnekte yeni oluşturulan uygulamayı çalıştırmaktadır. Çalıştırmak istediğiniz komutu ve bağımsız değişkenlerinin her birini dize dizisi olarak belirtirsiniz.

Kural gereği, Docker görüntüsü olarak paketlenecek uygulamaların kaynak kodunun kökünde genellikle bir Dockerfile bulunur ve bu dosya neredeyse her zaman Dockerfile olarak adlandırılır.

docker build komutu, bir Dockerfile çalıştırarak yeni bir görüntü oluşturur. Bu komutun söz diziminde çeşitli parametreler bulunur:

  • -f bayrağı, kullanılacak Dockerfile dosyasının adını belirtir.
  • -t bayrağı oluşturulacak görüntünün adını belirtir; bu örnekte myapp:v1.
  • Son parametre olan ., COPY komutu için kaynak dosyalara oluşturma bağlamını sunar. Bu bağlam, oluşturma sürecinde ihtiyaç duyulan ve konak bilgisayarda bulunan dosyalardır.
docker build -t myapp:v1 .

Arka planda komut docker build bir kapsayıcı oluşturur, içinde komutlar çalıştırır, ardından değişiklikleri yeni bir görüntüye işler.