Hey Habr.
เปเบเบเบปเบเบเบงเบฒเบกเบเบตเป, เบเปเบญเบเบเปเบญเบเบเบฒเบเปเบงเบปเปเบฒเบเปเบฝเบงเบเบฑเบเบเบฐเบชเบปเบเบเบฒเบเบเบญเบเบเปเบญเบเปเบเบเบฒเบเบชเปเบฒเบเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบกเบเบฒเบเบฎเบฝเบเบฎเบนเปเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบปเบเบฅเบญเบเบเบฑเบ microservices. เปเบกเบทเปเบญเบฎเบฝเบเบฎเบนเปเบเบธเบเปเบเบทเปเบญเบเบกเบทเปเบซเบกเป, เบเปเบฒเบเบฐเปเบเบปเปเบฒเบชเบฐเปเบซเบกเบตเบขเบฒเบเบเบฐเบเบฒเบเบฒเบกเบกเบฑเบเบเปเปเบเบฝเบเปเบเปเบขเบนเปเปเบเปเบเบทเปเบญเบเบเปเบญเบเบเบดเปเบเบเบญเบเบเปเบญเบเปเบเบปเปเบฒเบเบฑเปเบ, เปเบเปเบเบฑเบเบขเบนเปเปเบเบชเบฐเบเบฒเบเบเบปเบงเบเบดเบเบซเบผเบฒเบเบเบถเปเบ. เบเบฑเปเบเบเบฑเปเบ, เบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเบเบฑเบเบชเบดเบเปเบเบชเปเบฒเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบเบฒเบเบเปเบฅเบดเบเบฒเบเบเบธเบเบฅเบฐเบเบฒเบเบเบตเปเบเปเบฒเบเบเบฒเบ, เปเบเบดเปเบเบเปเปเบกเบฒเบชเบฒเบกเบฒเบ "เบซเปเบญเบ" เบเบฑเบเบเบธเบเบเบฐเปเบเบเบเบญเบเปเบเบฑเบเปเบเปเบฅเบขเบตเบเบตเปเบซเบเปเบฒเบชเบปเบเปเบ. เบเบงเบฒเบกเบเปเบญเบเบเบฒเบเบเบปเปเบเบเปเบชเปเบฒเบฅเบฑเบเปเบเบเบเบฒเบเปเบกเปเบเบเบงเบฒเบกเปเบเปเบเบดเบเบเบตเปเปเบเบฑเบเบเบฐเปเบซเบเบเบชเบนเบเบชเบธเบเบเบฑเบเบฅเบฐเบเบปเบเบเบตเปเปเบเปเบเบดเบ.
เปเบเปเบเบทเปเบญเบเบเบปเปเบ, เบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเปเบเปเบเบเบฒเบเบชเปเบฒเบเปเบเบเบเบฒเบเบญเบญเบเปเบเบฑเบเบซเบผเบฒเบเบเบฑเปเบเบเบญเบ:
-
เบชเปเบฒเบเบชเบญเบเบเปเบฅเบดเบเบฒเบ - 'backend' เปเบฅเบฐ 'gateway', pack เบเบงเบเบกเบฑเบเปเบเบปเปเบฒเปเบเปเบเบฎเบนเบ docker เปเบฅเบฐ configure เปเบซเปเปเบเบปเบฒเปเบเบปเปเบฒเปเบฎเบฑเบเบงเบฝเบเบฎเปเบงเบกเบเบฑเบ
เบเปเบฒเบชเปเบฒเบเบฑเบ: Java 11, Spring Boot, Docker, เบเบฒเบเปเบเบตเปเบกเบเบฐเบชเบดเบเบเบดเบเบฒเบเบฎเบนเบเบเบฒเบ
-
เบเปเบฒเบชเปเบฒเบเบฑเบ: Kubernetes, GKE, เบเบฒเบเบเบธเปเบกเบเบญเบเบเบฑเบเบเบฐเบเบฒเบเบญเบ, autoscaling, เบเบงเบฒเบกเบฅเบฑเบ
-
เบชเปเบฒเบเบเบฒเบเบฐเบฅเบฒเบเปเบเบเปเบเป Helm 3 เบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบฑเบเบเบฒเบเบเบธเปเบกเบเบตเปเบกเบตเบเบฐเบชเบดเบเบเบดเบเบฒเบเบซเบผเบฒเบเบเบถเปเบ
เบเปเบฒเบชเปเบฒเบเบฑเบ: Helm 3, เบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบฒเบเบฐเบฅเบฒเบ
-
เบเบฒเบเบเบฑเปเบเบเปเบฒ Jenkins เปเบฅเบฐเบเปเปเบชเบปเปเบเบฅเบฐเบซเบฑเบเบญเบฑเบเบเบฐเปเบเบกเบฑเบเปเบเบซเบฒเบเบธเปเบก
เบเปเบฒเบชเปเบฒเบเบฑเบ: เบเบฒเบเบเบฑเปเบเบเปเบฒ Jenkins, plugins, repository configs เปเบเบเบเปเบฒเบเบซเบฒเบ
เบเปเบญเบเบงเบฒเบเปเบเบเบเบตเปเบเบฐเบญเบธเบเบดเบเบเบปเบเบเบงเบฒเบกเปเบเบเบเปเบฒเบเบซเบฒเบเปเบเปเบเปเบฅเบฐเบเบฑเปเบเบเบญเบ.
เบเบธเบเบชเบธเบกเบเบญเบเบเบปเบเบเบงเบฒเบกเบเบธเบเบเบตเปเปเบกเปเบเบเปเปเปเบกเปเบเบงเบดเบเบตเบเบฒเบเบเบฝเบ microservices, เปเบเปเบงเบดเบเบตเบเบฒเบเปเบฎเบฑเบเปเบซเปเบเบงเบเบกเบฑเบเปเบฎเบฑเบเบงเบฝเบเบขเบนเปเปเบเบฅเบฐเบเบปเบเบเบฝเบง. เปเบเบเบฐเบเบฐเบเบตเปเบชเบดเปเบเบเบฑเบเบซเบกเบปเบเปเบซเบผเบปเปเบฒเบเบตเปเบกเบฑเบเบเบฐเบขเบนเปเบเบญเบเบเบงเบฒเบกเบฎเบฑเบเบเบดเบเบเบญเบเบเบญเบเบเบฑเบเบเบฑเบเบเบฐเบเบฒ, เบเปเบฒเบเบฐเปเบเบปเปเบฒเบเบดเบเบงเปเบฒเบกเบฑเบเบเบฑเบเปเบเบฑเบเบเบฐเปเบซเบเบเบเบตเปเบเบฐเบกเบตเบเบงเบฒเบกเบเบธเปเบเปเบเบตเบเบเบฑเบเบเบงเบเปเบเบปเบฒเบขเปเบฒเบเบซเบเปเบญเบ 20% (เปเบเบดเปเบเบฎเบนเปเบงเปเบฒเบเบงเบกเปเบญเบปเบฒ 80% เบเบญเบเบเบปเบเปเบเปเบฎเบฑเบ). เบเบฒเบเบซเบปเบงเบเปเปเบเบตเปเบชเปเบฒเบเบฑเบเปเบเบฑเปเบ: เบเบงเบฒเบกเบเบญเบเปเบ, เบเบฐเบเบทเบเบเบฐเปเบงเปเบเบฒเบเปเบเบเบเบฒเบเบเบตเป, เบเบฑเบเบเบฑเปเบเปเบเปเบเบนเปเบเบฝเบเปเบเบปเปเบฒเปเบเบเบฝเบเปเบฅเบฑเบเบเปเบญเบเบเปเบฝเบงเบเบฑเบเปเบฅเบทเปเบญเบเบเบตเป; เบฅเบฐเบเบปเบเบเปเบฒเบฅเบฑเบเบเบทเบเบชเปเบฒเบเบเบทเปเบเบชเบฐเปเบเบฒเบฐเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเปเบฒเปเบเปเบชเปเบงเบเบเบธเบเบเบปเบ. เบเปเบฒโเบเบฐโเปเบเบปเปเบฒโเบเบดเบโเบเบตโเบเปเบญเบโเบฎเบฑเบโเบเบงเบฒเบกโเบเบดเบโเปเบซเบฑเบโเปเบฅเบฐโเบเบฒเบโเบงเบดโเบเบฒเบโเปเบโเบเบฒเบโเบเปเปโเบชเปเบฒเบ.
เบเบฒเบเบชเปเบฒเบ microservices
เบเบฒเบเบเปเบฅเบดเบเบฒเบเปเบเปเบเบทเบเบเบฝเบเปเบงเปเปเบ Java 11 เปเบเบเปเบเป Spring Boot. เบเบฒเบเบชเบทเปเบชเบฒเบเบฅเบฐเบซเบงเปเบฒเบเบเบฒเบเบเปเบฅเบดเบเบฒเบเบเบทเบเบเบฑเบเบเบฑเปเบเปเบเบเปเบเป REST. เปเบเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบงเบเบฐเบเบฐเบเบญเบเบกเบตเบเปเบฒเบเบงเบเบเบฒเบเบเบปเบเบชเบญเบเบเปเบฒเปเบชเบธเบเบเบตเป (เบเบฑเปเบเบเบฑเปเบเบเปเปเบกเบฒเบเบฐเบกเบตเบเบฒเบเบชเบดเปเบเบเบฒเบเบขเปเบฒเบเบเบตเปเบเบฐเบเบปเบเบชเบญเบเปเบ Jenkins). เบฅเบฐเบซเบฑเบเปเบซเบผเปเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเปเบฅเบดเบเบฒเบเปเบกเปเบเบกเบตเบขเบนเปเปเบ GitHub:
เปเบเบทเปเบญเปเบซเปเบชเบฒเบกเบฒเบเบเบงเบเบชเบญเบเบชเบฐเบเบฒเบเบฐเบเบญเบเปเบเปเบฅเบฐเบเปเบฅเบดเบเบฒเบ, Spring Actuator เปเบเปเบเบทเบเปเบเบตเปเบกเปเบเบปเปเบฒเปเบเบเบฒเบเปเบเบดเปเบเบเบฒเบญเบฒเปเบชเบเบญเบเบเบงเบเปเบเบปเบฒ. เบกเบฑเบเบเบฐเบชเปเบฒเบเบเบธเบเบชเบดเปเบเบชเบธเบ / เบเบปเบงเบเบฐเบเบธเปเบ / เบชเบธเบเบฐเบเบฒเบเปเบฅเบฐเบเบฐเบเบฑเบเบเบทเบเบชเบฐเบเบฒเบเบฐเบเบฒเบเบเบญเบ 200 เบเปเบฒเบเบฒเบเบเปเบฅเบดเบเบฒเบเบเปเบญเบกเบเบตเปเบเบฐเบเบญเบกเบฎเบฑเบเบเบฒเบเบเบฐเบฅเบฒเบเบญเบ, เบซเบผเบท 504 เปเบเบเปเบฅเบฐเบเบตเบเบตเปเบกเบตเบเบฑเบเบซเบฒ. เปเบเบเปเบฅเบฐเบเบตเบเบตเป, เบเบตเปเปเบกเปเบเบเบฒเบเบเบงเบเบชเบญเบเบเบตเปเบชเบปเบกเบกเบธเบเบเบดเบเบฒเบ, เปเบเบฒเบฐเบงเปเบฒเบเบฒเบเบเปเบฅเบดเบเบฒเบเปเบกเปเบเบเปเบฒเบเบเบฒเบเบซเบผเบฒเบ, เปเบฅเบฐเบเบฒเบเปเบเปเบชเบฐเบเบฒเบเบฐเบเบฒเบเบเบฑเบเบเบฑเบเบเบฒเบเบเบฐเบเบดเบ, เบเบงเบเบกเบฑเบเบกเบฑเบเบเบฐเบเปเปเบชเบฒเบกเบฒเบเปเบเปเปเบเปเบขเปเบฒเบเบชเบปเบกเบเบนเบเบเปเบงเบฒเบเบฒเบเบเปเบฒเปเบเบตเบเบเบฒเบเบเบฒเบเบชเปเบงเบ. เปเบเปเปเบเบฅเบฐเบเบปเบเบเบตเปเปเบเปเบเบดเบ, Actuator เบชเบฒเบกเบฒเบเบเปเบงเบเบงเบดเบเบดเบเปเบชเบเบฑเบเบซเบฒเบเปเบญเบเบเบตเปเบเบนเปเปเบเปเบเบฐเปเบฅเบตเปเบกเบเบตเบกเบฑเบ. เบเบปเบงเบขเปเบฒเบ, เบเปเบฒเบเบฑเบเบซเบฒเปเบเบตเบเบเบถเปเบเบเบฑเบเบเบฒเบเปเบเบปเปเบฒเปเบเบดเบเบเบฒเบเบเปเปเบกเบนเบ, เบเบงเบเปเบฎเบปเบฒเบเบฐเบชเบฒเบกเบฒเบเบเบญเบเบชเบฐเบซเบเบญเบเบญเบฑเบเบเบฐเปเบเบกเบฑเบเบเปเปเบเบฑเบเบเบฒเบเบเบตเปเปเบเบเบเบฒเบเบขเบธเบเบเบฒเบเบฎเปเบญเบเบเปเบเบฒเบเบเบฐเบกเบงเบเบเบปเบเบเปเบงเบเบเบปเบงเบขเปเบฒเบเบเบตเปเปเบเบเบซเบฑเบเบเบญเบเบเบฒเบเบเปเบฅเบดเบเบฒเบ.
เบเปเบฅเบดเบเบฒเบเบเปเบฒเบเบซเบผเบฑเบ
เบเปเบฅเบดเบเบฒเบ backend เบเบฝเบเปเบเปเบเบฐเบเบฑเบเปเบฅเบฐเบชเบปเปเบเบเบทเบเบเปเบฒเบเบงเบเบเปเบฒเบฎเปเบญเบเบเปเบเบตเปเบเบญเบกเบฎเบฑเบ.
เบฅเบฐเบซเบฑเบเบเบงเบเบเบธเบก:
@RestController
public class RequestsCounterController {
private final AtomicLong counter = new AtomicLong();
@GetMapping("/requests")
public Long getRequestsCount() {
return counter.incrementAndGet();
}
}
เบเบฒเบโเบเบปเบโเบชเบญเบโเบเบฒเบโเบเบงเบโเบเบธเบกโ:
@WebMvcTest(RequestsCounterController.class)
public class RequestsCounterControllerTests {
@Autowired
private MockMvc mockMvc;
@Test
public void firstRequest_one() throws Exception {
mockMvc.perform(get("/requests"))
.andExpect(status().isOk())
.andExpect(MockMvcResultMatchers.content().string("1"));
}
}
เบเปเบฅเบดเบเบฒเบเบเปเบฒเบเบเบฐเบเบน
gateway เบเบฐเบชเบปเปเบเบเปเปเบเปเบฒเบฎเปเบญเบเบเปเปเบเบเบฑเบเบเปเบฅเบดเบเบฒเบ backend, เปเบชเบตเบกเบกเบฑเบเบเปเบงเบเบเปเปเบกเบนเบเบเบฑเปเบเบเปเปเปเบเบเบตเป:
- เบฅเบฐเบซเบฑเบเบเบฐเบเบน. เบกเบฑเบเปเบเบฑเบเบชเบดเปเบเบเปเบฒเปเบเบฑเบเปเบเบทเปเบญเปเบซเปเบเบปเบงเบขเปเบฒเบเบซเบเบถเปเบเบเบญเบเบเบฐเบเบนเบชเบฒเบกเบฒเบเปเบเปเบฎเบฑเบเบเบฒเบเบเปเบฒเปเบเบเบเบฒเบเบญเบทเปเบเปเบเบเบเบฒเบเบเบญเบเบชเบฐเบซเบเบญเบเบเบญเบเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบ
- "เบเบงเบฒเบกเบฅเบฑเบ" เบเบตเปเปเบเปเบเบญเบเบเบตเปเบเบฐเบกเบตเบเบปเบเบเบฒเบเบเบญเบเบฅเบฐเบซเบฑเบเบเปเบฒเบเบเบตเปเบชเปเบฒเบเบฑเบเบซเบผเบฒเบ (เบซเบกเบฒเบเปเบฅเบเบฅเบฐเบซเบฑเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบเบปเปเบฒเบฅเบฐเบซเบฑเบเบเบธเบเบเบตเบเบตเปเบชเปเบฒเบเบฑเบ)
เบเบฒเบเบเบฑเปเบเบเปเบฒเปเบ application.properties:
backend.url=http://localhost:8081
instance.id=${random.int}
secret="default-secret"
เบญเบฐเปเบเบฑเบเปเบเบตเบชเปเบฒเบฅเบฑเบเบเบฒเบเบชเบทเปเบชเบฒเบเบเบฑเบ backend:
@Service
public class BackendAdapter {
private static final String REQUESTS_ENDPOINT = "/requests";
private final RestTemplate restTemplate;
@Value("${backend.url}")
private String backendUrl;
public BackendAdapter(RestTemplateBuilder builder) {
restTemplate = builder.build();
}
public String getRequests() {
ResponseEntity<String> response = restTemplate.getForEntity(
backendUrl + REQUESTS_ENDPOINT, String.class);
return response.getBody();
}
}
เบเบปเบงเบเบงเบเบเบธเบก:
@RestController
@RequiredArgsConstructor
public class EndpointController {
private final BackendAdapter backendAdapter;
@Value("${instance.id}")
private int instanceId;
@Value("${secret}")
private String secret;
@GetMapping("/")
public String getRequestsCount() {
return String.format("Number of requests %s (gateway %d, secret %s)", backendAdapter.getRequests(), instanceId, secret);
}
}
เปเบเบตเบเบเบปเบง:
เบกเบฒเปเบเบตเบเบชเบฒเบเบซเบผเบฑเบ:
./mvnw package -DskipTests
java -Dserver.port=8081 -jar target/microservices-backend-1.0.0.jar
เปเบซเปเปเบฅเบตเปเบกเบเบปเปเบเบเบฐเบเบน:
./mvnw package -DskipTests
java -jar target/microservices-gateway-1.0.0.jar
เบเบงเบเปเบฎเบปเบฒเบเบงเบเปเบเบดเปเบ:
$ curl http://localhost:8080/
Number of requests 1 (gateway 38560358, secret "default-secret")
เบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเปเบกเปเบเปเบฎเบฑเบเบงเบฝเบ. เบเบนเปเบญเปเบฒเบเบเบตเปเปเบญเบปเบฒเปเบเปเบชเปเบเบฐเบชเบฑเบเปเบเบเบงเปเบฒเบเปเปเบกเบตเบซเบเบฑเบเบเบตเบเบเบงเบฒเบเบเบงเบเปเบฎเบปเบฒเบเบฒเบเบเบฒเบเปเบเบปเปเบฒเปเบเบดเบ backend เปเบเบเบเบปเบ, เบเปเบฒเบกเบเบฐเบเบน (
เบเบญเบเบเบฒเบเบเบตเป, เบเบฑเบเบชเบญเบเบเปเบฅเบดเบเบฒเบเปเบเปเบเบเบฑเบเบฅเบฐเบเบปเบเปเบเบฅเปเบเบฝเบงเบเบฑเบ, เบชเปเบฒเบเบเบฐเบเบนเป, เปเบฅเบฐเบเบธเบเบซเบเบถเปเบเบชเบฒเบกเบฒเบเปเบฅเบตเปเบกเบเบปเปเบเปเบเบเปเบเบเปเบเบดเปเบเบเบฑเบเปเบฅเบฐเบเบฑเบ. เบกเบฑเบเบเบฐเปเบเบฑเบเบเบฒเบเบเบตเบเบตเปเบเบฐเปเบเบ microservices เบเบญเบเบเบงเบเปเบฎเบปเบฒ. เบเบตเปเบชเบฒเบกเบฒเบเบเบฑเบเบฅเบธเปเบเปเปเบเบเบเบฒเบเปเบเบเบขเบฒเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเปเบเบเบปเปเบงเปเบเบทเปเบญเบเบเบตเปเปเบเบเบเปเบฒเบเบเบฑเบ (เปเบเบดเบเบซเบผเบฒเบ, เบกเบตเบเบงเบฒเบกเบซเบเบธเปเบเบเบฒเบ), เบเบฒเบเบเปเบฒเปเบเปเปเบเบทเปเบญเบเบเบฑเบ virtual (เบเบฑเบเบเบฐเบเบฒเบเบญเบเบซเบผเบฒเบ, เบเบฒเบเปเบฅเบตเปเบกเบเบปเปเบเบเบฒเบง) เบซเบผเบทเบเบฒเบเบเปเบฒเปเบเป containerization. เบเบฑเปเบเบเบตเปเบเบฒเบเปเบงเป, เบเบงเบเปเบฎเบปเบฒเปเบฅเบทเบญเบเบเบฒเบเปเบฅเบทเบญเบเบเบตเบชเบฒเบกเปเบฅเบฐ
Docker
เปเบเบชเบฑเปเบ, Docker เบชเปเบฒเบเบเบฑเบเบเบธเบเบตเปเปเบเบเบเปเบฝเบง, เบซเบเบถเปเบเบเปเปเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบ. เปเบเบทเปเบญเปเบเป Docker, เบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเบเบฝเบ Dockerfile - เบเปเบฒเปเบเบฐเบเปเบฒเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเปเปเบชเปเบฒเบเปเบฅเบฐเปเบฅเปเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบ. เบเปเปโเปเบโ, เบเปเบฒเบโเบชเบฒโเบกเบฒเบโเบชเปเบฒเบโเบฎเบนเบโเบเบฒเบโ, เบญเบฑเบโเบกเบฑเบโเบเบฑเบโเบเบฒเบโเบเบปเบโเบเบฐโเบเบฝเบโเบฎเบนเบโเบเบฒเบ (เบเปเปโ.
dockerfile
เบซเบเบถเปเบเปเบเบฅเบฑเบเบชเบฐเบเบฐเบเบตเปเบชเปเบฒเบเบฑเบเบเบตเปเบชเบธเบเบเบญเบเบฎเบนเบเบเบฒเบเปเบกเปเบเบเบฐเบซเบเบฒเบเบเบญเบเบกเบฑเบ. เบฎเบนเบเบเบฒเบเบเบฐเปเบฒเบเบเปเบญเบเบเบฐเบเบฒเบงเปเบซเบผเบเปเบงเบเบถเปเบเบเบฒเบเบเปเบญเบเปเบเบฑเบเบกเปเบฝเบเบเบฒเบเปเบ, เปเบเปเบเบทเปเบเบเบตเปเปเปเบญเบเบฅเบปเบ, เปเบฅเบฐเบเบฒเบเบเปเบฅเบดเบเบฒเบเบเบญเบเบเปเบฒเบเบเบฐเปเบฅเบตเปเบกเปเบงเบเบถเปเบ. เบฎเบนเบเบเบฒเบเปเบเบเปเปเบเบทเบเบชเปเบฒเบเบเบถเปเบเบเบปเบเบเบทเปเบเบเบฒเบเบเบญเบเบฎเบนเบเบเบฒเบเบเบทเปเบเบเบฒเบ, เปเบฅเบฐเปเบเบฐเบเปเบฒเปเบซเปเปเบฅเบทเบญเบเบเบฒเบเปเบฅเบทเบญเบเบเบตเปเบซเบเปเบญเบเบเบตเปเบชเบธเบ. เบเบฒเบโเปเบฅเบทเบญเบโเบเบตเปโเบเบตโเปเบกเปเบ Alpine, เบเบฒเบโเปเบเปโเบเบฐโเบเบฒเบ Linux เบขเปเบฒเบโเปเบเบฑเบกโเบเบตเปโเบเบตเปโเบกเบตโเบขเปเบฒเบโเบซเบเปเบญเบโเบเบญเบโเบเบฒเบโเบซเบธเปเบกโเบซเปเป.
เบเปเบฒเบญเบดเบ, เปเบซเปเบเบฐเบเบฒเบเบฒเบกเบเบฝเบ Dockerfile "head-on" (เบเปเบฒเบเบฐเปเบเบปเปเบฒเบเบฐเปเบงเบปเปเบฒเบเบฑเบเบเบตเบงเปเบฒเบเบตเปเปเบกเปเบเบงเบดเบเบตเบเบตเปเบเปเปเบเบต, เบขเปเบฒเปเบฎเบฑเบ):
FROM adoptopenjdk/openjdk11:jdk-11.0.5_10-alpine
ADD . /src
WORKDIR /src
RUN ./mvnw package -DskipTests
EXPOSE 8080
ENTRYPOINT ["java","-jar","target/microservices-gateway-1.0.0.jar"]
เปเบเบเบตเปเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเปเบฒเบฅเบฑเบเปเบเปเบฎเบนเบเบเบฒเบเบเบทเปเบเบเบฒเบเบเบญเบ Alpine เบเบฑเบ JDK เบเบตเปเบเบดเบเบเบฑเปเบเปเบฅเปเบงเปเบเบทเปเบญเบชเปเบฒเบเปเบเบเบเบฒเบเบเบญเบเบเบงเบเปเบฎเบปเบฒ. เบเบฒเบเบเปเบฒเปเบเปเบเปเบฒเบชเบฑเปเบ ADD, เบเบงเบเปเบฎเบปเบฒเปเบเบตเปเบกเปเบเปเบฅเบเบฐเบเปเบฅเบต src เปเบเบเบฑเบเบเบธเบเบฑเบเปเบชเปเบฎเบนเบเบเบฒเบ, เบซเบกเบฒเบเบงเปเบฒเบกเบฑเบเปเบฎเบฑเบเบงเบฝเบ (WORKDIR) เปเบฅเบฐเปเบฅเบตเปเบกเบเบปเปเบเบเบฒเบเบเปเปเบชเปเบฒเบ. เบเปเบฒเบชเบฑเปเบ EXPOSE 8080 เบชเบฑเบเบเบฒเบเบเบฑเบ docker เบงเปเบฒเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเปเบ container เบเบฐเปเบเปเบเบญเบ 8080 เบเบญเบเบกเบฑเบ (เบญเบฑเบเบเบตเปเบเบฐเบเปเปเปเบฎเบฑเบเปเบซเปเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเบชเบฒเบกเบฒเบเปเบเบปเปเบฒเปเบเบดเบเปเบเปเบเบฒเบเบเบฒเบเบเบญเบ, เปเบเปเบเบฐเบญเบฐเบเบธเบเบฒเบเปเบซเปเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเปเบเบปเปเบฒเปเบเบดเบเปเบเป, เบเบปเบงเบขเปเบฒเบ, เบเบฒเบ container เบญเบทเปเบเปเบเปเบเบทเบญเบเปเบฒเบ docker เบเบฝเบงเบเบฑเบ. ).
เปเบเบทเปเบญเบซเบธเปเบกเบซเปเปเบเบฒเบเบเปเบฅเบดเบเบฒเบเปเบเบปเปเบฒเปเบเปเบเบฎเบนเบเบเบฒเบ, เบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเบเปเบฒเปเบเบตเบเบเบฒเบเบเปเบฒเบชเบฑเปเบเบเบฒเบเบฎเบฒเบเบเบญเบเปเบเปเบฅเบฐเปเบเบเบเบฒเบ:
docker image build . -t msvc-backend:1.0.0
เบเบฑเปเบเบเบฑเปเบ, เบเบงเบเปเบฎเบปเบฒเปเบเปเบฎเบฑเบเบฎเบนเบเบเบฒเบเบเบตเปเบกเบตเบเบฐเบซเบเบฒเบ 456 MB (เปเบเบดเปเบเบฎเบนเบเบเบฒเบ JDK 340 เบเบทเปเบเบเบฒเบเปเบเป MB). เปเบฅเบฐเบเบฑเบเบซเบกเบปเบเปเบเบดเบเบงเปเบฒเบเบฐเบกเบตเบเบงเบฒเบกเบเบดเบเบเบตเปเบงเปเบฒเบซเปเบญเบเบฎเบฝเบเปเบเปเบเบเบเบฒเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบเบเบทเบเบเบฑเบเบขเบนเปเปเบเบเบดเปเบงเบกเบทเบซเบเบถเปเบ. เปเบเบทเปเบญเบซเบผเบธเบเบเบฐเปเบฒเบเบเบญเบเบฎเบนเบเบเบญเบเบเบงเบเปเบฎเบปเบฒ:
- เบเบงเบเปเบฎเบปเบฒเปเบเปเบเบฒเบเบเบฐเบเบญเบเบซเบผเบฒเบเบเบฑเปเบเบเบญเบ. เปเบเบเบฑเปเบเบเบญเบเบเปเบฒเบญเบดเบเบเบงเบเปเบฎเบปเบฒเบเบฐเบเบฐเบเบญเบเปเบเบเบเบฒเบ, เปเบเบเบตเบชเบญเบเบเบงเบเปเบฎเบปเบฒเบเบฐเบเบดเบเบเบฑเปเบ JRE, เปเบฅเบฐเปเบเบเบฑเปเบเบเบญเบเบเบตเบชเบฒเบกเบเบงเบเปเบฎเบปเบฒเบเบฐเบเบฑเบเบฅเบญเบเบเบฑเบเบซเบกเบปเบเบเบตเปเปเบเบปเปเบฒเปเบเปเบเบฎเบนเบ Alpine เบเบตเปเบชเบฐเบญเบฒเบเปเบซเบกเป. เปเบเบเปเบฒเบเบงเบเบเบฑเบเบซเบกเบปเบ, เบฎเบนเบเบเบฒเบเบชเบธเบเบเปเบฒเบเบเบฐเบกเบตเบเบฝเบเปเบเปเบญเบปเบเบเบฐเบเบญเบเบเบตเปเบเปเบฒเปเบเบฑเบ.
- เปเบซเปเปเบเป java modularization. เปเบฅเบตเปเบกเบเบปเปเบเบเปเบงเบ Java 9, เบเปเบฒเบเบชเบฒเบกเบฒเบเบเปเบฒเปเบเปเปเบเบทเปเบญเบเบกเบท jlink เปเบเบทเปเบญเบชเปเบฒเบ JRE เบเบฒเบเบเบฝเบเปเบเปเปเบกเบเบนเบเบเบตเปเบเปเบฒเบเบเปเบญเบเบเบฒเบ
เบชเปเบฒเบฅเบฑเบเบเบนเปเบเบตเปเบขเบฒเบเบฎเบนเปเบขเบฒเบเปเบซเบฑเบ, เบเบตเปเปเบกเปเบเบเบปเบเบเบงเบฒเบกเบเบตเปเบเบตเบเปเบฝเบงเบเบฑเบเบงเบดเบเบตเบเบฒเบเบซเบผเบธเบเบเปเบญเบเบเบฐเบซเบเบฒเบเบฎเบนเบเบเบฒเบ
Dockerfile เบชเบธเบเบเปเบฒเบ:
FROM adoptopenjdk/openjdk11:jdk-11.0.5_10-alpine as builder
ADD . /src
WORKDIR /src
RUN ./mvnw package -DskipTests
FROM alpine:3.10.3 as packager
RUN apk --no-cache add openjdk11-jdk openjdk11-jmods
ENV JAVA_MINIMAL="/opt/java-minimal"
RUN /usr/lib/jvm/java-11-openjdk/bin/jlink
--verbose
--add-modules
java.base,java.sql,java.naming,java.desktop,java.management,java.security.jgss,java.instrument
--compress 2 --strip-debug --no-header-files --no-man-pages
--release-info="add:IMPLEMENTOR=radistao:IMPLEMENTOR_VERSION=radistao_JRE"
--output "$JAVA_MINIMAL"
FROM alpine:3.10.3
LABEL maintainer="Anton Shelenkov [email protected]"
ENV JAVA_HOME=/opt/java-minimal
ENV PATH="$PATH:$JAVA_HOME/bin"
COPY --from=packager "$JAVA_HOME" "$JAVA_HOME"
COPY --from=builder /src/target/microservices-backend-*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]
เบเบงเบเปเบฎเบปเบฒเบชเปเบฒเบเบฎเบนเบเบเบทเบเปเปเป, เปเบฅเบฐเปเบเบเบตเปเบชเบธเบเบกเบฑเบเบเปเบเบฒเบเบฅเบปเบ 6 เปเบเบปเปเบฒ, เปเบเบปเปเบฒเบเบฑเบ 77 MB. เบเปเปเบเบต. เบซเบผเบฑเบโเบเบฒเบโเบเบฑเปเบโ, เบฎเบนเบโเบเบฒเบโเบชเปเบฒโเปเบฅเบฑเบโเบฎเบนเบโเบชเบฒโเบกเบฒเบโเปเบเปโเบฎเบฑเบโเบเบฒเบโเบญเบฑเบโเปเบซเบผเบโเบเบฑเบโเบเบฒเบโเบเบปเบโเบเบฐโเบเบฝเบโเบฎเบนเบโเบเบฒเบโเปเบเบทเปเบญโเปเบซเปโเบฎเบนเบโเบเบฒเบโเบเบญเบโเบเปเบฒเบโเบกเบตโเบชเปเบฒโเบฅเบฑเบโเบเบฒเบโเบเบฒเบงโเปเบซเบผเบโเบเบฒเบโเบญเบดเบโเปเบเบตโเปเบเบฑเบโ.
เปเบฅเปเบเบเปเบฅเบดเบเบฒเบเบฎเปเบงเบกเบเบฑเบเปเบ Docker
เปเบเบทเปเบญเปเบฅเบตเปเบกเบเบปเปเบเบเปเบงเบ, เบเบฒเบเบเปเบฅเบดเบเบฒเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเบเปเบญเบเบขเบนเปเปเบเปเบเบทเบญเบเปเบฒเบเบเบฝเบงเบเบฑเบ. เบกเบตเบซเบผเบฒเบเบเบฐเปเบเบเบเบญเบเปเบเบทเบญเบเปเบฒเบเปเบ Docker, เปเบฅเบฐเบเบงเบเปเบฎเบปเบฒเปเบเป primitive เบเบตเปเบชเบธเบเบเบญเบเบเบงเบเปเบเบปเบฒ - เบเบปเบง, เปเบเบดเปเบเบเปเบงเบเปเบซเปเบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเบทเบญเบเปเบฒเบเบเบฑเบเบเบธเบเบตเปเปเบฎเบฑเบเบงเบฝเบเบขเบนเปเปเบเปเบฎเบเบเบฝเบงเบเบฑเบ. เบกเบฒเบชเปเบฒเบเปเบเบทเบญเบเปเบฒเบเบเปเบงเบเบเบณเบชเบฑเปเบเบเปเปเปเบเบเบตเป:
docker network create msvc-network
เบเปเปเปเบ, เปเบซเปเปเบเบตเบเบเบปเบงเบเบฑเบเบเบธ backend เบเบตเปเบกเบตเบเบทเปเบงเปเบฒ 'backend' เบเบฑเบ microservices-backend: 1.0.0:
docker run -dit --name backend --network msvc-net microservices-backend:1.0.0
เบกเบฑเบเปเบเบฑเบเบกเบนเบเบเปเบฒเบเบตเปเบชเบฑเบเปเบเบเบงเปเบฒเปเบเบทเบญเบเปเบฒเบเบเบปเบงเบชเบฐเบซเบเบญเบเบเบฒเบเบเปเบฅเบดเบเบฒเบเบเบปเปเบเบเบปเบเบญเบญเบเบเบฒเบเบเปเบญเบเบชเปเบฒเบฅเบฑเบเบเบนเปเบเบญเบเปเบเบเปเบเบตเปเบเบเบเบทเปเบเบญเบเบเบงเบเปเบเบปเบฒ. เบเบฑเปเบเปเบกเปเบ, เบเบฒเบเบเปเบฅเบดเบเบฒเบ backend เบเบฐเบกเบตเบขเบนเปเปเบเปเบเบทเบญเบเปเบฒเบ Docker เบขเบนเป
เปเบซเปเปเบฅเบตเปเบกเบเบปเปเบเบเบฐเบเบน:
docker run -dit -p 80:8080 --env secret=my-real-secret --env BACKEND_URL=http://backend:8080/ --name gateway --network msvc-net microservices-gateway:1.0.0
เปเบเบเปเบฒเบชเบฑเปเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเบตเปเปเบซเปเปเบซเบฑเบเบงเปเบฒเบเบงเบเปเบฎเบปเบฒเบเปเบฒเบฅเบฑเบเบชเบปเปเบเบเปเปเบเบญเบ 80 เบเบญเบเปเบฎเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเปเบเบซเบฒเบเบญเบ 8080 เบเบญเบเบเบนเปเบเบญเบเปเบเบเปเบเบต. เบเบงเบเปเบฎเบปเบฒเปเบเปเบเบปเบงเปเบฅเบทเบญเบ env เปเบเบทเปเบญเบเปเบฒเบเบปเบเบเบปเบงเปเบเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบกเบเบตเปเบเบฐเบเบทเบเบญเปเบฒเบเปเบเบเบญเบฑเบเบเบฐเปเบเบกเบฑเบเปเบเบเบฒเบเบฎเบฝเบ spring เปเบฅเบฐ override เบเบธเบเบชเบปเบกเบเบฑเบเบเบฒเบ application.properties.
เบซเบผเบฑเบเบเบฒเบเบเบฒเบเปเบเบตเบเบเบปเบง, เปเบเบซเบฒ
เบชเบฐเบซเบฅเบธเบ
เบเบฑเปเบเบเบฑเปเบ, เบเบงเบเปเบฎเบปเบฒเปเบเปเบชเปเบฒเบเบชเบญเบ microservices เบเปเบฒเบเบเบฒเบ, เบซเบธเปเบกเบซเปเปเบเบงเบเบกเบฑเบเบขเบนเปเปเบ docker containers เปเบฅเบฐเปเบเบตเบเบเบปเบงเบกเบฑเบเบฎเปเบงเบกเบเบฑเบเปเบเปเบเบทเปเบญเบเบเบฝเบงเบเบฑเบ. เบขเปเบฒเบเปเบเบเปเบเบฒเบก, เบฅเบฐเบเบปเบเบเบปเบเปเบเปเบฎเบฑเบ, เบกเบตเบเปเปเปเบชเบเบเบฝเบเบเปเบฒเบเบงเบเบซเบเบถเปเบ:
- เบเบงเบฒเบกเบเบปเบเบเบฒเบเบเปเปเบเบงเบฒเบกเบเบดเบเบเบฒเบเบเบตเปเบเปเปเบเบต - เบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเปเบฎเบฑเบเบงเบฝเบเบขเบนเปเปเบเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบเบเบฝเบงเบชเปเบฒเบฅเบฑเบเบเบงเบเปเบฎเบปเบฒ
- เบเบงเบฒเบกเบชเบฒเบกเบฒเบเปเบเบเบฒเบเบเบฐเบซเบเบฒเบเปเบเปเบเปเปเบเบต - เปเบกเบทเปเบญเบเบฒเบเปเบซเบผเบเปเบเบตเปเบกเบเบถเปเบ, เบกเบฑเบเบเบฐเปเบเบฑเบเบเบฒเบเบเบตเบเบตเปเบเบฐเบเปเบฒเปเบเปเบเบปเบงเบขเปเบฒเบเบเบฒเบเบเปเบฅเบดเบเบฒเบเปเบเบตเปเบกเปเบเบตเบกเปเบเบเบญเบฑเบเบเบฐเปเบเบกเบฑเบเปเบฅเบฐเบเบธเปเบเบเปเบฝเบเบเบฒเบเปเบซเบผเบเบฅเบฐเบซเบงเปเบฒเบเบเบงเบเบกเบฑเบ.
- เบเบฒเบเปเบเบตเบเบเบปเบงเบเบงเบฒเบกเบชเบฑเบเบชเบปเบ - เบเบงเบเปเบฎเบปเบฒเบเปเบญเบเบเบฒเบเปเบชเปเบขเปเบฒเบเบซเบเปเบญเบ 3 เบเปเบฒเบชเบฑเปเบ, เบกเบตเบเบปเบงเบเปเบฒเบเบปเบเบเบฒเบเบเบตเปเปเบเปเบเบญเบ (เบเบตเปเปเบกเปเบเบชเปเบฒเบฅเบฑเบ 2 เบเปเบฅเบดเบเบฒเบเปเบเบปเปเบฒเบเบฑเปเบ)
เปเบเบทเปเบญเปเบเปเปเบเบเบฑเบเบซเบฒเบเปเบฒเบเปเบเบดเบ, เบกเบตเบงเบดเบเบตเปเบเปเปเบเบเปเบฒเบเบงเบเบซเบเบถเปเบเปเบเบฑเปเบ Docker Swarm, Nomad, Kubernetes เบซเบผเบท OpenShift. เบเปเบฒเบฅเบฐเบเบปเบเบเบฑเบเบซเบกเบปเบเบเบทเบเบเบฝเบเปเบ Java, เบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเบดเปเบเปเบเบซเบฒ Spring Cloud (
ะ
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com