Docker ์ ์ฒด ํฌ์คํ
[Docker] (1) ๋์ปค ๊ฐ๋ ์ค๋ช | ๋์ปค๋ ์ ์ฌ์ฉํ๋ ๊ฑธ๊น?
[Docker] (2) ๋์ปค & ๋์ปค์ปดํฌ์ฆ ๋ค์ด๋ก๋
[Docker] (3) ๋์ปค ํต์ฌ ๊ฐ๋ - ์ด๋ฏธ์ง, ์ปจํ ์ด๋, ๋์ปค ํ๋ธ
[Docker] (5) ๋์ปค run ๋ช ๋ น์ด ์ต์ , ๋์ปค ์ปจํ ์ด๋๊ฐ ์ข ๋ฃ๋์ง ์๊ฒ ํ๋ ๋ฐฉ๋ฒ
[Docker] (6) ๋์ปค ์ปจํ ์ด๋๋ก ์ ์ํ๊ธฐ - docker exec & docker attach
[Docker] (7) ๋์ปค volume(๋ณผ๋ฅจ) ์ต์ - ์ปจํ ์ด๋ ํด๋์ ํธ์คํธ ํด๋ ์ฐ๊ฒฐํ๊ธฐ
[Docker] (9) Dockerfile(๋์ปคํ์ผ) - ์ค๋งํธํ๊ฒ ๋์ปค ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๋ ๋ฐฉ๋ฒ
[Docker] (10) Dockerfile ๋น๋ ์์ | ENTRYPOINT ์ CMD์ ์ฐจ์ด
[Docker] (11) ๋์ปค ์ปจํ ์ด๋์ vscode ์ฐ๋ํ๊ธฐ | ๋์ปค ์ปจํ ์ด๋์์ ๊ฐ๋ฐ
[Docker] (12) ๊นํ๋ธ๋ก ๋์ปค ์ด๋ฏธ์ง ๊ณต์ ํ๊ธฐ | Packages Container Registry
Dockerfile
Dockerfile์ ๋์ปค ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๊ธฐ ์ํ ์ง์์ฌํญ๋ค์ ํฌํจํ๋ ํ ์คํธ ํ์ผ๋ก, Dockerfile์ ์ฌ์ฉํ๋ฉด ๋์ปค ์ด๋ฏธ์ง๋ฅผ ๊ตฌ์ฑํ๋ ๊ณผ์ ์ ์๋ํํ๊ณ , ์ด๋ฏธ์ง๊ฐ ์ด๋ป๊ฒ ๋น๋๋์ด์ผ ํ๋์ง ์ธ๋ถ ์ฌํญ์ ์ ์ํ ์ ์๋ค. Dockerfile์ ์ฌ์ฉํ๋ฉด ์ด๋ฏธ์ง ๋น๋๋ฅผ ๋ฐ๋ณต ๊ฐ๋ฅํ๊ฒ ํ๊ณ , ๋ฒ์ ๊ด๋ฆฌ ์์คํ ์ ํตํด ์ด๋ฏธ์ง ๊ตฌ์ฑ์ ๊ด๋ฆฌํ๊ธฐ ํธํ๋ค.
๋์ปคํ์ผ ๋น๋ vs ์ปจํ ์ด๋ ์ปค๋ฐ
๋์ปค ์ด๋ฏธ์ง๋ฅผ ์ ์ฅํ๊ธฐ ์ํด์๋ ๋์ปคํ์ผ์ ๋น๋ํ ์๋ ์๊ณ , ์ปจํ ์ด๋๋ฅผ ์ปค๋ฐํ ์๋ ์๋๋ฐ ๊ฐ๊ฐ ์ด๋ค ์ฅ๋จ์ ์ด ์๋์ง ์์๋ณด์.
- Dockerfile build (๋์ปคํ์ผ ๋น๋)
- ๋์ปคํ์ผ์ ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๋ ๋ฐ ํ์ํ ๋ชจ๋ ๋จ๊ณ๋ฅผ ํฌํจํ๋ฏ๋ก, ์ด๋ฏธ์ง ๋น๋ ๊ณผ์ ์ด ์์ ํ ์ฌํ ๊ฐ๋ฅ
- ์ฝ๋์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฒ์ ๊ด๋ฆฌ ์์คํ ์ ํตํด ๊ด๋ฆฌํ ์ ์์
- ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๋ ๋ฐ ํ์ํ ๋ชจ๋ ์ค์ ๊ณผ ๋จ๊ณ๋ฅผ ํ๋์ ํ์ผ์ ์ ์ํ๋ฏ๋ก, ์ด๋ฏธ์ง์ ๊ตฌ์ฑ์ ์ฝ๊ฒ ์ ์ง๋ณด์ํ ์ ์์
- Container commit (์ปจํ
์ด๋ ์ปค๋ฐ)
- ๊ฐํธํ๊ฒ ๋น ๋ฅด๊ฒ ์์ํ ์ ์์ง๋ง, ๋์ปค ํ์ผ์ ๋นํด ๋จ์ ์ด ๋ง์
- ์ปจํ ์ด๋ ์ปค๋ฐ์ผ๋ก ์์ฑ๋ ์ด๋ฏธ์ง๋ ํด๋น ์ปจํ ์ด๋์ ๋ณ๊ฒฝ ์ฌํญ๋ง์ ํฌํจํ๋ฏ๋ก, ์ปจํ ์ด๋ ์ปค๋ฐ์ ํตํด ์์ฑ๋ ์ด๋ฏธ์ง๋ฅผ ๋ค๋ฅธ ํฉ๊ฒฝ์์ ์ฌํํ๊ธฐ ํ๋ค ์ ์์
- ํ๋ก์ธ์ค๊ฐ ๋ฐในํ์ ์ค ์ํํ ๋ณ๊ฒฝ ์ฌํญ์ ํฌํจํ ์ ์๊ธฐ์ ์ด๋ฏธ์ง์ ์ผ๊ด์ฑ๊ณผ ์์ ์ฑ์ด ๋ณด์ฅ๋์ง ์์ ์ ์์
- ์ด๋ฏธ ์คํ ์ค์ธ ์ปจํ ์ด๋์ ํ์ผ ์์คํ ๋ณ๊ฒฝ ์ฌํญ์ ๊ทธ๋๋ก ํฌํจํ๋ฏ๋ก ์ด๋ฏธ์ง ํฌ๊ธฐ๊ฐ ์ปค์ง ์ ์์
Dockerfile ์์ฑ
Dockerfile์ ์์ฑํ๋ ค๋ฉด ์ผ๋ฐ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ๋จ๊ณ๋ฅผ ๋ฐ๋ฅธ๋ค.
- ๋ฒ ์ด์ค ์ด๋ฏธ์ง ์ ํ: ์ด๋ฏธ์ง๋ฅผ ๊ตฌ์ฑํ ๋ ๊ธฐ์กด ์ด๋ฏธ์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ํ๋๋ฐ, ์ด ์ด๋ฏธ์ง๋ฅผ '๋ฒ ์ด์ค ์ด๋ฏธ์ง'๋ผ๊ณ ํ๋ค. ์๋ฅผ ๋ค์ด, ๋ฆฌ๋ ์ค ๋ฐฐํฌํ์ด๋ ์ดํ๋ฆฌ์ผ์ด์ ์คํ ํ๊ฒฝ์ ๊ธฐ๋ณธ ์ด๋ฏธ์ง๋ก ์ ํ.
- ํ์ํ ํ์ผ ๋ฐ ๋ช ๋ น ์ถ๊ฐ: ๋ฒ ์ด์ค ์ด๋ฏธ์ง ์์ ํ์ํ ํ์ผ๊ณผ ๋ช ๋ น์ ์ถ๊ฐ. ํ์ผ ๋ณต์ฌ, ํ๊ฒฝ ๋ณ์ ์ค์ , ์์ฉํ๋ก๊ทธ๋จ ์ค์น ๋ฑ์ ์์ ์ ์ํํ ์ ์์.
- ์์ ๋๋ ํ ๋ฆฌ ์ค์ : ์ด๋ฏธ์ง ๋ด์์ ์์ ๋๋ ํ ๋ฆฌ๋ฅผ ์ค์ ํ์ฌ ํ์ผ์ ์ถ๊ฐํ๊ฑฐ๋ ๋ช ๋ น์ ์คํํ๋ ์์น๋ฅผ ์ง์ .
- ๋ช ๋ น ์คํ: ์ด๋ฏธ์ง ๋ด์์ ์คํํ ๋ช ๋ น์ ์ ์. RUN, CMD, ENTRYPOINT ๋ฑ์ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ์์ ์ ์ํ.
- ํฌํธ ๋ ธ์ถ: ์ด๋ฏธ์ง๊ฐ ์คํ๋ ๋ ๊ฐ๋ฐฉํ ํฌํธ๋ฅผ ์ง์ . EXPOSE ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ์ปจํ ์ด๋ ๋ด๋ถ์์ ๊ฐ๋ฐฉํ ํฌํธ๋ฅผ ๋ช ์.
- ์ด๋ฏธ์ง ๋ฉํ๋ฐ์ดํฐ ์ค์ : ์ด๋ฏธ์ง์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ค์ ํ ์ ์์.
์ด๋ ๊ฒ Dockerfile์ ์์ฑํ ํ, docker build ๋ช ๋ น์ ์ฌ์ฉํ์ฌ Dockerfile์ ์ ์๋ ์ง์์ฌํญ์ ๋ฐ๋ผ ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ์ฌ ๋์ปค ์ด๋ฏธ์ง๋ก ์ ์ฅํ ์ ์๋ค.
๋ช ๋ น์ด | ์ค๋ช | ์์ |
FROM | ๋ฒ ์ด์ค ์ด๋ฏธ์ง ์ง์ | FROM ubuntu:20.04 |
WORKDIR | ์์ ๋๋ ํ ๋ฆฌ ์ค์ | WORKDIR /usr/src/app |
ENV | ํ๊ฒฝ ๋ณ์ ์ค์ | COPY app /usr/src/app |
COPY | ํธ์คํธ ํ์ผ ์์คํ ์์ ํ์ผ์ด๋ ๋๋ ํ ๋ฆฌ๋ฅผ ์ด๋ฏธ์ง ๋ด๋ถ๋ก ๋ณต์ฌ | COPY app /usr/src/app |
ADD | COPY์ ์ ์ฌํ์ง๋ง ์ถ๊ฐ ๊ธฐ๋ฅ์ ์ง์. URL๋ก๋ถํฐ ํ์ผ์ ๋ค์ด๋ก๋ํ๊ฑฐ๋ ์์ถ ํ์ผ์ ํ ์ ์์ | ADD https://example.com/file.txt /app/ |
RUN | ์ปจํ ์ด๋ ๋ด์์ ์คํํ ๋ช ๋ น์ด ์ ์. ํจํค์ง ์ค์น, ํ์ผ ๋ณต์ฌ, ์์ฉํ๋ก๊ทธ๋จ ๋น๋ ๋ฑ | RUN apt-get update && apt-get install -y curl |
EXPOSE | ์ปจํ ์ด๋๊ฐ ๊ฐ๋ฐฉํ ํฌํธ ์ง์ | EXPOSE 80 |
CMD | ์ปจํ ์ด๋๊ฐ ์คํ๋ ๋ ์คํํ ๋ช ๋ น์ด ์ง์ . `docker run` ๋ช ๋ น์์ ๋ช ๋ น์ด๊ฐ ์ ๊ณต๋์ง ์์ ๊ฒฝ์ฐ์๋ง ์คํ | CMD ["npm", "start"] |
ENTRYPOINT | ์ปจํ ์ด๋๊ฐ ์คํ๋ ๋ ํญ์ ์คํํ ๋ช ๋ น์ด. `docker run` ๋ช ๋ น์์ ์ถ๊ฐ์ ์ธ ๋ช ๋ น์ด๋ฅผ ์ ๋ฌํ๋ฉด ํด๋น ๋ช ๋ น์ด๊ฐ ์ธ์๋ก ์ฌ์ฉ | ENTRYPOINT ["npm", "start"] |
VOLUME | ํธ์คํธ์ ์ปจํ ์ด๋ ๊ฐ ๋ณผ๋ฅจ์ ๊ณต์ | VOLUME /data |
Dockerfile ๋น๋
docker build ๋ช ๋ น์ ๋์ปค ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๋ช ๋ น์ด๋ก, ์ด ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ๋์ปคํ์ผ(Dockerfile)์ ์ ์๋ ์ง์์ฌํญ์ ๋ฐ๋ผ ์ด๋ฏธ์ง๋ฅผ ๊ตฌ์ฑํ๊ณ ๋น๋ํ ์ ์๋ค. ๋์ปค ์ด๋ฏธ์ง ๋น๋ ๊ณผ์ ์์ ๋์ปคํ์ผ์ ์ ์๋ ๋จ๊ณ๋ค์ด ์์ฐจ์ ์ผ๋ก ์ํ๋๋ฉฐ, ์ต์ข ์ ์ผ๋ก ์ด๋ฏธ์ง๊ฐ ์์ฑ๋๋ค.
docker build [์ต์
] <๊ฒฝ๋ก>
์ฌ๊ธฐ์ <๊ฒฝ๋ก>๋ ๋์ปคํ์ผ์ด ์์นํ ๋๋ ํ ๋ฆฌ์ ๊ฒฝ๋ก๋ฅผ ๋ํ๋ด๊ณ , ์ต์ ์ ์ด๋ฏธ์ง ๋น๋ ๊ณผ์ ์ ์กฐ์ ํ๊ณ ์ธ๋ถ ์ฌํญ์ ์ง์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ์ต์ ๋ค์ ๋ค์๊ณผ ๊ฐ๋ค:
- -t, --tag: ๋น๋๋ ์ด๋ฏธ์ง์ ํ๊ทธ๋ฅผ ์ง์ . ์ด๋ฏธ์ง์ด๋ฆ:ํ๊ทธ ํ์์ผ๋ก ์ฌ์ฉ.
- -f, --file: ์ฌ์ฉํ ๋์ปคํ์ผ์ ๊ฒฝ๋ก๋ฅผ ์ง์ ๋ค. ๊ธฐ๋ณธ๊ฐ์ ./Dockerfile
- -q, --quiet: ๋น๋ ์งํ ์ํฉ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ์ง ์์
- --build-arg: ๋์ปคํ์ผ ๋ด์์ ARG ์ง์๋ฌธ์ ์ ๋ฌํ ๋น๋ ์ธ์๋ฅผ ์ง์ .
์๋ฅผ ๋ค์ด, ๋ค์์ ํ์ฌ ๋๋ ํ ๋ฆฌ์ ์์นํ ๋์ปคํ์ผ์ ์ฌ์ฉํ์ฌ my-image๋ผ๋ ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๊ณ ํ๊ทธ๋ฅผ v1.0์ผ๋ก ์ง์ ํ๋ ๋ช ๋ น์ด์ด๋ค.
docker build -t my-image:v1.0 .
Dockerfile ์์ฑ ๋ฐ build ์์
๋ค์์ Node.js ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ Dockerfile์ ์์์ด๋ค.
# ๋ฒ ์ด์ค ์ด๋ฏธ์ง ์ ํ
FROM node:14
# ์์
๋๋ ํ ๋ฆฌ ์ค์
WORKDIR /app
# ์ ํ๋ฆฌ์ผ์ด์
์ข
์์ฑ ์ค์น
COPY package.json package-lock.json /app/
RUN npm install
# ์ ํ๋ฆฌ์ผ์ด์
ํ์ผ ์ถ๊ฐ
COPY . /app/
# ํฌํธ ๋
ธ์ถ
EXPOSE 3000
# ์ปจํ
์ด๋ ์คํ ์ ์คํ๋ ๋ช
๋ น
CMD ["npm", "start"]
Dockerfile์ ์์ฑํ ํ์๋ ์ด ํ์ผ์ ํฌํจํ๋ ๋๋ ํ ๋ฆฌ์์ ์๋์ ๊ฐ์ด docker build ๋ช ๋ น์ ์คํํ์ฌ ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ ์ ์๋ค.
docker build [์ต์
] [Dockerfile ๊ฒฝ๋ก]
docker build -t my-node-app .
์์ ๋ช ๋ น์ ํ์ฌ ๋๋ ํ ๋ฆฌ(.)์ ์์นํ Dockerfile์ ์ฌ์ฉํ์ฌ my-node-app๋ผ๋ ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๋ค. ์ด๋ ๊ฒ ๋น๋๋ ์ด๋ฏธ์ง๋ docker run์ ์ฌ์ฉํ์ฌ ์ปจํ ์ด๋๋ก ์คํํ ์ ์๋ค.
httpd ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ Dockerfile ์์ฑ ๋ฐ build ์์
docker build -t httpd_test ./
docker run -dit -p 8080:80 httpd_test
- ํน์ ๊ฒฝ๋ก์ index.html ์์ฑ (ํน์ ํ ์คํธ ๋์ฐ๊ธฐ ์ํด)
- Dockerfile๋ก httpd ์ด๋ฏธ์ง์ ์์ฑํ html ํ์ผ์ COPY
- build ํ๊ณ ํฌํธํฌ์๋ฉ ์ ์ฉํ ์ํ๋ก run