KR_Virt_Docker - somaz94/DevOps-Engineer GitHub Wiki
Docker๋ ์ํํธ์จ์ด ์ปจํ ์ด๋ ๋ด์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํ๊ธฐ ์ํ ์คํ ์์ค ํ๋ซํผ์ด๋ค. ๋ฆฌ๋ ์ค์ ์ด์์ฒด์ ์์ค ๊ฐ์ํ์ ๋ํ ์ถ๊ฐ์ ์ธ ์ถ์ํ ๋ฐ ์๋ํ๋ฅผ ์ ๊ณตํ๋ค.
Docker๋ ๋ฆฌ๋ ์ค ์ปค๋์ ๋ฆฌ์์ค ๊ฒฉ๋ฆฌ ๊ธฐ๋ฅ(์: cgroups ๋ฐ ์ปค๋ ๋ค์์คํ์ด์ค)๊ณผ ์ ๋์จ ํ์ผ ์์คํ (OverlayFS์ ๊ฐ์)์ ์ฌ์ฉํ์ฌ ๋จ์ผ ๋ฆฌ๋ ์ค ์ธ์คํด์ค ๋ด์์ ๋ ๋ฆฝ์ ์ธ ์ปจํ ์ด๋๊ฐ ์คํ๋ ์ ์๋๋ก ํ์ฌ ๊ฐ์ ๋จธ์ ์ ์์ํ๊ณ ์ ์งํ๋ ์ค๋ฒํค๋๋ฅผ ๋ฐฉ์งํ๋ค.
- ์ปจํ ์ด๋ํ: ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๊ทธ ์์กด์ฑ์ ์ปจํ ์ด๋์ ํจํค์งํ์ฌ ๊ฐ๋ฐ, ํ ์คํธ ๋ฐ ํ๋ก๋์ ํ๊ฒฝ์์ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๋ค.
- ๊ฒฝ๋์ฑ: ์ปจํ ์ด๋๋ ๊ธฐ๊ณ์ OS ์ปค๋์ ๊ณต์ ํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ๋น OS๋ฅผ ์๊ตฌํ์ง ์์ ๊ฐ์ ๋จธ์ ๋ณด๋ค ๋ ๊ฐ๋ณ๋ค.
- ์ด์์ฑ: Docker๋ก ์ปจํ ์ด๋ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ Docker๋ฅผ ์ง์ํ๋ ๋ชจ๋ ํ๋ซํผ์์ ์ด๋์์๋ ์คํ๋ ์ ์๋ค.
- ๊ฒฉ๋ฆฌ: Docker๋ ๊ฐ ์ปจํ ์ด๋๊ฐ ๊ฒฉ๋ฆฌ๋๋๋ก ๋ณด์ฅํ๋ค. ์ปจํ ์ด๋๋ ์์ฒด ํ์ผ ์์คํ , ๋คํธ์ํน ๋ฐ ๊ณ ์ ํ ํ๋ก์ธ์ค ๊ณต๊ฐ์ ๊ฐ์ง๋ค.
- Docker Hub: Docker Hub๋ Docker ์ด๋ฏธ์ง๋ฅผ ์ํ ์ ์ฅ์์ด๋ค. ์ฌ์ฉ์๋ Docker Hub์์ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ๋ฐ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
Dockerfile์ ์ด๋ฏธ์ง๋ฅผ ์กฐํฉํ๊ธฐ ์ํด ์ฌ์ฉ์๊ฐ ์ปค๋งจ๋ ๋ผ์ธ์์ ํธ์ถํ ์ ์๋ ๋ชจ๋ ๋ช
๋ น์ด๋ฅผ ํฌํจํ๋ ํ
์คํธ ๋ฌธ์์ด๋ค. docker build๋ฅผ ์ฌ์ฉํ๋ฉด ์ฐ์์ ์ธ ์ปค๋งจ๋ ๋ผ์ธ ์ง์์ด๋ฅผ ์ํํ๋ ์๋ํ๋ ๋น๋๋ฅผ ์์ฑํ ์ ์๋ค.
- FROM: ๊ธฐ๋ฐ ์ด๋ฏธ์ง๋ฅผ ์ง์ ํ๋ค.
- RUN: ํ์ฌ ์ด๋ฏธ์ง ์์ ์ ๋ ์ด์ด์์ ๋ช ๋ น์ ์คํํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ปค๋ฐํ๋ค.
-
COPY:
src์์ ์ ํ์ผ, ๋๋ ํ ๋ฆฌ ๋๋ ์๊ฒฉ ํ์ผ URL์ ๋ณต์ฌํ๊ณ ์ปจํ ์ด๋์dest๊ฒฝ๋ก์ ์ถ๊ฐํ๋ค. -
CMD: ์คํ ์ค์ธ ์ปจํ
์ด๋์ ๋ํ ๊ธฐ๋ณธ๊ฐ์ ์ ๊ณตํ๋ค. ๋ง์ง๋ง
CMD๋ง ํจ๊ณผ๊ฐ ์๋ค. - EXPOSE: Docker์๊ฒ ์ปจํ ์ด๋๊ฐ ๋ฐํ์์ ์ง์ ๋ ๋คํธ์ํฌ ํฌํธ๋ฅผ ์ฌ์ฉํ๋ค๊ณ ์๋ฆฐ๋ค.
-
ENV: ํ๊ฒฝ ๋ณ์
<key>๋ฅผ ๊ฐ<value>๋ก ์ค์ ํ๋ค. - ENTRYPOINT: ์คํ ๊ฐ๋ฅํ ์ปจํ ์ด๋๋ฅผ ๊ตฌ์ฑํ ์ ์๋๋ก ํ๋ค.
# ๊ณต์ Python ๋ฐํ์์ ๋ถ๋ชจ ์ด๋ฏธ์ง๋ก ์ฌ์ฉ(Docker Hub ๋ค์ด๋ก๋)
FROM python:3.7-slim
# ์ปจํ
์ด๋ ๋ด์ ์์
๋๋ ํ ๋ฆฌ ์ค์
WORKDIR /usr/src/app
# ํ์ฌ ๋๋ ํ ๋ฆฌ์ ๋ด์ฉ์ ์ปจํ
์ด๋์ /usr/src/app์ ๋ณต์ฌ
COPY . .
# requirements.txt์ ๋ช
์๋ ํ์ํ ํจํค์ง ์ค์น
RUN pip install --no-cache-dir -r requirements.txt
# ์ปจํ
์ด๋ ์ธ๋ถ์์ ํฌํธ 80 ์ฌ์ฉ ๊ฐ๋ฅํ๋๋ก ์ค์
EXPOSE 80
# ํ๊ฒฝ ๋ณ์ ์ ์
ENV NAME World
# ์ปจํ
์ด๋๊ฐ ์์๋ ๋ app.py ์คํ
CMD ["python", "./app.py"]- ํด๋น Dockerfile์ Python ํ๊ฒฝ์ ๋ง๋ค๊ณ , ์์ ๋๋ ํ ๋ฆฌ๋ฅผ ์ค์ ํ๊ณ , ํ์ฌ ๋๋ ํ ๋ฆฌ์ ๋ด์ฉ์ ๋ณต์ฌํ๊ณ , ์์กด์ฑ์ ์ค์นํ๊ณ , ํฌํธ๋ฅผ ๊ณต๊ฐํ๊ณ , ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ ํ๊ณ , ์ปจํ ์ด๋ ์์ ์ ๋ช ๋ น์ด๋ฅผ ์ง์ ํ๋ค.
Docker Compose๋ ์ฌ๋ฌ ์ปจํ
์ด๋๋ฅผ ์ ์ํ๊ณ ์คํํ๊ธฐ ์ํ ๋๊ตฌ์
๋๋ค. docker-compose.yml ํ์ผ์ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
์ ์๋น์ค, ๋คํธ์ํฌ ๋ฐ ๋ณผ๋ฅจ์ ๊ตฌ์ฑํ ์ ์๋ค.
version: "3"
services:
web:
image: "webapp:latest"
ports:
- "5000:5000"
db:
image: "postgres:latest"
environment:
POSTGRES_DB: mydb
POSTGRES_USER: user
POSTGRES_PASSWORD: password- ํด๋น
docker-compose.ymlํ์ผ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์๋น์ค์ PostgreSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋น์ค๋ฅผ ์ ์ํ๋ค. ์น ์๋น์ค๋ 5000 ํฌํธ์์ ์คํ๋๋ฉฐ, db ์๋น์ค๋ ํ๊ฒฝ ๋ณ์๋ฅผ ํตํด ๊ตฌ์ฑ๋๋ค.