๐Ÿณ์ธํ”„๋ผ/Docker

๋น„์ „๊ณต์ž๋„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” Docker ์ž…๋ฌธ/์‹ค์ „(2)

๊ณ„๋ž€์†Œ๋…„ 2024. 9. 21. 22:34

์ €๋ฒˆ ํฌ์ŠคํŒ…์— ์ด์–ด์„œ ๋„์ปค์— ๋Œ€ํ•ด ๋งˆ์ € ์•Œ์•„๋ณด์ž

https://koreatstm.tistory.com/195

 

๋น„์ „๊ณต์ž๋„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” Docker ์ž…๋ฌธ/์‹ค์ „(1)

1. Docker ๊ธฐ๋ณธ ๊ฐœ๋… 1. Docker๋ฅผ ์™œ ๋ฐฐ์šฐ๋Š” ๊ฑธ๊นŒ?์ด์‹์„ฑ ๋•Œ๋ฌธ์ด๋‹ค. ์ด์‹์„ฑ: ํ”„๋กœ๊ทธ๋žจ์„ ๋‹ค๋ฅธ๊ณณ์œผ๋กœ ์‰ฝ๊ฒŒ ์˜ฎ๊ฒจ์„œ ์„ค์น˜ํ•˜๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์„ฑ์งˆex) ๊ฐ™์€ ํ”„๋กœ๊ทธ๋žจ์ด๋ผ๋„ ๋‚ด ์ปดํ“จํ„ฐ์™€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์ปด

koreatstm.tistory.com

4. Dockerfile ํ™œ์šฉํ•ด ์ด๋ฏธ์ง€ ์ง์ ‘ ๋งŒ๋“ค๊ธฐ

 

1. Dockerfile์ด๋ž€

  • ์ €๋ฒˆ ํฌ์ŠคํŒ…์—์„œ ๋„์ปค ์ด๋ฏธ์ง€๋Š” ๋„์ปคํ—ˆ๋ธŒ๋ฅผ ํ†ตํ•ด ๋‹ค์šด๋ฐ›์Œ์„ ๋ณด์•˜๋‹ค.
  • ๊ทธ๋Ÿผ ์ด ๋„์ปค ์ด๋ฏธ์ง€๋Š” ๋ˆ„๊ฐ€ ๋„์ปค ํ—ˆ๋ธŒ์— ์˜ฌ๋ ค๋†“์€๊ฑธ๊นŒ? ๊ทธ๋ฆฌ๊ณ  ๋„์ปค ์ด๋ฏธ์ง€๋Š” ์–ด๋–ป๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฑธ๊นŒ?
  • Dockerfile: ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค๊ฒŒ ํ•ด์ฃผ๋Š” ํŒŒ์ผ
  • ๋„์ปคํŒŒ์ผ์„ ์ด์šฉํ•˜๋ฉด ๋‚˜๋งŒ์˜ ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

 

2. FROM: ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€ ์ƒ์„ฑ

  • FROM: ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์—ญํ• 
    • Docker ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํŠน์ •ํ•œ ์ดˆ๊ธฐ ์ด๋ฏธ์ง€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์„ธํŒ…ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ์˜ 'ํŠน์ •ํ•œ ์ดˆ๊ธฐ ์ด๋ฏธ์ง€' = ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€
# ํƒœ๊ทธ๋ช… ์—†์„ ๊ฒฝ์šฐ latest version
FROM [์ด๋ฏธ์ง€๋ช…]
FROM [์ด๋ฏธ์ง€๋ช…]:[ํƒœ๊ทธ๋ช…]

 

3. JDK 17 ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€๋กœ ์ปจํ…Œ์ด๋„ˆ ๋„์šฐ๊ธฐ

  • Dockerfile ๋งŒ๋“ค๊ธฐ

https://hub.docker.com/_/openjdk

 

openjdk - Official Image | Docker Hub

Docker Official Images are a curated set of Docker open source and drop-in solution repositories. Why Official Images? These images have clear documentation, promote best practices, and are designed for the most common use cases.

hub.docker.com

# JDK 17
FROM openjdk:17-jdk
  • Dockerfile ๊ธฐ๋ฐ˜์œผ๋กœ ์ด๋ฏธ์ง€ ์ƒ์„ฑ
$ docker build -t my-jdk17-server .
  • ์ด๋ฏธ์ง€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ ๋„์šฐ๊ธฐ
$ docker run -d my-jdk17-server
  • ์ปจํ…Œ์ด๋„ˆ ์กฐํšŒ
$ docker ps # ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์—†๋‹ค.
$ docker ps -a # ํ™•์ธํ•ด๋ณด๋‹ˆ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ข…๋ฃŒ๋˜์–ด ์žˆ๋‹ค.
  • ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์— jdk ์„ค์น˜ ํ™•์ธ
FROM openjdk:17-jdk

ENTRYPOINT ["/bin/bash", "-c", "sleep 500"]


$ docker build -t my-jdk17-server . # ์ด๋ฏธ์ง€ ๋นŒ๋“œ
$ docker run -d my-jdk17-server # ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰
$ docker ps # ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ ์กฐํšŒ
$ docker exec -it [์ปจํ…Œ์ด๋„ˆ ID] bash # ์ปจํ…Œ์ด๋„ˆ ์ ‘์†

$ java -version # JDK ์„ค์น˜๋˜์–ด ์žˆ๋Š” ์ง€ ํ™•์ธ

 

์ฐธ๊ณ : ์ข…๋ฃŒ๋œ ์ปจํ…Œ์ด๋„ˆ์— ์ ‘์†ํ•˜์—ฌ ๋””๋ฒ„๊น…ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด

  • docker logs : ์ปจํ…Œ์ด๋„ˆ ๋กœ๊ทธ ํ™•์ธ
  • docker exec -it : ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์— ์ง์ ‘ ์ ‘์†

์ด๋•Œ ๋‘๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€ ์ข…๋ฃŒ๋œ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์— ์ ‘์†ํ•  ์ˆ˜ ์—†๋‹ค. 

์ด๋ฏธ์ง€๋ฅผ ํ† ๋Œ€๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“ค ๋•Œ, ์ปจํ…Œ์ด๋„ˆ์˜ ๋ช…๋ น์–ด ์ฒ˜๋ฆฌ๊ฐ€ ๋๋‚˜๋ฉด ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋ฐ”๋กœ ์ข…๋ฃŒ๋˜๊ณ , ์ด๋Ÿฌ๋ฉด ํ™•์ธ์ด ์•ˆ๋œ๋‹ค. 

๋ฐฉ๋ฒ•: Dockerfile์—์„œ ์•„๋ž˜์™€ ๊ฐ™์€ ๋ช…๋ น์–ด๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋ฐ”๋กœ ์ข…๋ฃŒ๋˜๋Š” ๊ฒƒ์„ ๋ง‰๊ณ . ๊ทธ ๋‹ค์Œ docker exec -it๋ฅผ ํ™œ์šฉํ•ด์„œ ๋””๋ฒ„๊น…์„ ํ•œ๋‹ค.

FROM openjdk:17-jdk

...

ENTRYPOINT ["/bin/bash", "-c", "sleep 500"] # 500์ดˆ ๋™์•ˆ ์‹œ์Šคํ…œ์„ ์ผ์‹œ์ •์ง€ ์‹œํ‚ค๋Š” ๋ช…๋ น์–ด

 

4. COPY: ํŒŒ์ผ ๋ณต์‚ฌ(์ด๋™)

  • ๊ฐœ๋…: ํ˜ธ์ŠคํŠธ ์ปดํ“จํ„ฐ์— ์žˆ๋Š” ํŒŒ์ผ์„ ๋ณต์‚ฌํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ๋กœ ์ „๋‹ฌ
# ๋ฌธ๋ฒ•
COPY [ํ˜ธ์ŠคํŠธ ์ปดํ“จํ„ฐ์— ์žˆ๋Š” ๋ณต์‚ฌํ•  ํŒŒ์ผ์˜ ๊ฒฝ๋กœ] [์ปจํ…Œ์ด๋„ˆ์—์„œ ํŒŒ์ผ์ด ์œ„์น˜ํ•  ๊ฒฝ๋กœ]

# ์˜ˆ์‹œ
COPY app.txt /app.txt
  • ํŒŒ์ผ ๋ณต์‚ฌ
    • app.txt๋ผ๋Š” ํŒŒ์ผ์„ ๋งŒ๋“ ๋‹ค.
    • Dockerfile ๋งŒ๋“ค์–ด์„œ ์ด๋ฏธ์ง€ ์ƒ์„ฑํ•˜๊ณ  ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰
#Dockerfile
FROM ubuntu

COPY app.txt /app.txt

ENTRYPOINT ["/bin/bash", "-c", "sleep 500"] # ๋””๋ฒ„๊น…์šฉ ์ฝ”๋“œ

######################################################

$ docker build -t my-server .
$ docker run -d my-server
$ docker exec -it [Container ID] bash
$ ls
  • ํด๋” ์•ˆ์— ์žˆ๋Š” ๋ชจ๋“  ํŒŒ์ผ์„ ๋ณต์‚ฌํ•œ๋‹ค.
    • my-app ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ณ , ์ด ์•ˆ์— ํŒŒ์ผ์„ ๋งŒ๋“ ๋‹ค.
    • Dockerfile ๋งŒ๋“ค์–ด์„œ ์ด๋ฏธ์ง€ ์ƒ์„ฑํ•˜๊ณ  ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰
#Dockerfile
FROM ubuntu

COPY my-app /my-app/

ENTRYPOINT ["/bin/bash", "-c", "sleep 500"] # ๋””๋ฒ„๊น…์šฉ ์ฝ”๋“œ

######################################################

$ docker build -t my-server .
$ docker run -d my-server
$ docker exec -it [Container ID] bash
$ ls
  • ์™€์ผ๋“œ ์นด๋“œ
    • app.txt, readme.txt ํŒŒ์ผ์„ ๋งŒ๋“ ๋‹ค
    • Dockerfile ๋งŒ๋“ค์–ด์„œ ์ด๋ฏธ์ง€ ์ƒ์„ฑํ•˜๊ณ  ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰
#Dockerfile
FROM ubuntu

COPY *.txt /text-files/ # /text-files/ ๋ผ๊ณ  ์ ์–ด์•ผ ์ด ๋””๋ ‰ํ† ๋ฆฌ ์•ˆ ํŒŒ์ผ๋“ค์ด ๋ณต์‚ฌ๋œ๋‹ค.

ENTRYPOINT ["/bin/bash", "-c", "sleep 500"] # ๋””๋ฒ„๊น…์šฉ ์ฝ”๋“œ

######################################################

$ docker build -t my-server .
$ docker run -d my-server
$ docker exec -it [Container ID] bash
$ ls

 

  • .dockerignore: ํŠน์ • ํŒŒ์ผ์ด๋‚˜ ํด๋”๋ฅผ COPY ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์„ ๋•Œ, ์‚ฌ์šฉํ•œ๋‹ค.
    • .dockerignore ํŒŒ์ผ์„ ๋งŒ๋“ ๋‹ค
    • Dockerfile ๋งŒ๋“ค๊ณ  ์ด๋ฏธ์ง€ ์ƒ์„ฑํ•˜๊ณ  ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰
# Dockerfile
FROM ubuntu

COPY ./ /

ENTRYPOINT ["/bin/bash", "-c", "sleep 500"] # ๋””๋ฒ„๊น…์šฉ ์ฝ”๋“œ

######################################################

$ docker build -t my-server .
$ docker run -d my-server
$ docker exec -it [Container ID] bash
$ ls

 

5. ENTRYPOINT: ์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘ ์‹œ ์‹คํ–‰๋˜๋Š” ๋ช…๋ ์–ด

  • ๊ฐœ๋…: ENTRYPOINT๋Š” ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ๋˜๊ณ  ์ตœ์ดˆ ์‹คํ–‰ ์‹œ ์ˆ˜ํ–‰๋˜๋Š” ๋ช…๋ น์–ด
# Dockerfile
FROM ubuntu

ENTRYPOINT ["/bin/bash", "-c", "echo hello"]

######################################################

$ docker build -t my-server .
$ docker run -d my-server
$ docker ps -a
$ docker logs [Container ID]

 

6. Spring Boot๋ฅผ Docker๋กœ ์‹คํ–‰ 

  • ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ ์ž‘์„ฑ
  • Dockerfile ์ž‘์„ฑ
FROM openjdk:17-jdk

COPY build/libs/*SNAPSHOT.jar app.jar

ENTRYPOINT ["java", "-jar", "/app.jar"]
  • Spring Bootํ”„๋กœ์ ํŠธ ๋นŒ๋“œ
$ ./gradlew clean build
  • Dockerfile ๋ฐ”ํƒ•์œผ๋กœ ์ด๋ฏธ์ง€ ๋นŒ๋“œ
$ docker build -t hello-server .
  • ์ด๋ฏธ์ง€ ํ™•์ธ
$ docker image ls
  • ์ƒ์„ฑํ•œ ์ด๋ฏธ์ง€๋กœ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰
$ docker run -d -p 8080:8080 hello-server
  • ์ปจํ…Œ์ด๋„ˆ ํ™•์ธ
$ docker ps
  • ์ปจํ…Œ์ด๋„ˆ ์ค‘์ง€ํ•˜๊ณ  ์‚ญ์ œ, ์ด๋ฏธ์ง€ ์‚ญ์ œ
$ docker stop {์ปจํ…Œ์ด๋„ˆ ID}
$ docker rm {์ปจํ…Œ์ด๋„ˆ ID}
$ docker image rm {์ด๋ฏธ์ง€ ID}

 

5. Docker Compose๋ฅผ ํ™œ์šฉํ•ด ์ปจํ…Œ์ด๋„ˆ ๊ด€๋ฆฌํ•˜๊ธฐ

 

1. Docker Compose๋ž€?

  • ๊ฐœ๋…: ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋“ค์„ ํ•˜๋‚˜์˜ ์„œ๋น„์Šค๋กœ ์ •์˜ํ•˜๊ณ  ๋ฌถ์Œ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ํˆด
  • ์‚ฌ์šฉ ์ด์œ 
    • ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š”๋ฐ ์šฉ์ดํ•˜๋‹ค. ํ•˜๋‚˜์˜ ํ™˜๊ฒฝ์—์„œ ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰, ๊ด€๋ฆฌ ๊ฐ€๋Šฅ
    • ๋ณต์žกํ•œ ๋ช…๋ น์–ด๋กœ ์‹คํ–‰์‹œํ‚ค์ง€ ์•Š์•„๋„ ๋œ๋‹ค. docker compose up ๋ช…๋ น์–ด๋งŒ ์‹คํ–‰ํ•˜๋ฉด ๋œ๋‹ค.

 

2. Nginx์„ค์น˜๋ฅผ Docker Compose๋กœ ํ•ด๋ณด์ž

  • Docker CLI๋กœ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰
$ docker run --name webserver -d -p 80:80 nginx
  • Docker Compose๋กœ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰
services:
    my-web-server:
        container_name: webserver
        image: nginx
        ports: 
          - 80:80
  • services: my-web-server - ๋„์ปค ์ปดํฌ์ฆˆ์—์„œ ํ•˜๋‚˜์˜ ์ปจํ…Œ์ด๋„ˆ = ์„œ๋น„์Šค, ์„œ๋น„์Šค์— ์ด๋ฆ„์„ my-web-server
  • container_name: web-server - ์ปจํ…Œ์ด๋„ˆ ๋„์šธ ๋•Œ ๋ณ„๋ช…. CLI์˜  --name web-server์™€ ๋™์ผ
  • image: nginx - ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰์‹œ ์‚ฌ์šฉํ•  ์ด๋ฏธ์ง€ ๊ฒฐ์ • $ docker run [์ด๋ฏธ์ง€๋ช…]๊ณผ ๋™์ผ
  • ports - ํฌํŠธ ๋งคํ•‘์„ ์–ด๋–ป๊ฒŒ ํ• ์ง€ ๊ฒฐ์ •
# compose ์‹คํ–‰
$ docker compose up -d

# compose ์ƒํƒœ ํ™•์ธ
$ docker compose ps
$ docker ps

# ์ปดํฌ์ฆˆ๋กœ ์‹คํ–‰๋œ ์ปจํ…Œ์ด๋„ˆ ์‚ญ์ œ
$ docker compose down

 

3. ์ž์ฃผ์‚ฌ์šฉํ•˜๋Š” ๋ช…๋ น์–ด

  • compose ํŒŒ์ผ ์ž‘์„ฑ
services:
    websever:
        container_name: webserver
        image: nginx
        ports: 
          - 80:80
  • compose.yml์—์„œ ์ •์˜ํ•œ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰
$ docker compose up    # ํฌ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰
$ docker compose up -d # ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰
  • ์ปดํฌ์ฆˆ๋กœ ์‹คํ–‰ํ•œ ์ปจํ…Œ์ด๋„ˆ ํ™•์ธ
# compose.yml์— ์ •์˜๋œ ์ปจํ…Œ์ด๋„ˆ ์ค‘ ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ๋งŒ ๋ณด์—ฌ์ค€๋‹ค. 
$ docker compose ps 

# compose.yml์— ์ •์˜๋œ ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.
$ docker compose ps -a
  • ์ปดํฌ์ฆˆ ๋กœ๊ทธ ํ™•์ธ
# compose.yml์— ์ •์˜๋œ ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ์˜ ๋กœ๊ทธ๋ฅผ ๋ชจ์•„์„œ ์ถœ๋ ฅํ•œ๋‹ค.
$ docker compose logs
  • ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ์ „ ์ด๋ฏธ์ง€ ์žฌ๋นŒ๋“œ
    • compose.yml์—์„œ ์ •์˜ํ•œ ์ด๋ฏธ์ง€ ํŒŒ์ผ์—์„œ ์ฝ”๋“œ ๋ณ€๊ฒฝ์‹œ, ๋‹ค์‹œ ๋นŒ๋“œํ•˜์—ฌ ์‹คํ–‰ํ•ด์•ผ ์ฝ”๋“œ ๋ณ€๊ฒฝ ๋ถ€๋ถ„ ์ ์šฉ
    • ์ด๋•Œ, --build ์˜ต์…˜ ์ถ”๊ฐ€
    • docker compose up: ์ด๋ฏธ์ง€ ์—†์„ ๋•Œ๋งŒ ๋นŒ๋“œํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰, ์žˆ์œผ๋ฉด ๋นŒ๋“œ ์•ˆํ•˜๊ณ  ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰
    • docker compose up --build: ์ด๋ฏธ์ง€ ์œ ๋ฌด์™€ ์ƒ๊ด€์—†์ด ๋ฌด์กฐ๊ฑด ๋นŒ๋“œ ๋‹ค์‹œํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰
$ docker compose up --build # ํฌ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰
$ docker compose up --build -d # ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰
  • ์ด๋ฏธ์ง€ ๋‹ค์šด ๋ฐ›๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธ
    • compose.yml์—์„œ ์ •์˜๋œ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์šด๋ฐ›๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธ
      • ๋กœ์ปฌ ํ™˜๊ฒฝ์— ์ด๋ฏธ์ง€๊ฐ€ ์—†์œผ๋ฉด ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์šด ๋ฐ›๊ณ , ์žˆ์„ ๋•Œ๋Š” Dockerhub์˜ ์ด๋ฏธ์ง€์™€ ๋‹ค๋ฅธ ์ด๋ฏธ์ง€์ผ ๊ฒฝ์šฐ ์—…๋ฐ์ดํŠธ
$ docker compose pull
  • ์ปดํฌ์ฆˆ ์ด์šฉํ•œ ์ปจํ…Œ์ด๋„ˆ ์ข…๋ฃŒ
$ docker compose down

 

4. Docker Compose๋กœ MySQL ์‹คํ–‰

  • Docker CLI๋กœ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ์‹œ
$ docker run -e MYSQL_ROOT_PASSWORD=pwd1234 -p 3306:3306 -v /Users/jaeseong/Documents/Develop/docker-mysql/mysql_data:/var/lib/mysql -d mysql
  • compose ํŒŒ์ผ ์ž‘์„ฑ
    • environment: ~ - CLI์˜ -e MYSQL_ROOT_PASSWORD=pwd1234 ์™€ ๋™์ผ
    • volumes: ~ - CLI์˜ -v {ํ˜ธ์ŠคํŠธ ๊ฒฝ๋กœ}:/var/lib/mysql์™€ ๋™์ผ
services:
  my-db:
    image: mysql
    environment:
      MYSQL_ROOT_PASSWORD: pwd1234
    volumes:
      - ./mysql_data:/var/lib/mysql
    ports:
      - 3306:3306
# compose ์‹คํ–‰
$ docker compose up -d

# compose ์ƒํƒœ ํ™•์ธ
$ docker compose ps
$ docker ps

# ์ปดํฌ์ฆˆ๋กœ ์‹คํ–‰๋œ ์ปจํ…Œ์ด๋„ˆ ์‚ญ์ œ
$ docker compose down

 

์ถ”๊ฐ€

Docker CLI -> Docker Compose ์„œ๋กœ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๋‹ค. ์•„๋ž˜๋Š” ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ์‚ฌ์ดํŠธ

  • Composerize

https://www.composerize.com/

  • Decomposerize

https://www.decomposerize.com/

 

 

6. Docker Compose๋ฅผ ํ™œ์šฉํ•ด 2๊ฐœ ์ด์ƒ์˜ ์ปจํ…Œ์ด๋„ˆ ๊ด€๋ฆฌํ•˜๊ธฐ

 

Spring Boot, MySQL ์ปจํ…Œ์ด๋„ˆ ๋™์‹œ์— ๋„์šฐ๊ธฐ

 

 

 

 

 

7. AWS EC2์— ์„œ๋ฒ„ ๋ฐฐํฌํ•ด๋ณด๊ธฐ (๋ณด์ถฉ ๊ฐ•์˜)

 

๊ธฐ๋ณธ ๊ฐœ๋…

  • ๋ฐฐํฌ: ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋“ค์ด ์ธํ„ฐ๋„ท์„ ํ†ตํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ
  • EC2: ์ปดํ“จํ„ฐ๋ฅผ ๋นŒ๋ ค์„œ ์›๊ฒฉ์œผ๋กœ ์ ‘์†ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์„œ๋น„์Šค ์ฆ‰, ์›๊ฒฉ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํ•˜๋‚˜์˜ ์ปดํ“จํ„ฐ. ์ฃผ๋กœ ๋ฐฑ์•ค๋“œ ์„œ๋ฒ„ ๋ฐฐํฌ
  • ์ธ์Šคํ„ด์Šค: EC2์—์„œ ๋นŒ๋ฆฌ๋Š” ์ปดํ“จํ„ฐ 1๋Œ€
    • ์ธ์Šคํ„ด์Šค ์œ ํ˜•: ์ปดํ“จํ„ฐ ์‚ฌ์–‘
    • ํ‚คํŽ˜์–ด: EC2์— ์ ‘์†ํ•˜๊ธฐ ์œ„ํ•œ ํ‚ค
    • ๋ณด์•ˆ๊ทธ๋ฃน: ์ธ๋ฐ”์šด๋“œ ํŠธ๋ž˜ํ”ฝ(์™ธ๋ถ€ -> EC2๋กœ ๋ณด๋‚ด๋Š” ํŠธ๋ž˜ํ”ฝ) & ์•„์›ƒ๋ฐ”์šด๋“œ ํŠธ๋ž˜ํ”ฝ(EC2 -> ์™ธ๋ถ€๋กœ ๋ณด๋‚ด๋Š” ํŠธ๋ž˜ํ”ฝ) 
    • ์Šคํ† ๋ฆฌ์ง€: EC2์˜ ์ €์žฅ๊ณต๊ฐ„, ๋ณผ๋ฅจ
    • ํƒ„๋ ฅ์  IP: Ec2์˜ IP๋Š” ์ž„์‹œ IP๋กœ, ์ค‘์ง€ ํ›„ ์žฌ์‹คํ–‰ ์‹œ IP๊ฐ€ ๋ณ€๊ฒฝ๋จ. IP๋ฅผ ๊ณ ์ •์‹œํ‚ค๋ ค๋ฉด ํƒ„๋ ฅ์  IP๋ฅผ ์„ค์ •ํ•œ๋‹ค. EC2 ์ข…๋ฃŒ์‹œ ํƒ„๋ ฅ์  IP๋„ ๋ฆด๋ฆฌ์Šคํ•ด์•ผ ๋น„์šฉ์ด ๋‚˜๊ฐ€์ง€ ์•Š๋Š”๋‹ค.

 

Spring Boot๋ฅผ EC2์— ๋ฐฐํฌ

  • Ubuntu์— JDK ์„ค์น˜
$ sudo apt update && /
sudo apt install openjdk-17-jdk -y
  • ์„ค์น˜ ํ™•์ธ
$ java -version
  • Github์—์„œ Spring Boot ํ”„๋กœ์ ํŠธ ํด๋ก ํ•ด์˜ค๊ธฐ
$ git clone https://github.com/{๊นƒํ—ˆ๋ธŒ ์ฃผ์†Œ/ํ”„๋กœ์ ํŠธ ์ด๋ฆ„}.git
$ cd {ํ”„๋กœ์ ํŠธ ์ด๋ฆ„}
  • application.yml ํŒŒ์ผ ๋งŒ๋“ค๊ธฐ
    • application.yml ํŒŒ์ผ์€ ๋ฏผ๊ฐํ•œ ์ •๋ณด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๊ธฐ์— Git์œผ๋กœ ๋ฒ„์ „๊ด€๋ฆฌ ํ•˜๋ฉด ์•ˆ๋œ๋‹ค.
    • EC2์— ๋ณ„๋„๋กœ ์˜ฌ๋ ค์ค˜์•ผ ํ•˜๊ณ , ๋ณดํ†ต ์ง์ ‘ ๋งŒ๋“ ๋‹ค.
server:
  port: 80
  • ์„œ๋ฒ„ ์‹คํ–‰
$ ./gradlew clean build # ๊ธฐ์กด ๋นŒ๋“œ๋œ ํŒŒ์ผ์„ ์‚ญ์ œํ•˜๊ณ  ์ƒˆ๋กญ๊ฒŒ JAR๋กœ ๋นŒ๋“œ
$ cd ~/{ํ”„๋กœ์ ํŠธ ์ด๋ฆ„}/build/libs
$ sudo java -jar {ํ”„๋กœ์ ํŠธ ์ด๋ฆ„}-0.0.1-SNAPSHOT.jar

# ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ Spring Boot ์‹คํ–‰
$ sudo nohup java -jar {ํ”„๋กœ์ ํŠธ ์ด๋ฆ„}-0.0.1-SNAPSHOT.jar &

 

 

 

 

8. AWS EC2์—์„œ Docker๋ฅผ ํ™œ์šฉํ•ด ๋ฐฐํฌํ•ด๋ณด๊ธฐ

 

์ถœ์ฒ˜

https://www.inflearn.com/course/%EB%B9%84%EC%A0%84%EA%B3%B5%EC%9E%90-docker-%EC%9E%85%EB%AC%B8-%EC%8B%A4%EC%A0%84/dashboard

 

๋น„์ „๊ณต์ž๋„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” Docker ์ž…๋ฌธ/์‹ค์ „ ๊ฐ•์˜ | JSCODE ๋ฐ•์žฌ์„ฑ - ์ธํ”„๋Ÿฐ

JSCODE ๋ฐ•์žฌ์„ฑ | ๋น„์ „๊ณต์ž ์ž…์žฅ์—์„œ๋„ ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๊ณ , ์‹ค์ „์—์„œ ๋ฐ”๋กœ ์ ์šฉ ๊ฐ€๋Šฅํ•œ Docker ์ž…๋ฌธ/์‹ค์ „ ๊ฐ•์˜๋ฅผ ๋งŒ๋“ค์–ด๋ดค์Šต๋‹ˆ๋‹ค!, ๐Ÿคฌ ์—๋ผ์ด, ๋ชป ํ•ด๋จน๊ฒ ๋„ค!๋น„์ „๊ณต์ž๋กœ ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•ด ์—ฌ๋Ÿฌ ํšŒ์‚ฌ์—

www.inflearn.com