[Docker] Spring boot ํ๋ก์ ํธ๋ฅผ ๋์ปค ์ด๋ฏธ์งํ ํด๋ณด๊ธฐ
Spring boot ํ๋ก์ ํธ๋ฅผ docker image
๋ก ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค.
๊ฐ๋จํ spring boot ํ๋ก์ ํธ ์์ฑ
HomeController
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HomeController {
@GetMapping("/hello")
public String hello(@Value("${test.customName}") String name) {
return "hello, " + name + "!";
}
}
application.yml
test:
customName: ${CUSTOM_NAME}
"/hello"
๋ก ์์ฒญ์ด ๋ค์ด์ค๋ฉดapplication.yml
์ ๋ฏธ๋ฆฌ ์ ์ํtest.customName
์ ํจ๊ป ์ถ๋ ฅํ๋ ๋ฉ์๋์ ๋๋ค.
jar ํ์ผ ์์ฑํ๊ธฐ
Gradle -> build -> bootJar๋ฅผ ์คํํ๋ฉด build/libs/**.jar ๊ฐ ์์ฑ๋ฉ๋๋ค.
Dockerfile ์์ฑ
docker image
๋ฅผ ๋ง๋ค๊ธฐ ์ํด์๋ Dockerfile
์ด๋ผ๋ ํ์ผ์ ์ด๋ค base ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํด์ ๋ง๋ค์ง.. ๋ฑ๋ฑ์ ๋ช
์ ํด์ค์ผํฉ๋๋ค.
- ํ๋ก์ ํธ ์ต ์๋จ ๋๋ ํ ๋ฆฌ์
Dockerfile
์์ฑ
#!/bin/bash
# base ์ด๋ฏธ์ง ์ค์
FROM openjdk:8-jre-alpine
# jar ํ์ผ ์์น๋ฅผ ๋ณ์๋ก ์ค์
ARG JAR_FILE=build/*.jar
# ํ๊ฒฝ๋ณ์ ์ค์
ENV CUSTOM_NAME default
# jar ํ์ผ์ ์ปจํ
์ด๋ ๋ด๋ถ์ ๋ณต์ฌ
COPY ${JAR_FILE} test-app.jar
# ์ธ๋ถ ํธ์คํธ 8080 ํฌํธ๋ก ๋
ธ์ถ
EXPOSE 8080
# ์คํ ๋ช
๋ น์ด
CMD ["java", "-Dtest.customName=${CUSTOM_NAME}", "-jar", "test-app.jar"]
docker image ์์ฑ
์์์ ๋ง๋ Dockerfile
์ ๊ธฐ๋ฐ์ผ๋ก docker image
๋ฅผ ์์ฑํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
docker build
$ docker build -t {name}/{image} .
๋ง์ฝ Docker hub
์ ์ด๋ฏธ์ง๋ฅผ ์
๋ก๋ ํ๊ณ ์ถ๋ค๋ฉด name์ docker id์ ๋์ผํ๊ฒ ์ค์ ํด์ผ ํฉ๋๋ค.
docker scan ์๋ฌ
๋์ปค ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๋ ๋์ค docker scan
์ ์คํํ๋ผ๋ ๋ฉ์ธ์ง๊ฐ ๋ด์ต๋๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฐพ์๋ณด๋ alpine ์ด๋ฏธ์ง๋ฅผ scanํด์ฃผ๋ฉด ํด๊ฒฐ๋๋ค๊ณ ํฉ๋๋ค.
docker scan
$ docker scan alpine
- ๋ค์
docker build
$ docker build -t {name}/{image} .
- ์ด๋ฏธ์ง ์กฐํ
$ docker images
์ ์์ ์ผ๋ก ์ ์์ฑ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค!
์คํํด๋ณด๊ธฐ
$ docker run --it -e CUSTOM_NAME=iseunghan --name test-docker -p 8080:8080 {name}/{image}
- Docker ์คํ ์ ๋๊ฒจ์คฌ๋ ํ๊ฒฝ๋ณ์๊ฐ ์ ์ ๋ฌ๋์ด ์ถ๋ ฅ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.