Spring Boot Uygulamasını Docker Konteynerı Haline Getirmek
Basit bir Spring Boot uygulamasının nasıl Docker konteynerı yapıldığını
inceleyeceğiz.
İlk olarak sadece bir tane endpoint’i olan bir Spring Boot
uygulaması oluşturuyoruz. Uygulamamızın çalışabilmesi için sadece
aşağıdaki bağımlılığı eklememiz yeterlidir.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Dockerfile dosyasının içeriği aşağıdaki gibidir.
FROM openjdk:8-jdk-alpine
COPY target/docker-spring-boot-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
-
satırda, java uygulamamın çalışabilmesi için gereken base bir image kullanılmaktadır.
-
satırda, target klasörünün altında oluşturulmuş olan docker-spring-boot-0.0.1-SNAPSHOT.jar isimli dosyamızı app.jar ismiyle docker ortamına kopyalıyoruz.
-
satırdaki, java -jar /app.jar komutu ise uygulamamızın ayağa kalkmasını sağlar.
Aşağıdaki Maven komutunu kullanarak uygulamamızın jar uzantılı dosyasını
oluşturabiliriz. İlgili dosya, target klasörünün altında oluşacaktır.
mvn clean package
Eğer target klasörünün altında jar uzantılı dosya oluştuysa Maven komutu
sorunsuz bir biçimde çalıştığı anlamına gelir. Örneğin, benim
uygulamamda target klasörünün altında docker-spring-boot-0.0.1-SNAPSHOT.jar isimli bir dosya oluştu.
Uygulamamızın
image’ını oluşturmak için aşağıdaki komutu çalıştıralım.
docker build --tag=docker-spring-boot:v1.1 .
image’ın kontrol etmek için aşağıdaki komutu kullanabilirsiniz.
docker image ls
Image’ları listelediğimde sadece az önce oluşturduğumuz image
görüntülenmektedir.
--tag ifadesindeki iki nokta üst üste işaretinden önceki
kısım REPOSITORY, sonraki kısım ise TAG olarak görüntülenmektedir.
Bu image’dan bir konteyner yaratmak için aşağıdaki komut kullanılır.
docker run -p8080:8080 docker-spring-boot:v1.1
-p8080:8080 şeklinde verilen parametrenin amacı, iki nokta üst üste
ifadesinden sonra yazılan 8080 konteynerın iç portudur. Yani bu uygulamayı Docker olmadan ayağa kaldırdığınızda bu port
geçerlidir. İki nokta üst üste ifadesinden önce yazılan port
ise konteynerın dış portudur. Yani uygulamaya Docker konteynerı üzerinden ulaşmaya çalıştığımızda
kullanacağımız porttur.
Komut çalıştırıldığında Spring Boot uygulaması sorunsuz olarak ayağa
kaldırılmıştır.
Tarayıcı üzerinde http://localhost:8080/hello adresine istek attğınızda Hello Docker and Spring Boot ifadesi geliyorsa çalışıyor demektedir.
Bir image’dan birden fazla konteyner ayağa kaldırılabilir.
docker run -p8081:8080 docker-spring-boot:v1.1
IMAGE: konteynerın hangi image’ı kullanılarak oluşturulduğu bilgisidir.
COMMAND: konteynerın hangi komut ile ayağa kaldırıldığıdır.
PORTS: konteynerın iç port ve dış port bilgileridir.
NAMES: konteynerın ismidir. İsim parametresi girmediğimiz için Docker
rastgele isimler vermiştir.
http://localhost:8080/hello ve http://localhost:8081/hello
Her iki adres ile de Hello Docker and Spring Boot ifadesini görebilirsiniz.
Basit bir Spring Boot uygulamasının nasıl Docker konteynerı yapıldığını inceleyeceğiz.
İlk olarak sadece bir tane endpoint’i olan bir Spring Boot
uygulaması oluşturuyoruz. Uygulamamızın çalışabilmesi için sadece
aşağıdaki bağımlılığı eklememiz yeterlidir.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Dockerfile dosyasının içeriği aşağıdaki gibidir.
FROM openjdk:8-jdk-alpine
COPY target/docker-spring-boot-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
- satırda, java uygulamamın çalışabilmesi için gereken base bir image kullanılmaktadır.
- satırda, target klasörünün altında oluşturulmuş olan docker-spring-boot-0.0.1-SNAPSHOT.jar isimli dosyamızı app.jar ismiyle docker ortamına kopyalıyoruz.
- satırdaki, java -jar /app.jar komutu ise uygulamamızın ayağa kalkmasını sağlar.
Aşağıdaki Maven komutunu kullanarak uygulamamızın jar uzantılı dosyasını
oluşturabiliriz. İlgili dosya, target klasörünün altında oluşacaktır.
mvn clean package
Eğer target klasörünün altında jar uzantılı dosya oluştuysa Maven komutu sorunsuz bir biçimde çalıştığı anlamına gelir. Örneğin, benim uygulamamda target klasörünün altında docker-spring-boot-0.0.1-SNAPSHOT.jar isimli bir dosya oluştu.
Uygulamamızın
image’ını oluşturmak için aşağıdaki komutu çalıştıralım.
docker build --tag=docker-spring-boot:v1.1 .
image’ın kontrol etmek için aşağıdaki komutu kullanabilirsiniz.
docker image ls
Image’ları listelediğimde sadece az önce oluşturduğumuz image görüntülenmektedir.
--tag ifadesindeki iki nokta üst üste işaretinden önceki kısım REPOSITORY, sonraki kısım ise TAG olarak görüntülenmektedir.
Bu image’dan bir konteyner yaratmak için aşağıdaki komut kullanılır.
docker run -p8080:8080 docker-spring-boot:v1.1
-p8080:8080 şeklinde verilen parametrenin amacı, iki nokta üst üste ifadesinden sonra yazılan 8080 konteynerın iç portudur. Yani bu uygulamayı Docker olmadan ayağa kaldırdığınızda bu port geçerlidir. İki nokta üst üste ifadesinden önce yazılan port ise konteynerın dış portudur. Yani uygulamaya Docker konteynerı üzerinden ulaşmaya çalıştığımızda kullanacağımız porttur.
Komut çalıştırıldığında Spring Boot uygulaması sorunsuz olarak ayağa kaldırılmıştır.
Tarayıcı üzerinde http://localhost:8080/hello adresine istek attğınızda Hello Docker and Spring Boot ifadesi geliyorsa çalışıyor demektedir.
Bir image’dan birden fazla konteyner ayağa kaldırılabilir.
docker run -p8081:8080 docker-spring-boot:v1.1
IMAGE: konteynerın hangi image’ı kullanılarak oluşturulduğu bilgisidir.
COMMAND: konteynerın hangi komut ile ayağa kaldırıldığıdır.
PORTS: konteynerın iç port ve dış port bilgileridir.
NAMES: konteynerın ismidir. İsim parametresi girmediğimiz için Docker
rastgele isimler vermiştir.
http://localhost:8080/hello ve http://localhost:8081/hello
Her iki adres ile de Hello Docker and Spring Boot ifadesini görebilirsiniz.