๐ ๊ณต๋ถ ๊ณ๊ธฐ
์ถ๊ฐ์ ์ธ ๋์ปค ๊ณต๋ถ๋ฅผ ์ํด ์ ํ๋ธ ๋ฐ๋ฐฐ๋ ๋์ปค ์๋ฆฌ์ฆ๋ฅผ ๋ณด๋ฉด์ ์ ๋ฆฌํด ๋ด ๋๋ค.
๋ชฉ์ฐจ
๐4-1. ์ปจํ ์ด๋๋ฅผ ๋ง๋ค๊ธฐ : ์ด๋ก
1๏ธโฃ ๋ฌด์์ ์ปจํ ์ด๋๋ก ๋ง๋๋ ๊ฑด๊ฐ์?
์ปจํ ์ด๋๋ ๊ฐ๋ฐํ ์ ํ๋ฆฌ์ผ์ด์ (์คํ ํ์ผ) ๊ณผ ์ด์ํ๊ฒฝ์ด ๋ชจ๋ ๋ค์ด์๋ ๋ ๋ฆฝ๋ ๊ณต๊ฐ
1. ์ด์ํ๊ฒฝ
2. ์์ค์ฝ๋
3. ๋์ ๋ช ๋ น์ด
๋ฅผ ํ๋์ ์ปจํ ์ด๋์ ๋ฃ๊ฒ ๋๊ณ
์ด ํ๋ํ๋ ์ปจํ ์ด๋๋ฅผ ์ฐ๊ฒฐํ์ฌ MSA ํ๊ฒฝ์ Polyglot ์ ํ๋ฆฌ์ผ์ด์ ์ด์ํ๊ฒ ๋๋ค. ์๋น์ค๋ฅผ ๊ฐ๊ฐ์ ์ปจํ ์ด๋๋ก ๋๋์ด ์ฐ๊ฒฐํ๋ฉด ๊ณ ๊ฐ ๋์์ ์ฉ์ดํ๊ณ , ๋ ๋ง์ ์๋น์ค๋ฅผ ๊ฐ๋นํ ์ ์์ผ๋ฉฐ, ์งง์ ๋ผ์ดํ์ฌ์ดํด์ ๋์ํ ์ ์๊ฒ ๋๋ค. 1
2๏ธโฃ ์ปจํ ์ด๋ ์ด๋ป๊ฒ ๋ง๋ค์ด์? Dockerfile์ด ๋ญ์ฃ ?
Dockerfile๋ ์ปจํ ์ด๋๋ฅผ ๋น๋ํ๋๋ก ๋์์ฃผ๋ ๋ช ๋ น์ด๋ค์ ์งํฉ ํ๋ค.
โ Dockerfile์ด ๋ญ๋ฐ??
- Dockerfile์ yml(์ผ๋ฏ)ํ์ผ๋ก ์ฝ๊ณ , ๊ฐ๋จํ๋ ๋ช
ํํ ๊ตฌ๋ฌธ์ ๊ฐ์ง textfile์ด๋ค.
- ์์์ ์ฐจ๋ก๋ก ํด์ํ๋ Top-Down ๋ฐฉ์
- ์ปจํ ์ด๋ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ ์ ์๋ ์ง์์ด ์กด์ฌ
- ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์์ (๋ค๋ง ๊ฐ๋ ์ฑ์ ์ํด ์ฌ์ฉ)
Dockerfile์ด ์๋ ์์น์์ ์๋์ฒ๋ผ ๋น๋ํ๋ฉด ์ปจํ ์ด๋ ์์ฑ
docker build -t ์ด๋ฏธ์ง๋ช
:ํ๊ทธ .
๐ Dockerfile ๋ฌธ๋ฒ (์ผ๋ถ)
# | comment |
FROM | ์ปจํ ์ด๋์ base Image (์ด์ํ๊ฒฝ) ์ค์ , ์ต์๋จ์ ์์นํด์ผํจ |
MAINTAINER | ์ด๋ฏธ์ง๋ฅผ ์์ฑํ ์ฌ๋์ ์ด๋ฆ ๋ฐ ์ ๋ณด |
LABEL | ์ปจํ ์ด๋ ์ด๋ฏธ์ง์ ์ปจํ ์ด๋ ์ ๋ณด๋ฅผ ์ ์ฅ |
RUN | ์ปจํ ์ด๋ ๋น๋๋ฅผ ์ํด base image์์ ์คํํ ๋ช ๋ น์ด๋ค |
COPY | ์ปจํ ์ด๋ ๋น๋์ ํธ์คํธ ํ์ผ์ ์ปจํ ์ด๋๋ก ๋ณต์ฌ |
ADD | ์ปจํ
์ด๋ ๋น๋์ ํธ์คํธ์ ํ์ผ(tar, url ํฌํจ)์ ์ปจํ
์ด๋๋ก ๋ณต์ฌ COPY๊ฐ ๊ทธ๋ฅ ๋ณต์ฌํ๋ ๊ฒ๊ณผ ๋ค๋ฅด๊ฒ tar๋ฅผ ์์ถํด์ ํด์ ๋ณต์ฌํ๋ค๋ ๊ฐ url์ ํตํด ๋ค์ด๋ฐ์ ๋ณต์ฌํ๋ค๋ ๊ฐ์ ๊ธฐ๋ฅ์ ์ถ๊ฐ๋ก ํ ์ ์๋ค. |
WORKDIR | ์ปจํ ์ด๋ ๋น๋์ ๋ช ๋ น์ด ์คํ๋ ์์ ๋๋ ํ ๋ฆฌ ์ค์ |
ENV | ํ๊ฒฝ ๋ณ์ ์ง์ |
USER | ๋ช ๋ น ๋ฐ ์ปจํ ์ด๋ ์คํ์ ์ ์ฉํ ์ ์ ์ค์ (๋ณด์์ ๊ด์ ) |
VOLUME | ์ปจํ ์ด๋ ๋์์ ํธ์คํธ ํ์ผ ๋๋ ๋๋ ํ ๋ฆฌ๋ฅผ ์ปจํ ์ด๋ ๋๋ ํ ๋ฆฌ์ ๋ง์ดํธ |
EXPOSE | ์ปจํ ์ด๋ ๋์์ ์ธ๋ถ์์ ์ฌ์ฉํ ํฌํธ |
CMD | ์ปจํ ์ด๋ ๋์์ ์๋์ผ๋ก ์คํํ ์๋น์ค๋ ์คํฌ๋ฆฝํธ ์ง์ |
ENTRYPOINT | ์ปจํ
์ด๋ ๋์์ CMD์ ํจ๊ป ์ฌ์ฉํ๋ฉด์ command ์ง์ ์ ์ฌ์ฉ CMD๋ ์ค๊ฐ์ ๋ช ๋ น์ด ์นํ ๊ฐ๋ฅํ๋ ENTRYPOINT๋ ์ค๊ฐ ์นํ์ ์ฐจ๋จํ๋ค. |
๐งท ์์
Dockerfile ์ ์ฒด ์์ | ์ค๋ช |
$ mkdir build | build๋ผ๋ ๋๋ ํ ๋ฆฌ ์์ฑ(make directory) |
$ cd build | build ๋๋ ํ ๋ฆฌ๋ก ์ด๋ (change directory) |
$ vi hello.js | Visual editor๋ก hello.js๊ฐ ์์ผ๋ฉด ์ด๊ธฐ, ์์ผ๋ฉด ์์ฑ |
$ vi dockerfile | Visual editor๋ก ๋์ปคํ์ผ ๋ง๋ค๊ธฐ |
FROM node:12 | ์ด ๋ฒ ์ด์ค ์ด๋ฏธ์ง๋ฅผ ๊ธฐ์ค์ผ๋ก |
COPY hello.js / | hello.js๋ฅผ ์ต์์ ๋๋ ํ ๋ฆฌ(/)๋ก ๋ณต์ฌ |
CMD ["node", "/hello.js"] | node๋ก hello.jsํ์ผ์ ์คํ์์ผ์ค! |
dockerfile ์คํ | ์ค๋ช |
$ docker build -t hellojs:latest . | ํ์ฌ ๋๋ ํ ๋ฆฌ์ dockerfile์ ์คํ ์์ผ hellojs ๋ผ๋ ์ด๋ฏธ์ง๋ช ์ ๊ฐ์ฅ ์ต๊ทผ๊ฒ์ด๋ผ๋ ํ๊ทธ๋ฅผ ๋ฌ์ ์ด๋ฏธ์ง ์์ฑ |
3๏ธโฃ ๋ด๊ฐ ๋ง๋ ์ปจํ ์ด๋๋ฅผ ๋ฐฐํฌํ๋ ค๋ฉด?
hub๋ dockerhub ์ฒ๋ผ ๊ณต๊ฐ ๋ ํฌ์งํ ๋ฆฌ๊ฐ ์๋๊ฐ ํ๋ฉด, ํ์ฌ์์ ํ์ฌ๋ง์ ์ํ ๋ ํฌ์งํ ๋ฆฌ๋ฅผ ์ด์ํ๋ ๊ฒฝ์ฐ๋ ์๋ค.
์์ ์์์์ docker build ๋ก ์์ฑํ ์ปจํ ์ด๋ ์ด๋ฏธ์ง๋ฅผ ์ด๋ป๊ฒ ๋ฐฐํฌํ ์ ์์๊น
๋จผ์ ๋ง ์ฌ๋ฆด ์ ์๋๊ฒ ์๋๊ธฐ ๋๋ฌธ์ ํ๊ฐ ๋ถํฐ ๋ฐ๊ธฐ์ํด login์ ํ๋ค
์๋ ๋ช ๋ น์ด ํตํด ์ ์ ์ด๋ฆ๊ณผ ํจ์ค์๋๋ฅผ ๊ธฐ์
docker login
์ด๋ฏธ์ง push
docker push ์ด๋ฏธ์ง๋ช
:ํ๊ทธ
# ์ ์์๋ก ๋ณธ๋ค๋ฉด docker push hellojs:latest
๐4-2. ์ปจํ ์ด๋๋ฅผ ๋ง๋ค์ด ๋ด ์๋ค : ์ค์ต
์ผ๋จ์ ์ ์๋ ์คํ์ ๋ง์ถฐ ์ค์ตํด๋ณด๊ณ ๋ด ์คํ์ ๋ง์ถฐ์ ๋ฐ๋ก ๋ ์ฐ์ตํด๋ณด๊ธฐ
1๏ธโฃ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์ด๋ ๋ง๋ค๊ธฐ : hellojs
1. hellojs ๋๋ ํ ๋ฆฌ๋ฅผ ์์ฑ
2. hellojs ๋ก ๋๋ ํ ๋ฆฌ ์ด๋
3. cat ๋ ํ์ผ์ ์ถ๋ ฅํ๋ ๋ช ๋ น์ด๋ก concatenate์ ์ฝ์๋ก ์ฌ๋ฌ ํ์ผ์ ์ฐ๊ฒฐ์์ผ ์ถ๋ ฅํ ๋ ์ฌ์ฉ
๋ฆฌ๋ค์ด๋ ์ ๊ธฐํธ (>) ๋ ์ ๋ ฅํ ๋ด์ฉ์ผ๋ก ์ด ํ์ผ์ ๋ง๋ค๊ฑฐ๋ผ๋ ๋ช ๋ น์ด์ ํด๋นํ๋ค.
๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๊ณ ๋ด์ฉ๊น์ง ์ ๋ ฅํ๋ฉด ctrl + d๋ฅผ ์ด์ฉํด ์ ์ฅํ๋ค.
4. Dockerfile ๋ง๋ค๊ธฐ
visual editor๋ก ๋์ปคํ์ผ ๋ง๋ค๊ธฐ
vi์์ ๋ชจ๋ ์ ํํ๋ ค๋ฉด esc๋ฅผ ๋จผ์ ๋๋ฅด๊ณ i ๋ฅผ ๋๋ฌ ์ ๋ ฅ๋ชจ๋ ๋ณ๊ฒฝํ์ฌ ์๋ ์ฝ๋ ์ฐ๊ณ
esc ํ๊ณ :wq (write and quit) ํด์ ์ ์ฅ
(+ x : ํ๊ธ์ ์ญ์ , a : ์ปค์ ๋ค์์์น ์ฝ์ (์ด๊ฒ๋ ์ ๋ ฅ๋ชจ๋๋ก ์ ํ๊ธฐ๋ฅ์์), yy : ํ์ค ๋ฒํผ ๋ณต์ฌ, p : ๋ถ์ฌ๋ฃ๊ธฐ ๋ฑ)
5. dockerfile๋ก ์ด๋ฏธ์ง ๋ง๋ค๊ธฐ
?? ์ ์๋์ ๋์ปคํ์ผ ๋ผ์ธ๋น ํ๋ ์ด๋ฏธ์ง๋ ์ด์ด๋ผ๊ณ ํ์ จ๋๋ฐ ๊ทธ๊ฒ ๋ฌด์จ ๋ง์ด์ฃ 12๊ฐ๋ ์๊น
2๏ธโฃ ์ฐ๋ถํฌ ๊ธฐ๋ฐ์ ์น ์๋ฒ ์ปจํ ์ด๋ ๋ง๋ค๊ธฐ
1. webserver ๋๋ ํ ๋ฆฌ ์์ฑ
2. webserver ๋๋ ํ ๋ฆฌ ์ด๋
3. vim (vi์ ์์๋ฒ์ ) ์ผ๋ก Dockerfile ์์ฑ
๊ฐ์ ๋ช ๋ น์ด๋ฅผ ๋๋ฒ์จ๋ ๊ฐ๊ฐ ๋ ์ด์ด๊ฐ ์์ฑ๋๋ค. ๊ทธ๊ฑธ ์ค์ด๊ธฐ ์ํด &(์ฐํผ์๋) 2๊ฐ๋ก ๋ช ๋ น์ด๋ฅผ ์ฐ๊ฒฐํ์ฌ ํ๋ฒ์ ์คํํ๊ฒ ํ ์ ์์. &&์ ์ฌ์ค ์กฐ๊ฑด ์ฐ์ฐ์๋ก ์์ ๊ฒ์ด ์ฑ๊ณตํ๋ฉด ๋ค์๊ฒ์ ์คํํ๋ผ๋ ๋ฆฌ๋ ์ค ์ฐ์ฐ์.
๊ทธ๋ฆฌ๊ณ \ (๋ฐฑ์ฌ๋ฌ์)ํ๊ณ ์ํฐํ๋ฉด ๋ผ์ธ์ ์ฐ์์ด ๋๊ณ ํญ์ ๋ฃ์ด ๊ฐ๋ ์ฑ ์ข๊ฒ~
์๋ง๋ ๋์ปคํ์ผ์ ๋ ์ด์ด ์ ์ ๊ฒ (๋ช ๋ น์ด ์ ๊ฒ) ์ฌ์ด์ฆ ์ ๊ฒ ํด์ผํ๋ค
์ฌ๊ธฐ์ ์ปจํ ์ด๋์ index.html ์ฐพ์ "TEST WEB"์ ์ถ๋ ฅํ ์ ์๊ฒ ํ๊ณ
80ํฌํธ๋ฅผ ์ด์๋ค.
๋ํ ์ฐ๋ถํฌ์ ์ํ์น๋ฅผ ์ค์นํ๋ฉด /usr/sbin/apache2ctl ์ด๋ผ๋ ์ปจํธ๋กค ์ธํฐํ์ด์ค๊ฐ ์๊ธฐ๊ณ
์ปจํ
์ด๋ ๋ฌ๋์ ์ํ์น๋ฅผ -D ์ต์
๊ณผ FOREGROUND ์ต์
์ ํจ๊ป ์ค์ ์คํํด๋ฌ๋ผ๋ CMD๋ฅผ ๋ฃ๋๋ค.
(์ต์ D๋ ํด๋น ๋๋ ํ ๋ฆฌ๋ฅผ ๋ฃจํธ ๋๋ ํ ๋ฆฌ๋ก ์ค์ ์ด๊ณ FOREGROUND ์ต์ ์ ์๋ฒ๊ฐ ๋ถ๋ฆฌ๋์ด ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํ๋๋ ๋์ ํฌ๊ทธ๋ผ์ด๋์์ ์คํ๋๋๋ก ์ง์ํ์ฌ ์๋ฒ๊ฐ ํ์ฌ ํฐ๋ฏธ๋์ ์ฐ๊ฒฐ๋ ์ํ๋ก ์ ์ง๋๊ณ ์ถ๋ ฅ ๋ฐ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ์ค์๊ฐ์ผ๋ก ํ์)
cat ๋ช ๋ น์ด๋ก ํ์ธ
4. ์ด๋ฏธ์ง ์์ฑ
docker build -t ์ด๋ฏธ์ง๋ช
:ํ๊ทธ ๋์ปคํ์ผ๊ฒฝ๋ก
5. ์ปจํ ์ด๋ ์์ฑ
docker run -d -p ํธ์คํธํฌํธ:์ปจํ
์ด๋ํฌํธ --name ์ปจํ
์ด๋์ด๋ฆ ์ด๋ฏธ์ง๋ช
:๋ฒ์ ํ๊ทธ
echo ํด์ค๊ฑฐ ๊น์ง ํ์ธ!!
3๏ธโฃ ๋ง๋ค์ด ๋์ ์ปจํ ์ด๋ ๋ฐฐํฌํ๊ธฐ
์ด๋ฏธ์ง๋ฅผ ๋์ปค ํ๋ธ ๊ณ์ ์ ์ฌ๋ ค๋ณด๊ธฐ
1. ์ผ๋จ ๋์ปค ๋ก๊ทธ์ธ
2. ๊ฐ์ธ ์ ์ฅ์์ ์ฌ๋ฆด ์ด๋ฏธ์ง์๋ ์ด๋ฆ์ ๊ฐ์ธ๊ณ์ ์ด ๋ถ์ด์์ด์ผํ๋ค.
์ด๋ฏธ์ง๋ช ๋ณ๊ฒฝ
docker tag ์๋ณธ์ด๋ฏธ์ง์ด๋ฆ ๋ฐ๊ฟ์ด๋ฏธ์ง์ด๋ฆ
๊ทธ๋ฐ๋ฐ ๋ณด๋ฉด ๊ธฐ์กด๊ฒ์ด ์๊ณ ๋ํ๋ ์๊ฒจ๋ฒ๋ฆฐ ๊ฑธ ๋ณผ ์ ์๋ค. ์ด๋ฏธ์ง๊ฐ 2๊ฐ๊ฐ ๋๊ฑด ์๋๊ณ ๋จ์ง ์ด๋ฆ๋ง 2๊ฐ๊ฐ ๋ ๊ฒ (์ด๋ฏธ์ง ID๋ ๋์ผํ๋ค)
3. ์ด๋ฏธ์ง ์ ๋ก๋
docker push ์
๋ก๋ํ ์ด๋ฏธ์ง๋ช
โ ๊ณต๋ถ ๋ด์ฉ
4-1 , 4-2 ๋ด์ฉ
[๋ฐ๋ฐฐ๋] ๋์ปค ์๋ฆฌ์ฆ
www.youtube.com
- ์ฌ๋ฌ ๊ฐ๋ฐ์ธ์ด๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก๊ทธ๋๋ฐํ๋ ๊ฒ [๋ณธ๋ฌธ์ผ๋ก]