Spring Boot Uygulamasını Dockerize Etmek

Herkese merhaba ,bu yazımda sizlere bir spring boot uygulamasını en temel seviyede nasıl dockerize edebileceğimizi anlatmaya çalışacağım.Burada ilk olarak start.spring.io adresini kullanarak temel bir spring boot projesi oluşturacağız.Ardından bu projemizi build ederek bir jar dosyası elde edip bu jar dosyamızı kullanarak bir docker imajı elde edeceğiz.Son olarak ise elde ettiğimiz docker imajımızı container haline getirip ayağa kaldırarak sonuçları göreceğiz.

İlk olarak start.spring.io adresine girelim ve spring boot projemizi oluşturalım.Ben aşağıdaki gibi bir yapı oluşturdum.Bağımlılık olarak sadece spring web’i ekledim.Burada basit bir endpoint oluşturup curl isteği atacağız, bu yüzden spring web yeterli olacaktır.

start.spring.io

Porjemizi oluşturalım ve bilgisayarımıza indirelim.Indirilen zip dosyasından projemizi çıkarttıktan sonra IDE üzerinden zipten çıkarmış olduğumuz projeyi açalım.

Burada ilk olarak uygulamamızı test etmek amacıyla basit bir endpoint oluşturacağız.Resimdeki gibi indirdiğimiz proje ile gelen uygulama içerisinde bulunan ana dosyamızın içerisine gelelim.

start.spring.io

Bu kısımda enpointimizi oluşturalım.Basit bir hello world uygulaması oluşturacağız.Aşağıdaki kodları kullanarak sizde projenize ekleme yapabilirsiniz.


  package com.springdockerized;

  import org.springframework.boot.SpringApplication;
  import org.springframework.boot.autoconfigure.SpringBootApplication;
  import org.springframework.web.bind.annotation.GetMapping;
  import org.springframework.web.bind.annotation.RestController;

  @SpringBootApplication
  public class DockerizedSpringBootApplication {

    public static void main(String[] args) {
      SpringApplication.run(DockerizedSpringBootApplication.class, args);
    }

    @RestController
    public static class HelloWorldController {

      @GetMapping("/testing-docker")
      public String testDocker() {
        return "Hello from running docker container";
      }
    }
  }

Siz de kendi oluşturduğunuz uygulamaya göre bu dosya üzerinden main dosyanızı düzenleyin.

Şimdi ise bu uygulamamızdan bir JAR dosyası oluşturmamız gerekiyor.Bunun için ilk olarak pom.xml dosyamız içerisinden JAR dosyamıza bir isim verelim.Dockerfile dosyamızı oluştururken işimizi kolaylaştıracaktır.

console-output

Resimde mavi renkle belirtilen kısımda olduğu gibi build tag’i içerisinde finalName taglerini ekleyip içerisine istediğimiz şekilde bir JAR dosya ismi veriyoruz.

Şimdi uygulamamızı build edelim.Bunun için proje kök dizinimize geliyoruz ve aşağıdaki komutu çalıştırıyoruz.

  $ mvn clean package

Bu komutun çalışması bittikten sonra aşağıdaki gibi bir çıktı almamız gerekiyor.Gördüğümüz gibi çıktıda spring boot target klasörü altına spring-dockerized-application adında bir JAR dosyası çıkardı.

console-output

Şimdi ise bu JAR dosyamızı kullanarak bir docker imajı oluşturacağız.Bunun için de bir Dockerfile dosyasına ihtiyacımız var.Projemizin kök dizinine gelelim ve Dockerfile isminde bir dosya oluşturalım. Dockerfile dosyamızın içeriği aşağıdaki gibi olacaktır.

  FROM java:8-jdk-alpine

  COPY target/*.jar dockerized-app.jar

  ENTRYPOINT["java","-jar","/dockerized-app.jar"]

Dockerfile içerisinde ilk satırda oluşturacağımız imajın base build imajını belirtiyoruz.Yani spring boot uygulamamız jdk-8’in içinde bulunduğu bir imajı temel alacaktır.Ardından COPY ile target altında bulunan jar dosyamızı, oluşturacağımız imajın dosya sistemi altına taşıyoruz.Son olarak ENTRYPOINT ile docker’a uygulamamızı nasıl çalıştıracağını söylüyoruz.Yani kısaca java -jar dockerized-app.jar komutunu çalıştırmasını söylüyoruz.

Dosyamızı kaydedelim ve ana dizinde terminal ekranımızı açalım.Burada aşağıdaki komutu kullanarak docker imajını oluşturacağız.

  $ docker build -t spring-dockerized:1 .

Yukarıdaki komutu incelersek, -t komutu docker imajımıza bir etiket vermemizi sağlıyor, etiketten sonra : ile verdiğimiz ibareyi ise imajımızın sürümü gibi düşünebiliriz.Oraya :1 ibaresini eklemeyebilirdik.Eklemeseydik docker otomatik olarak sürümü latest olarak belirleyecekti.Son olarak nokta işaretini koyduk, bu da Dockerfile dosyamızın bu dizinde olduğunu belirtiyor.Şimdi komutu çalıştıralım ve sonuçları görelim.

docker-build

Resimde görüldüğü gibi docker imajımız başarıyla oluşturuldu ve docker images komutunu çalıştırdığımız zaman imajımızın spring-dockerized ismiyle listede olduğunu görüyoruz.

Şimdi ise oluşturduğumuz docker imajını container haline getirip ayağa kaldıracağız.Bunun için aşağıdaki komutu kullanacağız.

  $ docker run -p 8080:8080 spring-dockerized:1

Burada docker’a spring-dockerized imajımızı 8080 portuna map edip çalıştırmasını söylüyoruz.Bu şekilde spring boot uygulamamız container halinde 8080 portundan hizmet vermeye başlıyor.Hemen komutumuzu çalıştırıp oluşturduğumuz endpoint’e curl isteği yapalım ve sonuçları görelim.

docker-run

Resimde gördüğümüz gibi spring uygulamamız 8080 portunda çalışmaya başladı.Şimdi docker ps komutunu çalıştıralım ve şuan çalışan docker container’ımız ile ilgili bilgileri görebiliriz.

Son olarak oluşturduğumuz endpoint’e bir istek yapalım ve düzgün çalışıp çalışmadığından emin olalım.Aşağıdaki komutu çalıştırarak endpoint’i test edelim.

  $ curl http://localhost:8080/testing-docker -w '\n'

Resimde görüldüğü gibi sonuç olarak endpointimizin döndüğü değeri konsole ekranında görüyoruz.

docker-run

Evet herkese buraya kadar okuduğu için teşekkür ederim yazım burada sona eriyor, hatalı gördüğünüz bir kısım olduysa geri bildirim göndermeniz çok iyi olacaktır.

Tekrar görüşmek üzere…


İsa

Software Engineer