์ง๊ธ๊น์ง๋ ๋ค๋ฅธ ์ฌ๋์ด ๋ง๋ค์ด ๋์ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ๋ค๊ฐ ์ผ์ต๋๋ค.
๊ทธ๋ฌ๋ ์ด๋ฏธ์ง๋ฅผ ์ฐ๋ฆฌ๊ฐ ์ง์ ๋ง๋ค ์ ์์ด์ผ ๋์ค์ ์ค๋ฌด์๋ ์จ๋จน๊ฒ ์ฃ ? ๐
Docker์ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๋ ๊ธฐ๋ฅ์ด ๋ฐ๋ก dockerfile์ ๋๋ค.
๋ค๋ฅธ ์ฌ๋์ด ์์ฑํ ์ด๋ฏธ์ง๋ฅผ ์ดํดํ๊ธฐ ์ํด์๋ ๊ผญ ํ์ํ๋, ์ต์ํด์ ธ๋ด ์๋ค!
- ๊ธฐ๋ณธ์ ์ผ๋ก ๋ช ๋ น๊ณผ ์ธ์๋ก ๊ตฌ์ฑ
- ๋ช ๋ น์ ๋๋ฌธ์๋ก ์ธ์๋ ์๋ฌธ์๋ก ์์ฑํจ
- ์ฃผ์์ python๊ณผ ๋์ผํ๊ฒ #
- AWS๋ก ํ๋ ๊ฒฝ์ฐ ๋ณดํต vi ์ฌ์ฉ
vi Dockerfile
๋ฅผ ํตํด ํ์ฌ ๊ฒฝ๋ก์ Dockerfile ์์ฑ ๊ฐ๋ฅ
๋ฒ ์ด์ค ์ด๋ฏธ์ง ์ง์ ๋ช ๋ น์ด
ํญ์ ๋งจ ์ฒ์์ ์์ฑ๋๋ ๋ช ๋ น์ด
์์ฑ ์์
FROM alpine:ํ๊ทธ
- Docker ์ด๋ฏธ์ง๋ฅผ ์์ฑํด์ฃผ๋ docker ๋ช ๋ น์ด (Dockerfile ์ฌ์ฉํจ)
docker build {์ต์ } {๋์ปคํ์ผ ๊ฒฝ๋ก}
- default๋ก๋ Dockerfile ์ด๋ผ๋ ์ด๋ฆ์ ์ฐพ๋๋ค.
-tag
: ์ด๋ฏธ์ง์ ์ด๋ฆ ์ง์ ๊ฐ๋ฅ (์ด๋ฆ ์์ :Tag๋ ์ง์ ๊ฐ๋ฅํ๋ค)-f
: default๋ก ์ง์ ๋ Dockerfile ์ด๋ฆ ์ธ์ ๋ค๋ฅธ Dockerfile์ ์ง์ ํด์ฃผ๊ณ ์ถ์ ๋ ์ฌ์ฉ (๊ฒฝ๋ก๋ ์๋ ค์ค์ผํจ)--pull
: ํด๋น ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค ๋ ๋ด๋ถ์ ๊ด๋ จ๋ ์ด๋ฏธ์ง๋ค์ ์๋ก ๋ค์ด ๋ฐ์์ง ๋ง์ง ๊ฒฐ์ ํ ์ ์๋ ์ต์ true๋ก ๋๋ฉด ๋ชจ๋ ์ต์ ๋ฒ์ ์ผ๋ก ๋ค์ด ๋ฐ์.[์ฌ์ฉ ์์ :--pull=true
]
๋ฉํ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๋ ๊ธฐ๋ฅ
์์ฑ ์์
LABEL maintainer = "It's me!!"
LABEL version = "1.0.0"
LABEL description = "Description of Image"
์ด๋ฏธ์ง๋ ์ปจํ ์ด๋ ๋ด๋ถ์ ์ ๋ณด๋ฅผ ํ์ธํ๋ ๋ช ๋ น์ด
ํน์ ํด๋์ ํ์ผ๋ค์ ๋ค๋ฅธ ํด๋๋ก ๋ณต์ฌํ๋ ๋ช ๋ น์ด
์ถ๊ฐ์ ์ธ ํด๋๋ฅผ ๋ฃ์ ์ํ์ Conatainer๋ฅผ ์์ฑํ๊ณ ์ถ์ ๋ ์ฌ์ฉ
์์ฑ ์์
COPY ./2021_DEV /usr/local/apache2/htdocs
docker์ CMD๋ฅผ ์ง์ ํ๋ ๋ช ๋ น์ด
๋ชจ๋ Docker๋ ์คํ๋ ๋ ์คํ๋๋ ๋ช ๋ น์ด๊ฐ ์๋ค. ๊ทธ ๋ช ๋ น์ด๊ฐ ๋ฐ๋ก CMD!! ๋๋ฌธ์ ์ฌ๋ฌ๊ฐ๊ฐ Dockerfile์ ์์ฑ๋์ด ์์ด๋ ๋ง์ง๋ง ํ๋๋ง ์คํ๋จ.
-c
: ์ดํ์ ์ค๋ ๋ช ๋ น์ด๋ค์ ์ธ์๋ก ๋ฐ์๋ด๋ถ ์ด๋ฏธ์ง์ CMD ๋ณด๋ค ์ฐ์ ํ์ฌ CMD๋ฅผ dockerfile์ ์์ฑํ๋ ๊ฒฝ์ฐ ์๋ก ์์ฑํ CMD๊ฐ ์คํ๋ฉ๋๋ค.
์์ฑ ์์
1. CMD ["/bin/sh", "-c", "echo", "Hello"] ## ๋ชจ๋ ""๋ก ์์ฑํด์ค์ผ ํ๋ค. '' ์๋จ.
2. CMD /bin/sh -c echo Hello
โ CMD ๋ช
๋ น ๋ฎ์ด์์ฐ๊ธฐ!
vim
์ผ๋ก CMD๋ฅผ ์์ ํ๊ธฐ ๊ท์ฐฎ๋ค๋ฉด? docker run์ ํ ๋ ์ด๋ฏธ์ง ๊ด๋ จ ๋ช
๋ น์ด๋ฅผ ๋ชจ๋ ์
๋ ฅํ ๋ค์ ๋ฎ์ด ์์ธ CMD๋ฅผ ์
๋ ฅํ๋ฉด ์์ฐ์ค๋ฝ๊ฒ ํด๋น CMD๋ก ์คํํด์ค๋ค!!
docker run -dit -p 9999:80 --name httpdweb2 myweb2 /bin/sh -c httpd-foreground
์ ์ฝ๋์ /bin~~~
๋ถํฐ ๋ฎ์ด ์์ธ CMD๋ผ๊ณ ํ ์ ์๋ค.
์์ฐ์ค๋ฝ๊ฒ ์ ๋ฐ๋ ๊ฒ์ ํ์ธ ๊ฐ๋ฅ!
CMD๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํ๋ฉด
vim
์ผ๋ก ์ง์ Dockerfile์ํธ์งํ๋ ์ง docker run
์ผ๋ก ์์ฑํ๋ ์ง๋ก ์ ๋ฆฌํ ์ ์๊ฒ ๋ค!
โ ๋ช
๋ น์ด์ ์ธ์์ ๊ด๊ณ
๋ช
๋ น์ด์ ์ธ์์ ๊ด๊ณ๋ฅผ ์๊ธฐ ์ฌ์ด ๋ฐฉ๋ฒ์ echo๋ฅผ ์ด์ฉํ๋ ๊ฒ
echo
: python์ print์ ๊ฐ์ ์ญํ
๋ง์ฝ main ๋ช ๋ น์ด echo์ ์ธ์๋ก Hello๊ฐ ๋ถ๋ ๊ฒ์ CMD๋ก ํํํ๋ฉด
CMD ["/bin/echo", "Hello"]
์ด๋ผ๊ณ ์ ์ด๋๋ฉด docker run์ ํตํด container๊ฐ ์คํ๋ ๋ ์๋์ผ๋ก Hello๋ฅผ ์ถ๋ ฅํ๋ค.
python์ผ๋ก ๋น์ ํ๋ฉด ํจ์์ parameter์ ๋น์ทํ ์ญํ ์ด๋ผ๊ณ ์ดํดํด๋ ๋ ๊ฒ๊ฐ๋ค.
Docker์ Container๊ฐ ๊ธฐ๋กํ logs๋ฅผ ์ถ๋ ฅํฉ๋๋ค. ์๋ฌ๋ ๋ก๊ทธ๋ฅผ ํ์ธํ๋ ๋ฐ์ ์ฌ์ฉํฉ๋๋ค.
์๋๋ log ํ์ผ์ ๊ธฐ๋ก๋ ๋ด์ฉ๋ค ์ ๋๋ค.
docker logs {Container ์ด๋ฆ}
๋ชจ๋ ์ปจํ ์ด๋๋ฅผ ์ฆ์ ์ค์งํฉ๋๋ค.
stop๋ณด๋ค ์ข ๋ ๋น ๋ฅด๊ฒ ์ค์ง ๊ฐ๋ฅํฉ๋๋ค.
docker kill {Container ์ด๋ฆ}
๋ฎ์ฌ์์์ง๋ฉด ์ ๋๋ CMD ๋ช ๋ น์ ๊ธฐ์ ํด์ผํ ๋ ์ฌ์ฉ
Dockerfile
์ CMD๋docker run
์ CMD ๋ณด๋ค ์ฐ์ ๋์ดDockerfile
์ CMD์docker run
์ CMD๋ ENTRYPOINT ๋ช ๋ น์ด์ ์ธ์๋ก ๋ค์ด๊ฐ๊ฒ๋จ
์์ฑ ์์
ENTRYPOINT ["/bin/sh"]
์์ฒ๋ผ ์์ฑํ๋ฉด Container ์์ฑ์, ๊ทธ ์ด๋ค CMD๋ณด๋ค ๊ฐ์ฅ ์ฐ์ ์ ์ผ๋ก ์คํ๋๋ฉฐ
docker run์ด๋ Dockerfile์ ์์ฑํ CMD๋ ENTRYPOINT์ ์ธ์๋ก์ ๋ค์ด๊ฐ๊ฒ ๋๋ค.
ํ๋์ ์ด๋ฏธ์ง๋ ๋ ๋ค๋ฅธ ์ด๋ฏธ์ง๋ค๋ก ์ด๋ฃจ์ด์ง๋ค.
Dockerfile์ ์ด๋ฏธ ๊ตฌ์ฑํ๊ณ ์๋ ์ด๋ฏธ์ง Layer์ ์๋ก์ด Layer๋ฅผ ์๊ณ ์ถ์ ๋ ์ฌ์ฉ
apt-get install apt-utils
: ์ด๋ฏธ ์ค์น๋ Layer ์ด๋ฏธ์ง๋ฅผ ๋ ์ค์นํ์ง ๋ง๊ณ ์บ์๋ฅผ ์ฌ์ฉํด์ ๋ ๋น ๋ฅด๊ฒ ์งํํฉ๋๋ค.
์ด๋ฐ ์์ผ๋ก Dockerfile์์ ubuntu๋ฅผ ์ค์นํ๊ณ ์ถ๊ฐ์ ์ธ ์์ ์ผ๋ก apache2๋ฅผ ์ค์นํ๋ ๋ช ๋ น์ด๋ฅผ ๋ ๋ฃ๊ณ ์ถ์ ๋ RUN์ ์ฌ์ฉํฉ๋๋ค.
์ปจํ ์ด๋์ ํน์ ํฌํธ๋ฅผ ์ธ๋ถ์ ์คํํ๋ ์ค์
docker run -p xxxx:yy
๊ณผ ๋ค๋ฅธ ๊ฒ์ "๋ณธ์ธ์ ํน์ ํฌํธ"๋ฅผ ์คํํ๋ ๊ฒ
์ธ๋ถ์์ ๋ด๋ถ์ ํ์ผ์ ๋ณด๊ฒํ๊ณ ์ถ์ ๋ :docker run -p
๋ด๋ถ ์ด๋ฏธ์ง๋ค ๋ผ๋ฆฌ ์ํธ์์ฉ์ ํ๊ณ ์ถ์ ๋ :EXPOSE
์ด๋ฐ ์์ผ๋ก ํด๋น ์ปจํ
์ด๋์ 80๋ฒ ํฌํธ๋ฅผ "์ด์ด ๋๊ฒ ๋ค!"๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค.
docker build
๋ก ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๊ณ docker inspect
๋ฅผ ํตํด config๋ฅผ ํ์ธํ์๋ฉด ExposedPorts ํญ๋ชฉ์ 80๋ฒ ํฌํธ๊ฐ ์ ์ด๋ ค์๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
โ
docker run -p
๊ฐ ์๋๋ผ docker run -P
์ฒ๋ผ p๋ฅผ ๋๋ฌธ์๋ก ์
๋ ฅํ๋ฉด EXPOSE๋ก ์ด๋ ค์๋ ํฌํธ๋ก Randomํ ํฌํธ๋ฅผ ํตํด ๋ค์ด๊ฐ๋๋ค. ์๋๋ -p 9999:80
์ด๋ฐ ์์ผ๋ก ์ง์ ํด์ฃผ์์ง๋ง -P
๋ก ํ๋ฉด 123123:EXPOSE๋ ํฌํธ
๋ก ์์์ ๊ฐ์ค๋๋ค.
๋ฌผ๋ก ์ด ์ค์ ๋ AWS ๋ฐ๋ก ๋ค ์ด์ด์ค์ผํ ์ ์์ต๋๋ค.
์ปจํ ์ด๋ ๋ด์ ํ๊ฒฝ๋ณ์๋ฅผ ์ค์ ํ ๋ ์ฌ์ฉ
ํ๊ฒฝ ๋ณ์ : ์ด๋ค ํ๋ก์ธ์ค๋ฅผ ์คํ์ํฌ ๋ ์ฐธ์กฐํ๋ ๋ณ์
x๋ผ๋ ์ด๋ฏธ์ง๊ฐ ์คํ๋ ๋ ์ค์ ํด์ผํ๋ ๋ณ์๊ฐ ์์ผ๋ฉด, ๊ทธ ๋ณ์์ ๋ด์ฉ์ ๋ฏธ๋ฆฌ ์ ์ํ๋ ๋ฐ์ ์ฌ์ฉ๋๋ค.
์์ฑ ์์
ENV MYSQL_ROOT_PASSWORD=thisismypassword
ENV MYSQL_DATABASE=thisisdbname
ENV PATH /usr/bin:$PATH
์ดํ mysql Container์ ์ ์ํด์ ํ์ธํด๋ณด๋ฉด ์๊น ํ๊ฒฝ ๋ณ์๋ก ์ค์ ํด๋ DB์ ์ด๋ฆ์ด ์ ๋์์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค!!
โ
Dockerfile ๋ด๋ถ์์ ์ฌ์ฉ๋ ๋ณ์๋ฅผ ์ค์ ํ๊ธฐ ์ํด์
ARG
๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ๋ค.
ARG env=dev
RUN, CMD, ENTRYPONT์ ๊ฐ์ ๋ช ๋ น์ด๋ค์ด ์คํ๋ ๊ฒฝ๋ก๋ฅผ ์ง์ ํ ๋ ์ฌ์ฉ
ํด๋น ๋ช ๋ น์ด๋ค์ ์ ๋๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํด๋ ๋์ง๋ง ์๋ ๊ฒฝ๋ก๋ก์ ์คํ์ํค๊ณ ์ถ์ ๋ ๋ช ๋ น์ด ์คํ๋ ๋๋ ํ ๋ฆฌ๋ฅผ ์ค์ ํ๊ธฐ ์ํจ!
์ฌ์ฉ์์
WORKDIR /usr/local/apache2/htdocs
์ด์ Docker๋ฅผ ์ฌ์ฉํ์ค ๊ธฐ๋ณธ ์ค๋น๊ฐ ๋ค ๋์ จ์ต๋๋ค. ์ด์ ๋ณธ๊ฒฉ์ ์ธ ์ฌ์ฉ๋ฐฉ๋ฒ์ ์ตํ์ จ์ผ๋ ์ด๋ค ํด์ ์ฌ์ฉํด์ ์ด๋ป๊ฒ ์ฌ์ฉํ ์ง ํ๋ฒ ์๊ฐํด๋ณด๋๋ก ํฉ์๋ค!