Java Spring Boot Projesini Docker Container İçerisinde Çalıştırmak – 1
Merhaba, bu yazıda Spring Boot ile geliştirilmiş bir Rest Api uygulamasını sanallaştırarak docker container içerisinde çalıştıracağız, yani “dockerize” edeceğiz. İki bölümden oluşacak yazıma birinci bölümden başlayalım.
İlk olarak bilgisayarımızın geliştirme ortamında Java projemizi derleyip, oluşan .jar dosyasını docker container da çalıştırmak üzere bir imaj oluşturacağız.
İkinci bölümde ise bilgisayarımızda herhangi bir java geliştirme ortamı olmasa bile çalıştırabileceğimiz şekilde, hem derleme hem çalıştırma için bir docker imajı oluşturacağız.
Bu yazıda daha önce yazdığım “Java Spring Boot Rest Api” isimli yazımın üzerinden devam edeceğiz. İlgili yazıya buradan ulaşabilirsiniz.
İlk adımdan başlamadan önce, docker bilgisayarınıza kurulu olması gerekmektedir. Eğer kurulu değilse buradan indirip kurabilirsiniz. Haydi başlayalım.
- Spring Boot “.jar” File Docker Image
Projemizi açalım ve kök dizinine “Dockerfile” ismiyle bir dosya oluşturalım. Burada projeyi dockerize etmek için gerekli komutlar bulunacak.
Şimdi projemizi ‘mvn install’ komutu ile derleyelim. (Bilgisayarınıza maven kurulu değilse yüklemeniz gerekmektedir.) Derleme işleminden sonra kök dizininde target isimli bir klasör oluşacak ve içerisinde ‘.jar’ dosyamızı göreceğiz.
Şimdi Dockerfile’ı açalım ve içerisine aşağıdaki komutları yazalım:
FROM openjdk:11-jre-slim
WORKDIR /app
ARG JAR_FILE=/target/*.jar
COPY asset /app/asset/
COPY ${JAR_FILE} /app/app.jar
CMD ["java", "-jar", "app.jar"]
Sırasıyla yukarıdaki komutları inceleyelim:
1- FROM openjdk:11-jre-slim
.jar dosyasının oluşturacağımız containerda çalışabilmesi için bir Java Runtime Environment’ a ihtiyacımız olacak(jre). Ben projenin başında java 11 seçtiğim için jre versiyonunu da 11 seçerek devam ediyorum. Eğer farklı versiyonlar kullandıysanız docker hub üzerinden ihtiyacınız olan jre imajını bulabilirsiniz.
FROM komutu ile openjdk:11-jre-slim imajını kullanarak kendimize bir temel imaj oluşturuyoruz. Bu imaj .jar dosyamızı çalıştıracak. Eğer bu imaj daha önce indirilmediyse docker hub üzerinden bu imaj indirilecek.
2- WORKDIR /app
Bu komut ile kendimize bir çalışma dizini oluşturduk. Bütün işlemlerimizi container içerisinde oluşturulan app klasöründe gerçekleştireceğiz. Yani bu klasör bizim container içerisindeki kök dizini.
3- ARG JAR_FILE=/target/*.jar
Bu komut ile sistemimizde aslında bir değişken oluşturduk ve derlendikten sonra oluşan .jar dosyamızın yolunu tutmasını istedik. İleriki aşamalarda bu dosya yolunu kullanacağız.
4- COPY asset /app/asset/
Biz projede asset olarak bir .json dosyası ve ülke bayrakları kullandığımız için bunları container içerisine taşımamız gerekli. Bu yüzden COPY komutu ile asset klasörünü daha önce WORKDIR ile belirlediğimiz çalışma dizinine kopyalıyoruz.
5- COPY $ {JAR_FILE} /app/app.jar
Bu komut ile .jar dosyamızı kök dizine app.jar ismi ile kopyalıyoruz.
6- CMD [“java”, “-jar”, “app.jar”]
Bu komut ile container içerisine kopyaladığımız app.jar dosyasını çalıştırıyoruz. CMD, terminal komutlarını çalıştırabileceğimiz bir docker komutudur. Bulunduğumuz dizinde şu terminal kodunu çalıştıracaktır: java -jar app.jar
Dockerfile ile işimiz bu kadar. Şimdi yapmamız gereken bu dosyayı build ederek bir docker imajı oluşturmak. Bunun için Dockerfile’ın bulunduğu dizinde şu komutu çalıştırmak yeterli olacaktır: docker build -t countries-be .
-t ile imajımıza bir isim veriyoruz. Bu örnekte countries-be verdik. En sona koyduğumuz nokta ise dizinde bulunan Dockerfile’ı ifade ediyor. Komut çalıştıktan sonra sırası ile yukarıdaki 6 katman çalışacak ve bir docker imajı elde edeceğiz. Oluşan imajı şu komutla listeleyebiliriz: docker image list
Farklı bir şekilde Docker Desktop üzerinden de görüntüleyebiliriz.
Evet imajımız hazır ve çalıştırılmayı bekliyor. Bu imajı çalıştırdığımızda bir container oluşturulacak ve Spring Boot programımız bu container üzerinde çalışıyor olacak. Şimdi çalıştırma işlemine geçelim: docker run -p 1234:8080 -t countries-be
-p ile container’ın çalışacağı portları belirliyoruz. Örnekte 1234:8080 olarak belirledik. Buradaki 8080 aslında Spring Boot programının çalıştığı port, 1234 ise bizim docker container’ına erişebilmemiz için belirttiğimiz port. Ben 1234 portundan container a erişmek için 1234:8080 ayarı ile container’ı çalıştırdım.
Şimdi Postman den bir get request i atalım ve sonucu görelim:
Bu yazıda docker container içerisinde Java Spring Boot projemizi başarılı bir şekilde çalıştırdık. Projeyi hem derleyip hem çalıştırmak için de bir docker imajı üretebiliriz. Bunun için yazdığım ikinci bölüme de buradan ulaşabilirsiniz.
İyi çalışmalar.