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 ์๋๋ ๋นจ๋ผ์ง๋๋ค.