๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐‘†๐‘ข๐‘›๐‘ โ„Ž๐‘–๐‘›๐‘’ ๐‘Ž๐‘“๐‘ก๐‘’๐‘Ÿ ๐‘Ÿ๐‘Ž๐‘–๐‘›โœง

[Docker] Dockerfile, ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑํ›„ ์‹คํ–‰ํ•˜๊ธฐ ๋ณธ๋ฌธ

๐—ฃ๐—ฟ๐—ผ๐—ด๐—ฟ๐—ฎ๐—บ๐—บ๐—ถ๐—ป๐—ด๐Ÿ’ป/๐ƒ๐จ๐œ๐ค๐ž๐ซ

[Docker] Dockerfile, ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑํ›„ ์‹คํ–‰ํ•˜๊ธฐ

๐ŸคRyusun๐Ÿค 2024. 3. 9. 22:17

๋„์ปค์˜ ์žฅ์ 
- ํ•˜์ดํผ ๋ฐ”์ด์ € ๊ตฌ์กฐ๋ฅผ ํ† ๋Œ€๋กœ ๋“ฑ์žฅํ–ˆ์œผ๋ฉฐ, VM๋ณด๋‹ค ํ›จ์”ฌ ๊ฐ€๋ณ๊ฒŒ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ์— ์œ ๋ฆฌ!

์ด๋ฏธ์ง€
- ์ฝ”๋“œ, ๋Ÿฌํƒ€์ž„, ์‹œ์Šคํ…œ ๋„๊ตฌ, ์‹œ์Šคํ…œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ์„ค์ •๊ณผ ๊ฐ™์€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“ ๊ฒƒ์„ ํ‘œํ•จํ•˜๋Š” ํŒจํ‚ค์ง€
- ์ปจํ…Œ์ด๋„ˆ๋ž€ ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๋…๋ฆฝ๋œ ๊ณต๊ฐ„์—์„œ ์‹คํ–‰ ํ• ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ธฐ์ˆ 
- ์ฆ‰ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์„ค์ •์ด๋‚˜ ์ข…์†์„ฑ๋“ค์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. 
- ์ปจํ…Œ์ด๋„ˆ๋Š” ์ด๋ฏธ์ง€ ์ธ์Šคํ„ด์Šค์ด๋ฉฐ, ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•œ๋‹ค.

Docker Compose๋ž€ 


- ๋ฉ€ํ‹ฐ ์ปจํ…Œ์ด๋„ˆ ๋„์ปค ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ •์˜ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ๋„๊ตฌ
- Application, Databse, Redis, Nginx ๋“ฑ ๊ฐ ๋…๋ฆฝ์ ์ธ ์ปจํ…Œ์ด๋„ˆ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค๊ณ  ํ–ˆ์„๋•Œ ๋‹ค์ค‘ ์ปจํ…Œ์ด๋„ˆ ๋ผ์ดํ”„ ์‚ฌ์ดํด์„ ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋กœ๋ถ€ํ„ฐ ์ด๋ฃจ์–ด์ง„ ์„œ๋น„์Šค๋ฅผ ๊ตฌ์ถ• ๋ฐ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ, ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค.
- docker-compose.yml ํŒŒ์ผ์„ ์ž‘์„ฑํ•˜์—ฌ 1ํšŒ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์„ค์ •๋œ ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ• ์ˆ˜ ์žˆ๋‹ค.


๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰์‹œ์ผœ๋ณด์ž! 

 

1. jar ํŒŒ์ผ ์ƒ์„ฑ

 

์šฐ์„  buildํ•˜๊ธฐ ์‰ฝ๊ฒŒ build.gradle์—์„œ jar ํŒŒ์ผ ์ด๋ฆ„ ๋ณ€๊ฒฝํ•œ๋‹ค.

bootJar {
archiveFileName = ‘app.jar’
}

 

gradle wrapper ๋ฅผ ์ด์šฉํ•˜์—ฌ jar ํŒŒ์ผ ์ƒ์„ฑ

$ gradlew clean build (Window)
$ ./gradlew clean build ( Linux, OSX)

 ์ƒ์„ฑ๋œ jarํŒŒ์ผ์˜ ๊ธฐ๋ณธ ๊ฒฝ๋กœ๋Š” ํ”„๋กœ์ ํŠธ์˜ build/libs/*.jar ์ด๋‹ค.

 

 

2. Dockerfile ์ƒ์„ฑํ•˜๊ธฐ

 

Dockerfile ์ด๋ž€ ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์žˆ์–ด์•ผ ํ•  ํŒจํ‚ค์ง€, ์˜์กด์„ฑ, ์†Œ์Šค์ฝ”๋“œ ๋“ฑ์„ ํ•˜๋‚˜์˜ file๋กœ ๊ธฐ๋กํ•˜์—ฌ ์ด๋ฏธ์ง€ํ™” ์‹œํ‚ฌ ๋ช…๋ น ํŒŒ์ผ์ด๋‹ค. ์ฆ‰, ์ด๋ฏธ์ง€๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋ชจ๋“  ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋” ์ด์ƒ ์ƒˆ๋กœ์šด ์„œ๋ฒ„๊ฐ€ ์ถ”๊ฐ€๋˜๋ฉด ์˜์กด์„ฑ ํŒŒ์ผ์„ ์ปดํŒŒ์ผํ•˜๊ณ  ์ด๊ฒƒ ์ €๊ฒƒ ์„ค์น˜ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค!

 

 

 

๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋„์šฐ๊ธฐ ์œ„ํ•ด์„œ๋Š” Dockerfile์„ ์ƒ์„ฑํ•ด๋ณด์ž.

์ธํ…”๋ฆฌ์ œ์ด์— ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ์— DockerfileํŒŒ์ผ์„ ์ƒ์„ฑํ•œ๋‹ค.

$ FROM  openjdk:11
$ ARG JAR_FILE=build/libs/app.jar
$ COPY ${JAR_FILE} ./app.jar
$ ENV TZ=Asia/Seoul
$ ENTRYPOINT ["java”, “-jar”, “./app.jar"]

 

 FROM  openjdk:11  = ์–ด๋–ค ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค์ง€ ์„ค์ •
ARG JAR_FILE-build/lib/app.jar = ๋ณ€์ˆ˜ ์„ค์ •(jar์œ„์น˜ ๊ฒฝ๋กœ)
COPY ${JAR_FILE} ./app.jar = ์ด ๊ฒฝ๋กœ์— ์žˆ๋Š” jar๋ฅผ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€๋กœ ๋ณต์‚ฌ 
ENV = TZ=Asia/Seoul = ํ™˜๊ฒฝ๋ณ€์ˆ˜ ํƒ€์ž„์กด ์„ค์ •
ENTRYPOINT [“java”, “-jar”, “./app.jar"] =  ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํ–‰๋ ๋•Œ ์–ด๋–ค ๋ช…๋ น์–ด๊ฐ€ ์‹คํ–‰๋˜์•ผ ํ• ์ง€๋ฅผ ์ง€์ •. ํ•ด๋‹น ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•ด์„œ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ ์‹คํ–‰์‹œํ‚ฌ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

 

 

 

 

3. Docker ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ ๋ฐ ์‹คํ–‰ํ•˜๊ธฐ

 

๋„์ปคํŒŒ์ผ์„ ์ด์šฉํ•ด์„œ ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜์ž.

 

//docker build -t [docker hub id]/[์ด๋ฏธ์ง€ ์ด๋ฆ„:ํƒœ๊ทธ] [Dockerfile์˜ ๊ฒฝ๋กœ] // docker hub id๋ฅผ ์ด์šฉํ•˜์—ฌ repository ์ฐพ๊ธฐ
docker build -t ryusunny/creditmarket-app .

 

์ •์ƒ์ ์œผ๋กœ build๊ฐ€ ๋˜์—ˆ์œผ๋ฉด 

docker images

๋ฅผ ํ†ตํ•ด์„œ ์ด๋ฏธ์ง€๋ฅผ ํ™•์ธํ•ด๋ณธ๋‹ค.

 

์ƒ์„ฑ๋œ ๋„์ปค์ด๋ฏธ์ง€๋ฅผ ํ†ตํ•ด์„œ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑ ๋ฐ ์‹œ์ž‘ํ•œ๋‹ค.

docker run ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ ๋ฐ ์‹œ์ž‘

$ docker run creditmarket-app -p 8080:8080

--name: ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„ ์ง€์ •

-p: ์ปจํ…Œ์ด๋„ˆ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์™ธ๋ถ€์™€ ๊ฒฉ๋ฆฌ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ˜ธ์ŠคํŠธ์™€ ์ปจํ…Œ์ด๋„ˆ port ํฌ์›Œ๋”ฉ ์ฒ˜๋ฆฌํ•œ๋‹ค.

 

์ด๋ฏธ์ง€๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š๊ณ  docker run ๋ช…๋ น์–ด๋งŒ ์ž‘์„ฑํ•  ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€๊ฐ€ ๋‚˜ํƒ€๋‚œ๋‹ค.

docker: "run" requires at least 1 argument.
 See 'docker run --help'.

 

๋„์ปค ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํ–‰์ค‘์ธ์ง€ ํ™•์ธํ•œ๋‹ค.

$ docker ps -a

 

 

๊ทธ์™ธ ๋ช…๋ น์–ด

$ docker ps
$ docker ps -a
$ docker exec -it [์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„ ๋˜๋Š” id] /bin/bash // ์ปจํ…Œ์ด๋„ˆ๋ฅผ sh, bash ๋“ฑ์˜ ํ„ฐ๋ฏธ๋„ ํ™˜๊ฒฝ์œผ๋กœ ์ ‘๊ทผ
$ docker stop [์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„ ๋˜๋Š” id]
$ docker inspect [์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„ ๋˜๋Š” id]