โš™๏ธ Devops/๐Ÿณ Docker

[Docker] Spring boot ํ”„๋กœ์ ํŠธ๋ฅผ ๋„์ปค ์ด๋ฏธ์ง€ํ™” ํ•ด๋ณด๊ธฐ

2022. 7. 5. 15:59
๋ชฉ์ฐจ
  1. ๊ฐ„๋‹จํ•œ spring boot ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ
  2. HomeController
  3. application.yml
  4. jar ํŒŒ์ผ ์ƒ์„ฑํ•˜๊ธฐ
  5. Dockerfile ์ƒ์„ฑ
  6. docker image ์ƒ์„ฑ
  7. docker scan ์—๋Ÿฌ
  8. ์‹คํ–‰ํ•ด๋ณด๊ธฐ
๋ฐ˜์‘ํ˜•

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 ์‹คํ–‰ ์‹œ ๋„˜๊ฒจ์คฌ๋˜ ํ™˜๊ฒฝ๋ณ€์ˆ˜๊ฐ€ ์ž˜ ์ „๋‹ฌ๋˜์–ด ์ถœ๋ ฅ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ฐ˜์‘ํ˜•
  1. ๊ฐ„๋‹จํ•œ spring boot ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ
  2. HomeController
  3. application.yml
  4. jar ํŒŒ์ผ ์ƒ์„ฑํ•˜๊ธฐ
  5. Dockerfile ์ƒ์„ฑ
  6. docker image ์ƒ์„ฑ
  7. docker scan ์—๋Ÿฌ
  8. ์‹คํ–‰ํ•ด๋ณด๊ธฐ
'โš™๏ธ Devops/๐Ÿณ Docker' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • Docker Permission Denied ํ•ด๊ฒฐ๋ฐฉ๋ฒ•
  • ๋„์ปค ์ด๋ฏธ์ง€ ๋นŒ๋“œ์‹œ ํ”Œ๋žซํผ ๋ณ€๊ฒฝํ•˜๊ธฐ (feat. M1 Mac)
  • [Docker] MySQL ์„ค์น˜ํ•˜๊ธฐ
  • Docker, Docker-Compose ์„ค์น˜ํ•˜๊ธฐ - Ubuntu 20.04 LTS
iseunghan
iseunghan
๊พธ์ค€ํ•˜๊ฒŒ ์—ด์‹ฌํžˆ..
iseunghan
iseunghan

๊ณต์ง€์‚ฌํ•ญ

  • ์–ด์ œ๋ณด๋‹ค ๋‚˜์€ ์˜ค๋Š˜์ด ๋˜๊ธฐ ์œ„ํ•ด ๐Ÿ”ฅ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (261)
    • ๐Ÿ’ Spring (14)
      • ๊ฐœ๋… ๋ฐ ์ดํ•ด (2)
      • Spring ํ•ต์‹ฌ ๊ธฐ์ˆ  (24)
      • Spring REST API (8)
      • Spring MVC, DB ์ ‘๊ทผ ๊ธฐ์ˆ  (7)
      • Spring Security (23)
      • Spring in Action (1)
    • ๐ŸŒป JAVA (84)
      • ์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ (20)
      • ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์ž๋ฃŒ๊ตฌ์กฐ (13)
      • ๋””์ž์ธ ํŒจํ„ด (7)
      • ์ •๋ฆฌ์ •๋ฆฌ์ •๋ฆฌ (43)
      • JUnit (1)
    • ๐Ÿ”– Snippets (3)
      • Javascript (3)
    • โš™๏ธ Devops (22)
      • โ› Git (11)
      • ๐Ÿณ Docker (6)
      • ๐Ÿง Linux (3)
      • ๐ŸŒˆ Jenkins (1)
      • ๐Ÿ“ฌ Kafka (1)
    • ๐Ÿ’ฌ ETC.. (4)
      • ๐Ÿ’ป macOS (2)
    • ๐ŸŒง๏ธ ORM (2)
      • JPA (2)
    • ๐Ÿ Python (2)
    • ๐Ÿ“š Databases (15)
      • ์˜ค๋ผํด๋กœ ๋ฐฐ์šฐ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐœ๋ก ๊ณผ ์‹ค์Šต(2ํŒ) (3)
      • RealMySQL 8.0 (8)
    • ๐Ÿ”ฅ Computer Science (5)
      • ๐Ÿ“ก ๋„คํŠธ์›Œํฌ (5)
    • ๐Ÿท๏ธ ํ˜‘์—… (1)
    • ๐Ÿ“œ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ (38)
      • BAEKJOON\์ˆ˜ํ•™ 1, ์ˆ˜ํ•™ 2 (8)
      • BAEKJOON\์žฌ๊ท€ (5)
      • BAEKJOON\๋ธŒ๋ฃจํŠธ ํฌ์Šค (3)
      • BAEKJOON\์ •๋ ฌ (1)
      • BAEKJOON\๋ฐฑํŠธ๋ž˜ํ‚น (5)
      • BAEKJOON\BFS, DFS (6)
      • BAEKJOON\์ด๋ถ„ํƒ์ƒ‰ (1)
      • BAEKJOON\๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ (9)
      • BAEKJOON\๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜ (0)
    • โœจ ISEUNGHAN (1)

์ธ๊ธฐ ๊ธ€

์ตœ๊ทผ ๊ธ€

์ „์ฒด
์˜ค๋Š˜
์–ด์ œ
๋ฐ˜์‘ํ˜•
hELLO ยท Designed By ์ •์ƒ์šฐ.
iseunghan
[Docker] Spring boot ํ”„๋กœ์ ํŠธ๋ฅผ ๋„์ปค ์ด๋ฏธ์ง€ํ™” ํ•ด๋ณด๊ธฐ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๊ฐœ์ธ์ •๋ณด

  • ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ
  • ํฌ๋Ÿผ
  • ๋กœ๊ทธ์ธ

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.