etc-Dockerfile-layer
๋์ปค๋ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค ๋ ์ฌ๋ฌ ๊ฐ์ ๊ณ์ธต(layer)์ ๊ฐ์ง ๋ค์์ ์ค๋ ์ท์ผ๋ก ๋๋์ด ์ ์ฅํ๋ค. ์ด๋ ์ฌ๋ฌ ์ด๋ฏธ์ง ํ์ผ๋ค์ ๊ด๋ฆฌํ ๋ ์ค๋ณต๋๋ ์์ญ์ ํ๋์ ๋ ์ด์ด๋ฅผ ํตํด ๊ด๋ฆฌํ์ฌ ๊ณต๊ฐ/์๊ฐ์ ํจ์จ์ ์ป๋ ์ฅ์ ์ด ์๋ค.
์ฆ, ๋์ปค๋ Dockerfile์ ์ฝ์ด๋ค์ฌ, ํ์ผ ์์คํ ์ ๋ณํ๋ฅผ ์ฃผ๋ ์ปค๋งจ๋๋ง๋ค ์๋ก์ด ์ด๋ฏธ์ง ๋ ์ด์ด๋ฅผ ๋ง๋ ๋ค. ์ด๊ฒ์ผ๋ก ์ค๋ณต๋๋ ๋ ์ด์ด๋ฅผ ๋ค์ ๋ค์ด๋ก๋ ๋ฐ์ ํ์๊ฐ ์์ด์ ธ ์ด๋ฏธ์ง์ ๋ค์ด๋ก๋ ์๊ฐ์ ์ ์ฝํ๋ค.

ํน์ ์ด๋ฏธ์ง์ ๋ํ inspect ๋ก layer ํ์ธํ๊ธฐ
docker image inspect node-local:1.0
๊ฒฐ๊ณผ๋ ์๋์ ๊ฐ์ผ๋ฉฐ, RootFS๋ฅผ ํ์ธํ์ฌ ํด๋น ์ด๋ฏธ์ง๊ฐ 9๊ฐ์ ๋ ์ด์ด๋ก ๊ตฌ์ฑ๋์ด์์์ ๋ณผ ์ ์๋ค.
[
{
"Id": "sha256:d2b1b719a1f60fbe9cb436a112117d517423bab19764c55cc0e61258fd1d7f31",
"RepoTags": [
"node-local:0.1"
],
...
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:b09314aec293bcd9a8ee5e643539437b3846f9e5e55f79e282e5f67e3026de5e",
"sha256:41becf86c7a23a890f2b72907619a62f1cec8523cfd6cd888b991d9c2459b5af",
"sha256:4a376e76c5414adb4255663cd8d7c4f6c27df8036a6559a4e155889c0fddfdc1",
"sha256:a636c9c56d21c54aadde0308b86a504b93598ce159c2800dc7bff428f037540e",
"sha256:da23e30e92e9b53cdd2ab7b0a6e4891c2ad3f35c9ebb2c9289e4574afdabb225",
"sha256:32605136cc29f06e42d37cd31ddd7bc8c7c8c9543fdf6045cbf765f7d0addd38",
"sha256:6fc3c304e8f9abd83e399c8af09b9154e1a4a0b7a50fd34881c2fd9f29e7ad99",
"sha256:7fd12f2647fc8c298469ca22bae9615e3094bc6859df9e4eb72b64b912804297",
"sha256:7d603fc35fe21540db1112f38d891984fe6617bab14ab93f51549abe5e38ecb4"
]
},
"Metadata": {
"LastTagTime": "2024-05-16T01:03:16.298319883Z"
}
}
]
Layer ๋ฅผ ์์ฑํ๊ณ ์์ฑํ์ง ์๋ syntax
RUN, COPY, ADD, WORKDIR, USER
ENV, LABEL, ARG, EXPOSE
RUN: ์๋ก์ด ๋ ์ด์ด๋ฅผ ์์ฑํ๊ณ ๊ทธ ์์์ ๋ช ๋ น์ ์คํ
๋ฐ๋ผ์ &&๋ก ์ฌ๋ฌ๊ฐ์ ๋ช ๋ น์ด๋ฅผ ์ด์ด์ ํ๋์ ๋ ์ด์ด๊ฐ ์์ฑ๋๋๋ก ํ๋ค.
์์: RUN apt-get update && apt-get install -y python
COPY: ์๋ก์ด ํ์ผ ๋๋ ๋๋ ํ ๋ฆฌ๋ฅผ ์ถ๊ฐํ๊ณ ์๋ก์ด ๋ ์ด์ด๋ฅผ ์์ฑํ๋ค.
ADD: COPY์ ์ ์ฌํ๊ฒ ์๋ก์ด ํ์ผ ๋๋ ๋๋ ํ ๋ฆฌ๋ฅผ ์ถ๊ฐํ๊ณ ๋ ์ด์ด๋ฅผ ์์ฑํ๋ค.
USER: ์๋ก์ด ์ฌ์ฉ์๋ฅผ ์ค์ ํ๊ณ ๋ ์ด์ด๋ฅผ ์์ฑํ๋ค. ํด๋น ์ฌ์ฉ์์ UID์ GID๊ฐ ์๋ก์ด ๋ ์ด์ด์ ๋ฐ์.
๋ง์ฝ Dockerfile์ RUN, ADD, COPY, WORKDIR ๊ณผ ๊ฐ์ ๋ช ๋ น๋ฌธ์ด ์์ ๋๋ฉด, ๊ธฐ์กด ์บ์๊ฐ ๋ฌดํจํ ๋๊ณ , ์๋ก์ด ๋ ์ด์ด๋ฅผ ์์ฑํ๋ค.
Cached layers ์ Dockerfile ๋ช
๋ น์ด ์์
์ด๋ฏธ์ง ๋น๋๋ฅผ ์คํํ๋ฉด ์ด์ ๋น๋์ ๋ ์ด์ด๋ฅผ ์ฌ์ฌ์ฉํ๋ ค๊ณ ์๋ํ๋ค.
์ด๋ฏธ์ง์ ๋ ์ด์ด๊ฐ ๋ณ๊ฒฝ๋์ง ์์ ๊ฒฝ์ฐ, ๋น๋๋ ๋น๋ ์บ์์์ ๋ ์ด์ด๋ฅผ ๊ฐ์ ธ์จ๋ค.
๋ง์ง๋ง ๋น๋ ์ดํ ๋ ์ด์ด๊ฐ ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ ํด๋น ๋ ์ด์ด์ ๊ทธ ๋ค์ ์๋ ๋ชจ๋ ๋ ์ด์ด๋ฅผ ๋ค์ ๋น๋ํ๋ค.

์์ ์ด๋ฏธ์ง์์ ๋ณด๋ฏ์ด Dockerfile์ ๋ชจ๋ ํ๋ก์ ํธ ํ์ผ์ ์ปจํ ์ด๋์ ๋ณต์ฌ(COPY . .) ํ ๋ค์, ๋ค์ ๋จ๊ณ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ข ์์ฑ์ ๋ค์ด๋ก๋(RUN go mod download) ํ๋ค.
ํ๋ก์ ํธ์ ํ์ผ์ ๋ณ๊ฒฝํ๋ฉด, COPY ๋ ์ด์ด์ ๋ํ ์บ์๊ฐ ๋ฌดํจํ ๋๋ค.
๋ํ, ๊ทธ ๋ค์ ์ค๋ ๋ชจ๋ ๋ ์ด์ด์ ๋ํ ์บ์๋ ๋ฌดํจํ๋๋ค.
์ฌ๊ธฐ์ ๋์ปคํ์ผ ์ง์นจ์ ์์ ๋๋ฌธ์ ๋น๋๋ ํจํค์ง๊ฐ ๋ณ๊ฒฝ๋์ง ์์์์๋ Go ๋ชจ๋์ ๋ค์ ๋ค์ด๋ก๋ํด์ผ ํ๋ค.
Dockerfile ์ง์นจ ์์๋ฅผ ๋ณ๊ฒฝํ์ฌ ์ด๋ฌํ ์ค๋ณต์ ๋ฐฉ์งํ ์ ์๋ค.
์์ค ์ฝ๋๊ฐ ์ปจํ ์ด๋์ ๋ณต์ฌ๋๊ธฐ ์ ์ ์ข ์์ฑ ๋ค์ด๋ก๋ ๋ฐ ์ค์น๊ฐ ์ด๋ฃจ์ด์ง๋๋ก ์์๋ฅผ ๋ณ๊ฒฝํ๋ค. ์ด๋ ๊ฒ ํ๋ฉด, ์์ค ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ ๋์๋ ๋น๋๊ฐ ์บ์์์ ์ข ์์ฑ ๋ ์ด์ด๋ฅผ ์ฌ์ฌ์ฉํ ์ ์๋ค.
Go์ ๊ฒฝ์ฐ go.mod ์ go.sum์ด๋ผ๋ ๋ ๊ฐ์ ํ์ผ์ ์ฌ์ฉํ๋๋ฐ, ์ด๋ node์ package.json ๊ณผ package-lock.json ๊ณผ ๊ฐ๋ค.
์์๋ฅผ ์๋์ ๊ฐ์ด ๋ณ๊ฒฝํ๋ค.
COPY go.mod go.sum . ๋ฅผ ๋จผ์ ๋ฐฐ์นํ๊ณ RUN์ ํตํด ์ข ์์ฑ์ ์ค์นํ๋ค.
๊ทธ ํ์ COPY . . ๋ช ๋ น์ด๋ก ์์ค ์ฝ๋๋ฅผ ๋ณต์ฌํ๋ค.
FROM golang:1.21-alpine
WORKDIR /src
COPY go.mod go.sum .
RUN go mod download
COPY . .
RUN go build -o /bin/client ./cmd/client
RUN go build -o /bin/server ./cmd/server
ENTRYPOINT [ "/bin/server" ]
์ด์ ์์ค ์ฝ๋๋ฅผ ํธ์งํ๋ฉด ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ ๋ ๋น๋๊ฐ ๋งค๋ฒ ์ข ์์ฑ์ ๋ค์ด๋ก๋ํ์ง ์๋๋ค.

์ฐธ๊ณ ๋ฌธ์
Last updated