[Docker] Dockerfile ์ ๋ฌด์์ผ๊น? (2) - Dockering ์ค์ต (๋ฆฌ์กํธ์ nginx๋ฅผ ๋์ปค๋ผ์ด์ง ํ๊ธฐ)
ํด๋น ๊ธ์ 2๋ถ์์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
-
-
Dockerfile ์ ๋ฌด์์ผ๊น? (1)- ๋์ปค ํ์ผ์ด ๋ญ๊ณ ์ด๋ค ๋ช ๋ น์ด๊ฐ ์๋์ง ์์๋ณด์. ์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋์ปค ํ์ผ์ด ๋ฌด์์ด๊ณ ์ ์ฌ์ฉํ๋ฉฐ ์ด๋ค ๋ช ๋ น์ด๊ฐ ์๋์ง ์์๋ณด๋ ์๊ฐ์ด๊ณ
-
Dockerfile ์ ๋ฌด์์ผ๊น? (2)- Dockering ์ค์ต (๋ฆฌ์กํธ์ nginx๋ฅผ ๋์ปค๋ผ์ด์ง ํ๊ธฐ)์ 1๋ถ์์์ ๋ฐฐ์ด ๋ด์ฉ์ ๋ฐํ์ผ๋ก ์ค์ ์๋น์ค๋ฅผ ๋์ปค๋ผ์ด์ง ํด๋ณด๋ ์๊ฐ์ ๋๋ค.
-
์๋ก ์์กดํ๊ณ ์๋ ๊ฐ๋ ์ด ์์ผ๋ฏ๋ก ํ ๋ฒ ๊ฐ๋ณ๊ฒ ์ฝ์ด๋ณด์๋ ๊ฒ๋ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค :)
์ง๋ ์๊ฐ์ ์ฐ๋ฆฌ๋ ๋์ปค ํ์ผ์ ๋ํด์ ์์๋ณด์๊ณ , ์ด๋ค ๋ช ๋ น์ด๋ค์ด ์๋์ง ํ์ธํ๋ค.
์ ์ ๋น ๋ฅด๊ฒ ์ง๋ ์๊ฐ์ ๋ด์ฉ์ ๋ณต์ตํด๋ณด์.
Recap
Dockerfile
๋์ปคํ์ผ์ด๋? ํ๋์ ์์ฑ๋ ์ด๋ฏธ์ง๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ํด ์์ด์ผํ ํจํค์ง, ์์ค์ฝ๋, ์คํฌ๋ฆฝํธ๋ค์ ํ๋์ FILE๋ก ๊ธฐ๋กํ์ฌ ๋์ปค๊ฐ ์ฝ๊ณ ์ด๋ฅผ ์คํํด ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค ๋ช ๋ นํ์ผ.
์ด๋ผ๊ณ ํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ด ๊ณผ์ ์ BUILD ๊ณผ์ ์ด๋ผ๊ณ ํ๊ณ ์ด๋ฅผ ์ํํ ์ ์๊ฒ ํ๋ ๋ช ๋ น์ด๊ฐ ๋ฐ๋ก ๋น๋ ๋ช ๋ น์ด์ด๋ค.
์ฐ๋ฆฌ๋ ์ด ๋น๋ ๋ช ๋ น์ด๋ฅผ ํตํด์ ๋์ปค ํ์ผ์ ๊ตฌ์ฑํ๊ฒ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค์๊ณผ ๊ฐ์ ๋น๋ ๋ช
๋ น์ด๋ฅผ ๋ฐฐ์ ๋ค.
- FROM
- MAINTAINER
- RUN
- ADD
- WORKDIR
- EXPOSE
- CMD
๊ทธ๋ฆฌ๊ณ ์ด ๋ช ๋ น์ด๋ค์ ์งง๊ฒ ์ค๋ช ํด๋ณด์๋ฉด
FROM
Base Image๋ฅผ ์ง์ ํจ
MAINTAINER
์์ฑ์ ํน์ ๊ฐ๋ฐ์๋ฅผ ๋ฃ๋ ๋ถ๋ถ, ์๋ตํด๋ ๋ฌด๋ฐฉ
RUN
์ด๋ฏธ์ง ๋ด๋ถ์์ ์คํํ ๋ช ๋ น์ด
ADD
Host PC ์์ File์ด๋ Directory์ Docker Image๋ก Copyํ ๋ ์ฌ์ฉ
WORKDIR
์์ ๋๋ ํ ๋ฆฌ ์ง์ ํ ๋ ์ฌ์ฉ
EXPOSE
ํฌํธ ๊ฐ๋ฐฉ, ํฌํธ ํฌ์๋ฉ
CMD
๋์ปค ์ปจ์ํฐ๋๊ฐ ์์๋ ๋ ์คํํ ์ปค๋งจ๋
Dockerizing
๋์ปค๋ผ์ด์ง์ ์ค๋ ์ค์ต์ ํต์ฌ์ด๋ค.
์ง๋ ์๊ฐ์ ๋์ปค๋ผ์ด์ง์ ๋ํด์ ๋์ปคํ ์ํค๋ ๊ฒ์ด๋ผ๊ณ ํ๋๋ฐ, ์ค๋์ ์ค์ต์ ํตํด ๋ ์์ธํ ์์๋ณด์.
๋์ปค๋ผ์ด์ง
๋์ปค๋ผ์ด์ง์ ์ฐ๋ฆฌ๊ฐ ๋ง๋ค Application์ ๋์ปค ์ด๋ฏธ์งํํ๋ ๊ฒ์ด๋ค.
์ฐ๋ฆฌ๋ ์ฐ๋ฆฌ๊ฐ ๋ง๋ Application์ ์์ค์ฝ๋, ์คํฌ๋ฆฝํธ, ํจํค์ง๋ค์ ์ค๋นํ๊ณ ๋์ปค ๋น๋ ๋ช ๋ น์ด๋ฅผ ํตํด์ ์ด๋ฏธ์ง๋ก ๋น๋ํ๋ ๊ณผ์ ์ ๊ฑฐ์น ๊ฒ์ด๋ค.
์ด ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ์ ํ๊ฒฝ์ ํตํด ๊ตฌ์ฑํ ๊ฒ์ด๋ค.
- Application : Create-React-App ์ ํ๋ฆฌ์ผ์ด์
- Package : npm module
- Web Server : Nginx
์ค์ต์ ๋ํด
์ฐ์ ์ค์ต์ ์ ๋ฐ์ ์ผ๋ก ์ค๋ช ํ์๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์กฐ๋ก ์ด๋ฃจ์ด์ง๋ค.
์ค๋น๋ฌผ
- Creact-React-App ์ผ๋ก ๋ง๋ค์ด์ง ๋ฆฌ์กํธ ์ฑ
- Dockerfile
- nginx.conf
Creact-React-App ์ผ๋ก ๋ง๋ค์ด์ง ๋ฆฌ์กํธ
์ผ๋จ Create-React-App์ผ๋ก ๋ฆฌ์กํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค๋นํ๋ค.
๋ง์ฝ CRA๋ฅผ ์ฌ์ฉํด์ ๊ตฌ์ถํ ์ ์๋ค๋ฉด Create-React-App์ผ๋ก ๋ฆฌ์กํธ ๊ฐ๋ฐ ํ๊ฒฝ์ ๊ตฌ์ถํด๋ณด์.๊ธ์ ํ์ธํ๋ ๊ฒ๋ ์ถ์ฒํ๋ค.
Dockerfile
์ด๋ฒ ์ค์ต์ ๊ฝ์ธ ๋์ปคํ์ผ์ด๋ค.
ํด๋น ํ์ผ์์ ๋์ปค ์์ง์๊ฒ ๋น๋ ๋ช
๋ น์ด๋ฅผ ํด์์ํค๊ณ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ํ๊ฒฝ์ผ๋ก ์ธํ
ํด๋ฌ๋ผ๊ณ ๋ช
๋ นํ๋ ํต์ฌ์ ์ธ ๋ถ๋ถ์ด๋ค.
nginx.conf
Dockerfile์์ Base Image๋ฅผ Nginx๋ก ์ง์ ํ๋๋ฐ, Default์ Nginx ์ค์ ํ์ผ์์ ์ฐ๋ฆฌ๊ฐ ๋ฏธ๋ฆฌ ๋ง๋ค์ด ๋์ nginx.conf ํ์ผ๋ก ๋ฐ๊ฟ์น๊ธฐ ํ ํ๊ฒ ํ์ผ์ ๋ฏธ๋ฆฌ ํธ์คํธ์์ ๊ตฌ์ถํด๋๋๋ค.
๊ณผ์
์ฐ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ผ๋ก ์งํํ ๊ฒ์ด๋ค.
- CRA์ฑ์ ๋ฃจํธ ํด๋์์ ๋น๋๋ฅผ ์คํํ๋ค.
- nginx.conf ํ์ผ์ ์ ์ํ๋ค.
- Dockerfile ์ ๋น๋ ๋ช ๋ น์ด๋ฅผ ์ถ๊ฐํ๋ค.
- docker image๋ฅผ ๋น๋ํ๋ค.
- docker image๋ฅผ ์คํํ๋ค.
CRA ์ ๋น๋
์ฐ์ ์๋ฌด CRA๋ฅผ ์ค๋นํ๋ค.
ํ์๋ ๋ง์นจ ์ด๋ฏธ์ง๋ก ๋ง๋ค ์๋น์ค๊ฐ ์๊ธฐ ๋๋ฌธ์ ํด๋น ๋ ํฌ์งํ ๋ฆฌ์์ ์งํํ๋๋ก ํ๊ฒ ๋ค.
ํด๋น CRA ๋๋ ํ ๋ฆฌ์ src์ ๊ฐ์ level์์ ๋ค์๊ณผ ๊ฐ์ ํ์ผ์ ์์ฑํด์ค๋ค.
Dockerfile
nginx.conf
๊ทธ๋ฆฌ๊ณ npm์ ์ด์ฉํด์ ๋น๋๋ฅผ ํ๋ค.
$ npm run build
๊ทธ๋ผ build
๋ผ๋ ๋๋ ํ ๋ฆฌ๊ฐ ์์ฑ๋๋๋ฐ, ํด๋น ๋๋ ํ ๋ฆฌ์ ์์ค ์ฝ๋๋ฅผ ์ฐ๋ฆฌ๊ฐ ๋ง๋ค Nginx ๋์ปค์ ๋ณต์ฌํ ์์ ์ด๋ค.
nginx.conf ํ์ผ ์ ์
์์์ ์์ฑํ nginx.conf ํ์ผ์์ nginx์ ๊ธฐ๋ณธ ๋ผ์ฐํ ์ ์ค์ ํด์ฃผ์.
์ฌ๊ธฐ์ ์ค์ ํ ๋ด์ฉ์ ์์
๋ฃจํธ ๋๋ ํ ๋ฆฌ์ index html ํ์ผ์ด๋ค.
server {
listen 80;
location / {
root /app/build;
index index.html;
try_files $uri $uri/ /index.html;
}
}
Dockerfile ์ ์
์ด์ ๋์ปค ํ์ผ์ ์ ์ํ ์ฐจ๋ก์ด๋ค.
FROM nginx
# root ์ app ํด๋๋ฅผ ์์ฑ
RUN mkdir /app
# work dir ๊ณ ์
WORKDIR /app
# work dir ์ build ํด๋ ์์ฑ /app/build
RUN mkdir ./build
# host pc์ ํ์ฌ๊ฒฝ๋ก์ build ํด๋๋ฅผ workdir ์ build ํด๋๋ก ๋ณต์ฌ
ADD ./build ./build
# host pc ์ nginx.conf ๋ฅผ ์๋ ๊ฒฝ๋ก์ ๋ณต์ฌ
COPY ./nginx.conf /etc/nginx/conf.d
# 80 ํฌํธ ์คํ
EXPOSE 80
# container ์คํ ์ ์๋์ผ๋ก ์คํํ command. nginx ์์ํจ
CMD ["nginx", "-g", "daemon off;"]
์ฐจ๋ก๋๋ก ์ค๋ช ํด๋ณด์๋ฉด.
- FROM
- ๊ธฐ๋ฐ ์ด๋ฏธ์ง๋ก Nginx ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํด๋ผ.
- RUN mkdir /app
- ์ปจํ ์ด๋๋ฅผ ์คํํ๋ฉด app์ด๋ผ๋ ๋๋ ํ ๋ฆฌ๋ฅผ ๋ง๋ค์ด๋ผ.
- WORKDIR /app
- cd /app
- RUN mkdir ./build
- ํ์ฌ ๋๋ ํ ๋ฆฌ (/app) ์์ build ๋๋ ํ ๋ฆฌ๋ฅผ ์์ฑํ๊ธฐ ์ํด mkdir ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํด๋ผ
- ADD ./build ./build
- ํธ์คํธ PC์ ์๋ /build ํด๋๋ฅผ ์ปจํ ์ด๋ ๋ด๋ถ์ /build ํด๋๋ก ๋ณต์ฌํด๋ผ
- COPY ./nginx.conf /etc/nginx/conf.d
- ํธ์คํธ์ ์๋ nginx.conf ํ์ผ์ ์ปจํ ์ด๋ ๋ด๋ถ์ /etc/nginx/conf.d ๊ฒฝ๋ก๋ก ๋ณต์ฌํด๋ผ.
- EXPOSE 80
- ์ปจํ ์ด๋์ 80 ํฌํธ๋ฅผ ์ด์ด๋ผ
- CMD
["nginx", "-g", "daemon off;"]
- ์ปจํ ์ด๋ ์คํ ์ ์๋์ผ๋ก ์คํํ nginx์ ์ปค๋งจ๋.
์ ๊ณผ์ ์ผ๋ก ๋์ํ๊ฒ ๋๋ค.
docker Image ๋น๋
๊ทธ๋ผ ์ด์ ์ค๋น๊ฐ ๋ค ๋์์ผ๋ build ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ์
.
docker build -t my-react-app
docker image ์คํ
๊ทธ๋ฆฌ๊ณ ๋์ปค๋ฅผ ์คํํด์ฃผ๋ฉด ๋!
docker run -d -p 8300:80 my-react-app
๊ทธ๋ผ ํด์๊ฐ ์ถ๋ ฅ๋๊ณ , ๋์ปค ํ๋ก์ธ์ค ๋ช ๋ น์ด๋ก ํ์ธํด๋ณด๋ฉด,
์ ์์ ์ผ๋ก ์ ๋์ํ๋ ๊ฒ์ ์ ์ ์๋ค.
(ํ์๋ ๋์ปคํ๋ธ๋ก EC2 ์ธ์คํด์ค์ ๋ฐฐํฌํ๊ธฐ ๋๋ฌธ์ ์ด๋ฏธ์ง ์ด๋ฆ์ด ๋ค๋ฅด๋ค.)
์ค๋์ ์ด๋ ๊ฒ Dockerfile์ ์ค์ ๋ก ์์ฑํด๋ณด๊ณ ์ด๋ค์์ผ๋ก ์ฌ์ฉํ๋์ง ์์๋ณด์๋ค.
๋ค์ ์๊ฐ์๋ ๋์ปค์ ๋น๋๋ ์ด๋ป๊ฒ ๋์ํ๋์ง ์์๋ณด์.