๋น์ ๊ณต์๋ ์ดํดํ ์ ์๋ Docker ์ ๋ฌธ/์ค์ (2)
์ ๋ฒ ํฌ์คํ ์ ์ด์ด์ ๋์ปค์ ๋ํด ๋ง์ ์์๋ณด์
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์ ์ด๋ฏธ์ง์ ๋ค๋ฅธ ์ด๋ฏธ์ง์ผ ๊ฒฝ์ฐ ์ ๋ฐ์ดํธ
- compose.yml์์ ์ ์๋ ์ด๋ฏธ์ง๋ฅผ ๋ค์ด๋ฐ๊ฑฐ๋ ์
๋ฐ์ดํธ
$ 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
- 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๋ฅผ ํ์ฉํด ๋ฐฐํฌํด๋ณด๊ธฐ
์ถ์ฒ
๋น์ ๊ณต์๋ ์ดํดํ ์ ์๋ Docker ์ ๋ฌธ/์ค์ ๊ฐ์ | JSCODE ๋ฐ์ฌ์ฑ - ์ธํ๋ฐ
JSCODE ๋ฐ์ฌ์ฑ | ๋น์ ๊ณต์ ์ ์ฅ์์๋ ์ฝ๊ฒ ์ดํดํ ์ ์๊ณ , ์ค์ ์์ ๋ฐ๋ก ์ ์ฉ ๊ฐ๋ฅํ Docker ์ ๋ฌธ/์ค์ ๊ฐ์๋ฅผ ๋ง๋ค์ด๋ดค์ต๋๋ค!, ๐คฌ ์๋ผ์ด, ๋ชป ํด๋จน๊ฒ ๋ค!๋น์ ๊ณต์๋ก ๊ฐ๋ฐ์ ์์ํด ์ฌ๋ฌ ํ์ฌ์
www.inflearn.com