Skip to main content

07B. FROM

About 1 minDevOpsDockercrashcoursepyrasis.comdockerdevops

07B. FROM ๊ด€๋ จ

๋ชฉ์ฐจ

์–ธ์ œ๋‚˜ ์ตœ์‹  Docker

7์žฅ - 2. FROM
์–ธ์ œ๋‚˜ ์ตœ์‹  Docker

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 --from=builder /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 ์†๋„๋„ ๋นจ๋ผ์ง‘๋‹ˆ๋‹ค.


์ด์ฐฌํฌ (MarkiiimarK)
Never Stop Learning.