ãããã¯ãããŒã±ã¿ãŒãšããŠDockerã§ã€ã³ã¿ãŒã³ãããŠãããšãã«ããã®ããã°ãçºè¡šã§ããããšãéåžžã«å¬ããæããŸãã ãã®çŽ æŽãããçµéšã¯ãç§ã«å€ãã®æ°ããã¢ã€ãã¢ããã¬ã€ã³ã¹ããŒãã³ã°ããæ©äŒãäžããŠãããŸããã 以åã®Javaéçºè ãšããŠãç§ã¯ãã€ãJavaãšSpring Bootãã©ã®ããã«äžç·ã«åããã«é©ããŠããŸãã! ãã®ããã°ã®å®æãåŸæŒããããã¹ãŠã®äººã«å«ã³ãŸã!
Â
éå»30幎éãWebéçºã¯è€æ°ã®æ¥çã§äžå¯æ¬ ã«ãªã£ãŠããŸãã éçºè ã¯é·ãéã Java ãš Spring Framework ãWebéçºãç¹ã«ãµãŒããŒåŽã§äœ¿çšããŠããŸããã
Javaã¯ãå€ããã®ã¯éãã®å²åŠã«åŸããŸãã ãããŠã25幎以äžã«ããã£ãŠé²åããåŸãã仿¥æã人æ°ã®ãã ããã°ã©ãã³ã°èšèªã®1ã€ã§ãã GoogleãLinkedInãeBayãAmazonãStack Overflowãå«ã5000äžã®ãŠã§ããµã€ã ãJavaãåºç¯å²ã«äœ¿çšããŠããã
Â

ãã®ããã°ã§ã¯ãåçŽãªJava Spring Boot Webã¢ããªã±ãŒã·ã§ã³ãäœæããã¢ããªã±ãŒã·ã§ã³ããœãããŠã§ã¢ã®ãã€ã¡ãŒãžããšããŠå®è¡ããããšã§æ©èœãã Dockerã䜿çšããŠã³ã³ããåããŸãã ãã®ã€ã¡ãŒãžã¯ããªãã¬ãŒãã£ã³ã° ã·ã¹ãã ãã³ãŒããããã³ãµããŒã ã©ã€ãã©ãªãŸãã¯äŸåé¢ä¿ããŸãšããŠããã±ãŒãžåããŸãã ããã«ãããã¯ãã¹ãã©ãããã©ãŒã ã¢ããªã±ãŒã·ã§ã³ã®éçºãšå±éãã¯ããã«ç°¡åã«ãªããŸãã ããã»ã¹ã«é£ã³èŸŒã¿ãŸãããã
ãããããªããããããšã§ã
- åããŠã® Java Spring Boot Web ã¢ããªã±ãŒã·ã§ã³ã®æ§ç¯
- ãŸããDockerãªãã§ã¢ããªã±ãŒã·ã§ã³ãå®è¡ããŠãã«ããã
- Spring Boot Web ã¢ããªã±ãŒã·ã§ã³ã®ã³ã³ãããŒå
å¿ èŠãªãã®
1. JDK 17 以äž
2. ãšã¯ãªãã¹ã®ããã®æ¥ã®ããŒã«ã¹ã€ãŒã
3 .ããã«ãŒãã¹ã¯ããã
åããŠã® Java Spring Boot Web ã¢ããªã±ãŒã·ã§ã³ã®æ§ç¯
ã¢ããªã±ãŒã·ã§ã³ã«ã¯Spring Tool Suite(STS)ã䜿çšããŠããŸãã STS 㯠Eclipse ããŒã¹ã§ãããSpring ã¢ããªã±ãŒã·ã§ã³ã®äœæã«åãããŠèª¿æŽãããŠããŸãã ããã«ã¯ãSpringæ§æãã¡ã€ã«ã®æ€èšŒãã³ãŒãã£ã³ã°æ¯æŽãªã©ãæäŸããçµã¿èŸŒã¿ã®ã«ã¹ã¿ãã€ãºå¯èœãªTomcatãµãŒããŒãå«ãŸããŠããŸãã
ããäžã€ã®å©ç¹ã¯ãSpring Tool Suite 4ãæç€ºçãªMavenãã©ã°ã€ã³ãå¿ èŠãšããªãããšã§ãã ç¬èªã®Mavenãã©ã°ã€ã³ãä»å±ããŠãããWindows >èšå®>Mavenã«ç§»åããããšã§ç°¡åã«æå¹ã«ã§ããŸãã ãã®IDEã¯ãSpringã¢ããªã®éçºãç°¡çŽ åããããã®èŠªãã¿ãããUIãšããŒã«ãæäŸããŸãã
ããã§ã¯ãã¢ããªã®æ°ããåºæ¬ãããžã§ã¯ããäœæããŸãããã ããã±ãŒãžãšã¯ã¹ãããŒã©ãŒããæ°ããSpringã¹ã¿ãŒã¿ãŒãããžã§ã¯ããäœæããŸãã
Â


Spring Web ã¢ããªãæ§ç¯ããŠããã®ã§ãSpring Web ãš Thymeleaf ã®äŸåé¢ä¿ã远å ããå¿ èŠããããŸãã Thymeleaf ã¯ãHTMLãXMLãJavaScriptãCSSãããã«ã¯ãã¬ãŒã³ããã¹ããã¡ã€ã«ãªã©ã®ããã³ããšã³ã颿°ãSpring Bootã§å®è£ ããããã®Javaãã³ãã¬ãŒããšã³ãžã³ã§ãã

ã¹ã¿ãŒã¿ãŒãããžã§ã¯ãã®èšå®ã«ã¯ãå ¬åŒWebãµã€ããããã«ããŠãããããæéããããããšã«æ°ä»ãã§ãããã å®äºãããããããžã§ã¯ã ããŒã¹ãããã«æ§æã§ããŸãã ãããžã§ã¯ãã®æ§é ã¯æ¬¡ã®ããã«ãªããŸãã

ããã©ã«ãã§ã¯ãMavenã¯ãœãŒã¹ã src/main/java ã³ã³ãã€ã«ã src/test/java ããã¹ãã±ãŒã¹ãååšããå Žæã§ãã äžæ¹ãã¯ããã³ãã¬ãŒããã€ã¡ãŒãžã src/main/resources ãã®ä»ã®æ§æãªã©ã®ã¢ããªã±ãŒã·ã§ã³ãªãœãŒã¹ã®æšæºçãªMavenã®å Žæã§ãã
Mavenã®åºæ¬çãªäœæ¥åäœã¯(ãããžã§ã¯ããªããžã§ã¯ãã¢ãã«)ã§ã pom.xml ã ããã«ã¯ããããžã§ã¯ãããã®äŸåé¢ä¿ãããã³ Maven ããã«ãæã«äœ¿çšããæ§æã®è©³çްã«é¢ããæ
å ±ãå«ãŸããŠããŸãã
ãããç§ãã¡ã®ãããžã§ã¯ãã®POMã§ãã ãŸããæåã«è¿œå ãã Spring Web ãš Thymeleaf ã®äŸåé¢ä¿ã«ãæ°ã¥ãã§ãããã
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.2</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>webapp</artifactId> <version>0.0.1-SNAPSHOT</version> <name>webapp</name> <description>Demo project for Spring Boot</description> <properties> <java.version>17</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
Â
次ã«ã å
ã® src/main/javaãœãŒã¹ ã³ãŒãã調ã¹ããšãçæãããã¯ã©ã¹ WebappApplication.java ãã¡ã€ã«ã衚瀺ãããŸãã
package com.example.mypkg;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class WebappApplication {
public static void main(String[] args) {
SpringApplication.run(WebappApplication.class, args);
}
}
Â
ããã¯ãSpring Boot ã¢ããªã®å®è¡å
ã®ã¡ã€ã³ ã¯ã©ã¹ã§ãã ãã®ã¢ãããŒã·ã§ã³ã¯ @SpringBootApplication ãSpring Bootã®èªåæ§æãJavaããŒã¹ã®Springæ§æãã³ã³ããŒãã³ãã¹ãã£ã³ãæå¹ã«ããæ©èœãªã©ãããŸããŸãªæ©èœã瀺ããŠããŸãã
ãããã£ãŠã ã¯ã @SpringBootApplication @EnableAutoConfiguration@ComponentScan ãããã©ã«ãã®å±æ§ã§äœ¿çšããã®ãšÂ @Configuration 䌌ãŠããŸããåæ³šéã®è©³çްã«ã€ããŠã¯ã以äžãåç
§ããŠãã ããã
-
@Configurationã¯ãç¹å®ã®ã¯ã©ã¹ã«@Beanå®çŸ©ã¡ãœãããããããšã瀺ããŸãã Spring ã³ã³ããã¯ãBean å®çŸ©ãæäŸããããã«ãããåŠçããããšãã§ããŸãã@EnableAutoConfigurationã¯ã©ã¹ãã¹ã«ååšãã Bean ãèªåæ§æããã®ã«åœ¹ç«ã¡ãŸãã@ComponentScanSpringã¯ãæ§æãã³ã³ãããŒã©ãŒããµãŒãã¹ãããã³ãã®ä»ã®äºåå®çŸ©ãããã³ã³ããŒãã³ããã¹ãã£ã³ã§ããŸãã
Spring ã¢ããªã±ãŒã·ã§ã³ã¯ã ã䜿çšã㊠SpringApplication.run(<Classname>.class, args)main ã¡ãœããããã¹ã¿ã³ãã¢ãã³ãšããŠããŒãã¹ãã©ãããããŸãã
åè¿°ã®ããã«ãéç Web ããŒãžãšåç Web ããŒãžã®äž¡æ¹ã src/main/resourcesã«åã蟌ãããšãã§ããŸãã ããã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ããŒã ããŒãžãšããŠæå® Products.html ããŸããã

åçŽãª RESTful Web ãµãŒãã¹ã䜿çšããŠãã¢ããªã±ãŒã·ã§ã³ã®ããŒã ããŒãžãååŸããŸãã ãŸããã¡ã€ã³ã¯ã©ã¹ãšåãå Žæã«ã¯ã©ã¹ãäœæããŸã Controller ã ããã¯ãåä¿¡ãã REST API åŒã³åºãã®åŠçãã¢ãã«ã®æºåãã¬ã³ããªã³ã°ããããã¥ãŒãå¿çãšããŠè¿ã圹å²ãæ
ããŸãã
package com.example.mypkg;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HomeController {
@GetMapping(value = "/DockerProducts")
public String index() {
return "Products";
}
}
Â
泚é㯠@Controller ãã³ã³ãããŒã©ãŒ ããŒã«ãç¹å®ã®ã¯ã©ã¹ã«å²ãåœãŠãŸãã ãã®æ³šéã䜿çšããŠãã¯ã©ã¹ã Web èŠæ±ãã³ãã©ãŒãšããŠããŒã¯ããŸãã @GetMapping éåžžãHTTP GET èŠæ±ãç¹å®ã®ãã³ãã©ãŒ ã¡ãœããã«ãããããŸãã ããã§ã¯ã"Products" ãšããã¢ããªã®ããŒã ããŒãžãè¿ãã¡ãœãã "index" ã§ãã
Docker ã䜿çšããªãã¢ããªã±ãŒã·ã§ã³ã®ãã«ããšå®è¡
ã¢ããªã±ãŒã·ã§ã³ãSpring Bootã¢ããªã±ãŒã·ã§ã³ãšããŠå®è¡ããŠãã¹ãããæãæ¥ãŸãããÂ
Â

ããã§ãã¢ããªã±ãŒã·ã§ã³ã¯ ã§ port 8080䜿çšå¯èœã«ãªãããã©ãŠã¶ã§ http://localhost:8080/DockerProducts ãéããŠã¢ã¯ã»ã¹ã§ããŸãã
ãããžã§ã¯ããå®è¡ããŠãã¹ãããŸããã æ¬¡ã«ãJAR ãã¡ã€ã«ãäœæããŠã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããŸãã Spring Tool Suiteå ã®ãMavenã¯ãªãŒã³ãã€ã³ã¹ããŒã«ãªãã·ã§ã³ãéžæããŸãã
Â

Â

é²è¡äžã®ãã«ãã®ã³ã³ãœãŒã«ã次ã«ç€ºããŸãã STS ã JAR ãæ£åžžã«æ§ç¯ããããšãããããŸãã

ãã® JAR ãã¡ã€ã«ã«ã¯ã以äžã«ç€ºãã¿ãŒã²ãã ãã©ã«ããŒããã¢ã¯ã»ã¹ã§ããŸãã

Spring Boot Web ã¢ããªã±ãŒã·ã§ã³ã Docker ã§ã³ã³ããåãã
次ã«ãDocker ã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ãã³ã³ãããŒåããŸãã éå§ããåã«ãDockerãã¹ã¯ããããããŠã³ããŒãããŠã€ã³ã¹ããŒã«ããŸãã Docker Desktop ã«ã¯ãDocker CLIãDocker ComposeãDocker Engine ãªã©ãéçºè åãã®ããŒã«ãè€æ°å«ãŸããŠããŸãããŸããäžè¬çãªã³ã³ãããŒãã€ã¡ãŒãžãããã³ããªã¥ãŒã 管çã¿ã¹ã¯ãåçåãããŠãŒã¶ãŒãã¬ã³ããªãŒãªUI(Dockerããã·ã¥ããŒã)ãåããŠããŸãã
ãããã€ã³ã¹ããŒã«ãããããæ¬¡ã®æé ã§ã³ã³ããåã«åãçµã¿ãŸãã
- ã®äœæ
Dockerfile - ããã«ãŒã€ã¡ãŒãžã®æ§ç¯
- Dockerã³ã³ãããå®è¡ããŠã¢ããªã±ãŒã·ã§ã³ã«ã¢ã¯ã»ã¹ãã
ããã«ãŒãã¡ã€ã«ã®äœæ
A Dockerfile ã¯ãDocker ã€ã¡ãŒãžããã«ãããããã®æé ãæå®ãããã¬ãŒã³ããã¹ã ãã¡ã€ã«ã§ãã ããã¯ããããžã§ã¯ãã®ã«ãŒããã£ã¬ã¯ããªã«äœæã§ããŸãã
FROM eclipse-temurin:17-jdk-focal ADD target/webapp-0.0.1-SNAPSHOT.jar webapp-0.0.1-SNAPSHOT.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "webapp-0.0.1-SNAPSHOT.jar"]
Â
ååœä»€ã¯äœãããŸãã?
FROMâ æ°ããã€ã¡ãŒãžã®æ§ç¯ã«äœ¿çšããDockerfileåºæ¬ã€ã¡ãŒãžãæå®ããŸãã ããŒã¹ã€ã¡ãŒãžãšããŠäœ¿çšeclipse-temurin:17-jdk-focalããŠããŸãã Eclipse Temurin ãããžã§ã¯ãã¯ãJava SE ã©ã³ã¿ã€ã ã»ãã€ããªãŒãç°¡åã«äœæã§ããããã«ããã³ãŒããšããã·ãŒãžã£ãŒãå ±æããŠããŸãã ãŸããJavaã®ãšã³ã·ã¹ãã å šäœã«èŠãããäžè¬çãªé¢é£ãã¯ãããžãŒã掻çšããã®ã«ã圹ç«ã¡ãŸããADDâæ°ãããã¡ã€ã«ãšJARãç¹å®ã®å®å ã®Dockerã³ã³ããã®ãã¡ã€ã«ã·ã¹ãã ã«ã³ããŒããŸãEXPOSEâç¹å®ã®ããŒãããã¹ããã·ã³ã«å ¬éããŸãã çµã¿èŸŒã¿TomcatãµãŒããŒãèªåçã«äœ¿çšãããããå ¬éport 8080ããŠããŸããENTRYPOINTâã³ã³ãããã¹ãã³ã¢ãããããšãã«å®è¡ãããå®è¡å¯èœãã¡ã€ã«ãèšå®ããŸã
ããã«ãŒã€ã¡ãŒãžã®æ§ç¯
ããã«ãŒã€ã¡ãŒãžã¯ãããã«ãŒã³ã³ãããäœæããããã®æçãªãã³ãã¬ãŒãã§ãã Docker ã€ã¡ãŒãžããã«ãããã«ã¯ããããžã§ã¯ãã®ã«ãŒã ãã£ã¬ã¯ããªã§ STS ã¿ãŒããã«ãéããæ¬¡ã®ã³ãã³ããå ¥åããŸãã
ããã«ãŒãã«ã-t docker_desktop_pageã
Â
ã€ã¡ãŒãžå㯠docker_desktop_page. ãªã¹ãããªã¯ãšã¹ãããå Žåã®ç»åã®è¡šç€ºæ¹æ³ã¯æ¬¡ã®ãšããã§ãã
Â

ã¢ããªã±ãŒã·ã§ã³ã Docker ã³ã³ãããŒãšããŠå®è¡ãã
Docker ã³ã³ãããŒã¯ãDocker ã€ã¡ãŒãžã®å®è¡äžã®ã€ã³ã¹ã¿ã³ã¹ã§ãã ããã¯ãã¢ããªã±ãŒã·ã§ã³ã®å®è¡ã«å¿ èŠãªãã¹ãŠã®ãã®ãå«ãã軜éã®ã¹ã¿ã³ãã¢ãã³ã®å®è¡å¯èœãœãããŠã§ã¢ããã±ãŒãžã§ãã æ¬¡ã®ã³ãã³ããå ¥åããŠãã³ã³ãããŒãèµ·åããŸãã
ããã«ãŒå®è¡-p 8080:8080 docker_desktop_page

http://localhost:8080/DockerProducts ããã¢ããªã±ãŒã·ã§ã³ã«ã¢ã¯ã»ã¹ããŸãã ãããç§ãã¡ã®ãŠã§ãããŒãžãå£éèŠãããšãã§ããŸã!

ã€ã¡ãŒãžãšå®è¡äžã®ã³ã³ãããŒã¯ãDocker ããã·ã¥ããŒããã衚瀺ããããšãã§ããŸãã


ãããã®ã³ã³ãããŒã¯ãã³ã³ãã㌠ã€ã³ã¿ãŒãã§ã€ã¹å ã§ç®¡çããããšãã§ããŸãã
ã³ã³ããåã«ããããã«ããšãããã€ã容æã«ãªããŸã
äžäžïŒããã§ãæåã® Java Web ãµã€ãã®æ§ç¯ã«æåããŸããã å®å šãªãããžã§ã¯ããœãŒã¹ã³ãŒãã«ã¢ã¯ã»ã¹ã§ããŸã 詳现ãèŠã.
ããã§ãDocker ã®çµéšããªããŠããã¢ããªã±ãŒã·ã§ã³ã®ã³ã³ããåãããã«ç°¡åããåŠã³ãŸããã æ¬¡ã® Java Spring Boot ã¢ããªã±ãŒã·ã§ã³ã®éçºã®è©³çްã«ã€ããŠã¯ãã Java å ¥éã®æŠèŠããåç §ããŠãã ããã