07B. FROM
07B. FROM ๊ด๋ จ

FROM์ ์ด๋ค ์ด๋ฏธ์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ด๋ฏธ์ง๋ฅผ ์์ฑํ ์ง ์ค์ ํฉ๋๋ค. Dockerfile๋ก ์ด๋ฏธ์ง๋ฅผ ์์ฑํ ๋๋ ํญ์ ๊ธฐ์กด์ ์๋ ์ด๋ฏธ์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ฑํ๊ธฐ ๋๋ฌธ์ FROM์ ๋ฐ๋์ ์ค์ ํด์ผ ํฉ๋๋ค.
๋ค์๊ณผ ๊ฐ์ด ์ด๋ฏธ์ง ์ด๋ฆ์ ์ค์ ํ๊ฑฐ๋ ์ด๋ฏธ์ง ์ด๋ฆ๊ณผ ํ๊ทธ๋ฅผ ํจ๊ป ์ค์ ํ ์๋ ์์ต๋๋ค. ์ด๋ฏธ์ง ์ด๋ฆ๋ง ์ค์ ํ๋ฉด latest๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ํ, ์ด๋ฏธ์ง ์ด๋ฆ์ ์๋ตํ ์ ์์ต๋๋ค.
.
Dockerfile
FROM ubuntu
.
Dockerfile
FROM ubuntu:22.04
FROM <์ด๋ฏธ์ง> ๋๋ FROM <์ด๋ฏธ์ง>:<ํ๊ทธ> ํ์์
๋๋ค.
์์์ ์ค๋ช
ํ ๊ฒ์ฒ๋ผ FROM์ ํญ์ ์ค์ ํด์ผ ํ๊ณ ๋งจ ์ฒ์์ ์์ผ ํฉ๋๋ค. ์ด๋ฏธ์ง๋ฅผ ์์ฑํ ๋ FROM์ ์ค์ ํ ์ด๋ฏธ์ง๊ฐ ๋ก์ปฌ์ ์์ผ๋ฉด ๋ฐ๋ก ์ฌ์ฉํ๊ณ , ์์ผ๋ฉด Docker Hub์์ ๋ฐ์์ต๋๋ค.
.Dockerfile ํ์ผ ํ๋์ FROM์ ์ฌ๋ฌ ๊ฐ ์ค์ ํ ์๋ ์์ต๋๋ค. FROM์ ๋ ๊ฐ ์ค์ ํ๋ค๋ฉด ์ด๋ฏธ์ง๊ฐ ๋ ๊ฐ ์์ฑ๋ฉ๋๋ค. --tag ์ต์
์ผ๋ก ์ด๋ฏธ์ง ์ด๋ฆ์ ์ค์ ํ๋ค๋ฉด ๋งจ ๋ง์ง๋ง FROM์ ์ ์ฉ๋ฉ๋๋ค.
ํ์ง๋ง, ์ด๋ฐ ๊ฒฝ์ฐ๋ณด๋ค๋ ๋น๋์ ํ์ผ ํฌํจ์ ๋ถ๋ฆฌํ๊ณ ์ ํ ๋ FROM์ ์ฌ๋ฌ ๊ฐ ์ฌ์ฉํฉ๋๋ค.
์๋ฅผ ๋ค์ด C ์ธ์ด ์์ค ํ์ผ์ ์ปดํ์ผํ ๋ค ์์ค ํ์ผ์ ์ ์ธํ๊ณ ์คํ ํ์ผ๋ง ์ด๋ฏธ์ง์ ๋ฃ์ด๋ณด๊ฒ ์ต๋๋ค.
๋จผ์ hello ๋๋ ํฐ๋ฆฌ๋ฅผ ์์ฑํ ๋ค hello ๋๋ ํฐ๋ฆฌ๋ก ์ด๋ํฉ๋๋ค.
mkdir hello
cd hello
๋ค์ ๋ด์ฉ์ hello.c๋ก ์ ์ฅํฉ๋๋ค.
.hello.c
#include <stdio.h>
int main() {
printf("Hello Docker\n");
return >0;
}
๊ทธ๋ฆฌ๊ณ ๋ค์ ๋ด์ฉ์ Dockerfile๋ก ์ ์ฅํฉ๋๋ค.
.
Dockerfile
FROM ubuntu:22.04 AS builder
RUN apt update
RUN apt install -y gcc
WORKDIR /tmp
ADD hello.c ./
RUN gcc hello.c -static -o hello
FROM alpine:3.16.2
WORKDIR /tmp
COPY /tmp/hello ./
CMD ["/tmp/hello"]
ubunbu:22.04 ์ด๋ฏธ์ง์ gcc๋ฅผ ์ค์นํ ๋ค hello.c ํ์ผ์ ์ปดํ์ผํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ alpine:3.16.2 ์ด๋ฏธ์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก hello ์คํ ํ์ผ๋ง ์ถ๊ฐํ์ฌ ์ด๋ฏธ์ง๋ฅผ ์์ฑํฉ๋๋ค.
FROM ubuntu:22.04 AS builder:ubuntu:22.04์ด๋ฏธ์ง๋ฅผ builder๋ก ์ฝ์นญ์ ์ง์ ํฉ๋๋ค.COPY --from=builder /tmp/hello ./: COPY๋ก ํ์ผ์ ๋ณต์ฌํ ๋--from์ต์ ์ ์ง์ ํ๋ฉด ๋ก์ปฌ์ด ์๋ ํด๋น ์ด๋ฏธ์ง์์ ํ์ผ์ ๋ณต์ฌํด์ต๋๋ค. ์ฌ๊ธฐ์๋--from=builder์ด๋ฏ๋กFROM ubuntu:22.04 AS builder์ builder์์ ํ์ผ์ ๋ณต์ฌํด์ต๋๋ค. ์ฆ, builder์ ์๋/tmp/hello๋ฅผ./๋ก ๋ณต์ฌํฉ๋๋ค.
docker build ๋ช
๋ น์ผ๋ก ์ด๋ฏธ์ง๋ฅผ ์์ฑํฉ๋๋ค.
sudo docker build --tag hello:0.1 .
์ด์ alpine:3.16.2 ์ด๋ฏธ์ง๋ฅผ ์ด์ฉํด์ ๋ง๋ hello:0.1 ์ด๋ฏธ์ง๋ฅผ ์ปจํ
์ด๋๋ก ์์ฑํฉ๋๋ค.
sudo docker run --rm hello:0.1
Hello Docker
Hello Docker๊ฐ ์ถ๋ ฅ๋๋ฉด ์คํ ํ์ผ์ด ์ ์์ ์ผ๋ก ์คํ๋ ๊ฒ์ ๋๋ค.
์ด๋ ๊ฒ ๋ ๋ฒ์ ๊ณผ์ ์ ๊ฑฐ์น๋ ์ด์ ๋ ์ต์ข
์ด๋ฏธ์ง ํ์ผ์ ๊ฒฝ๋ํํ๊ธฐ ์ํด์์
๋๋ค. ์ฒ์ FROM ubuntu:22.04 AS builder์์๋ apt๋ก gcc๋ฅผ ์ค์นํ๊ธฐ ๋๋ฌธ์ ์ด๋ฏธ์ง์ ํฌ๊ธฐ๊ฐ ์ปค์ง๋๋ค. ๊ทธ๋ฆฌ๊ณ ์คํ์ ํ์์๋ hello.c ์์ค ํ์ผ๋ ํฌํจ๋ฉ๋๋ค. ์ฌ๊ธฐ์๋ ๋ค์ FROM alpine:3.16.2๋ฅผ ์ฌ์ฉํ์ฌ COPY --from=builder /tmp/hello ./๋ก hello ์คํ ํ์ผ๋ง ๋ณต์ฌํ๋ฏ๋ก ์ด๋ฏธ์ง์ ํฌ๊ธฐ๊ฐ ๋งค์ฐ ์์์ง๋๋ค.
์ฆ, ์ด๋ฏธ์ง์ ํฌ๊ธฐ๊ฐ ์์์ง๋ฉด ์ด๋ฏธ์ง ์ ์ฅ ๊ณต๊ฐ๋ ์๋ ์ ์๊ณ push, pull ์๋๋ ๋นจ๋ผ์ง๋๋ค.