docker image build
๋Dockerfile
๋ก ๋ถํฐ ์ด๋ฏธ์ง๋ฅผ ๋ง๋๋ ๋ช ๋ น ์ ๋๋ค.
๋์ปค ์ด๋ฏธ์ง ๋น๋ (docker image build)
docker image build [OPTIONS] PATH | URL | - # Build an image from a Dockerfile # -t, --tag list : ์ด๋ฏธ์ง ์ด๋ฆ๊ณผ ํ๊ทธ๋ฅผ ์ง์ ํ๋ค # -f, --file string : ๋์ปคํ์ผ์ ์ด๋ฆ์ ์ง์ ํ๋ค. ๊ธฐ๋ณธ๊ฐ์ "PATH" ์ ์กด์ฌํ๋ Dockerfile # --build-arg list : ๋น๋ ๋ ๋ ๋ณ์๊ฐ ์ธํ ๋๋ค. (Set build-time variables) # ex) ํ์ฌ ๋๋ ํฐ๋ฆฌ์ ์๋ "Dockerfile"๋ฅผ "hyuckang_image:1.0" ์ด๋ฏธ์ง๋ก ๋น๋ํ๋ค. docker build -t hyuckang_image:1.0 . # ex) ํ์ฌ ๋๋ ํฐ๋ฆฌ์ ์๋ "hyuckang_Docerfile"๋ฅผ hyuckang_image:2.0 ์ด๋ฏธ์ง๋ก ๋น๋ํ๋ค. sudo docker build -t hyuckang_image:2.0 -f hyuckang_Dockerfile . # ex) ํ์ฌ ๋๋ ํฐ๋ฆฌ์ ์๋ "Dockerfile" ๋ฅผ "hyuckang_image:3.0" ์ด๋ฏธ์ง๋ก ๋น๋ํ ๋ # Docekr "ARG ver"์ ๊ฐ์ด 3.0์ผ๋ก ๋ฎ์ด ์์ด์ง๋ค. sudo docker build -t hyuckang_image:3.0 --build-arg ver=3.0 .
Docker can build images automatically by reading the instructions from a
Dockerfile
.
๋์ปค๋ DockerFile์ ์๋ ๋ช ๋ น์ ์ฝ์ด์ ์๋์ผ๋ก ์ด๋ฏธ์ง๋ฅผ ๋น๋ ํ ์ ์์ต๋๋ค.
FROM
: ๊ธฐ๋ณธ ๋ ์ด์ด๊ฐ ๋๋ ๋ฒ ์ด์ค ์ด๋ฏธ์ง ์ง์ ํฉ๋๋ค.FROM ubuntu:20.04
RUN
: ์ด๋ฏธ์ง๊ฐ ๋น๋ ๋ ๋ ์คํ๋๋ ๋ช ๋ น์ด๋ฉฐ, ์คํ ๊ฒฐ๊ณผ๋ ๋ ์ด์ด ๋จ์๋ก ์์ด๊ฒ ๋ฉ๋๋ค.# RUN <command> RUN apt-get update -y # RUN ["executable", "param1", "param2"] RUN ["pwd"]
EXPOSE
: ์ปจํ ์ด๋ ์คํ ๋ ์ฌ์ฉํ ํฌํธ๋ฅผ ๋ช ์ํฉ๋๋ค.(ํ์ง๋ง ์ค์ ๋ก๋ ํฌํธ๋ฅผ ์คํํ์ง๋ ์์ต๋๋ค. ์ด๋ ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ ์ฌ๋๊ณผ ์ปจํ ์ด๋๋ฅผ ์คํํ ์ฌ๋์ฌ์ด์ ์ด๋ค ํฌํธ๋ฅผ ์ด์ง์ ๋ํ ์ผ์ข ์ ๋ฌธ์ ์ญํ ์ ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ปจํ ์ด๋๋ฅผ ๊ตฌ๋ ํ ๋ -p ์ต์ ์ผ๋ก ํฌํธ๋ฅผ ์ง์ ํด์ฃผ์ด์ผ ํฉ๋๋ค.)
EXPOSE 80
CMD
: ์ปจํ ์ด๋๊ฐ run ๋๊ฑฐ๋ start ๋ ๊ฒฝ์ฐ ์คํ๋๋ ๊ธฐ๋ณธ ๋ช ๋ น์ด๋ฉฐ, ๋ฎ์ด์์ธ์(Override) ์์ต๋๋ค.(์ฌ์ฉ์๊ฐ ๋ฌด์ ํ ์ ์์ต๋๋ค.)์ด ๋ช ๋ น์ Dockerfile์ 1๊ฐ๋ง ์์ ์ ์์ต๋๋ค. ๋ง์ฝ 2๊ฐ ์ด์์ด๋ผ๋ฉด ๋ง์ง๋ง CMD๊ฐ ์คํ ๋ฉ๋๋ค.
CMD ["apachectl", "-D", "FOREGROUND"]
ENTRYPOINT
: ์ด๋ฏธ์ง๋ฅผ ์คํ ๊ฐ๋ฅํ ๋ฐ์ด๋๋ฆฌ๋ก ๋ง๋ค์ด ์ฃผ๋ ๋ช ๋ น์ ๋๋ค. CMD์ ๋ค๋ฅด๊ฒ ๋ฎ์ด์์์ง์ง ์์ต๋๋ค. (์ฌ์ฉ์๊ฐ ๋ฌด์ ํ ์ ์์ต๋๋ค.)ENTRYPOINT ["top"]
ENV
: ์ด๋ฏธ์ง์์ ์ฌ์ฉ๋๋ ํ๊ฒฝ๋ณ์๋ฅผ ์ง์ ํฉ๋๋ค.ENV version 0.1
ARG
: ๋์ปค ํ์ผ์ด ๋น๋ ๋ ๋ ์ฌ์ฉ ํ ์ ์๋ ๋งค๊ฐ๋ณ์ ์ ๋๋ค. โbuild-agr= ๋ก ์ ๋ฌ ํ ์ ์์ต๋๋ค. ARG my_version=1.0
WORKDIR
: ์ด๋ฏธ์ง์ ์์ ๋๋ ํฐ๋ฆฌ๋ฅผ ์ง์ ํฉ๋๋ค. ๊ฒฝ๋ก๊ฐ ์กด์ฌํ์ง ์์ผ๋ฉด ๊ฒฝ๋ก๊ฐ ์์ฑ ๋ฉ๋๋ค.WORKDIR /var/www
COPY
: ๋ก์ปฌ ํธ์คํธ์ ์กด์ฌํ๋ ํ์ผ์ ์ด๋ฏธ์ง ์์ผ๋ก ๋ณต์ฌํฉ๋๋ค.COPY /home/hyuckang/index.html /var/www/html
ADD
: ๋ก์ปฌํธ์คํธ์ ์กด์ฌํ๋ ํ์ผ์ ๋ณต์ฌํ๊ฑฐ๋, ์๊ฒฉ URL ํ์ผ์ ์ถ๊ฐํฉ๋๋ค.ADD test.txt /home/hyuckang
ONBUILD
: ๋น๋๊ฐ ์๋ฃ๋ ์ด๋ฏธ์ง๊ฐ ๋ค๋ฅธ ์ด๋ฏธ์ง์ ๋ฒ ์ด์ค ์ด๋ฏธ์ง๊ฐ ๋ ๋ ์คํ๋ฉ๋๋ค.์ด๋ ๊ธฐ์กด์ ๋น๋๋ ์ด๋ฏธ์ง๋ฅผ ํ ํ๋ฆฟ์ฒ๋ผ ๋ง๋ค๊ณ , ์๋ก์ด ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค๋ ์ ์ฉํฉ๋๋ค.
ONBUILD RUN apt-get update
HEALTHCHECK
: ์ปจํ ์ด๋์ ํฌ์ค์ฒดํฌ๋ฅผ ์ง์ํฉ๋๋ค.๋์ปค ํ์ผ์๋ 1๊ฐ์ HEALTHCHECK ๋ช ๋ น์ด ์์ ์ ์์ต๋๋ค. 2๊ฐ ์ด์์ด ์กด์ฌ ํ๋ค๋ฉด ๋ง์ง๋ง HEALTHCHECK๋ง ์ ์ฉ๋ฉ๋๋ค.
ํฌ์ค์ฒดํฌ์ ๊ฒฐ๊ณผ๋ docker ps์ docker inspect๋ก ํ์ธ ํ ์ ์์ต๋๋ค.
# --interval=DURATION (default: 30s) # --timeout=DURATION (default: 30s) # --start-period=DURATION (default: 0s) # --retries=N (default: 3) HEALTHCHECK --interval=5m --timeout=3s CMD curl -f http://localhost/ || exit 1
USER
: RUN, CMD, ENTRYPOINT ๋ฑ์ ๋ช ๋ น์ ์ํํ ์ ์ ๋ฅผ ์ง์ ํฉ๋๋ค.LABEL
: ์ด๋ฏธ์ง์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํฉ๋๋ค.LABEL maintainer="hyuckang15@gmail.com"
MAINTAINER
: ์ด๋ฏธ์ง ์์ฑ์ ํ๋๋ฅผ ์ค์ ํฉ๋๋ค. (์ด์ ๋ ์ด์ ์ฌ์ฉํ์ง ์์)SHELL
: ๊ธฐ๋ณธ ์์ ์ฌ์ ์ ํฉ๋๋ค.
'๐ Container & K8S > Docker' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Docker] ๋์ปค ๋ณผ๋ฅจ๊ณผ ๋ณผ๋ฅจ ๋ช ๋ น์ด (0) | 2021.09.25 |
---|---|
[Docker] ๋์ปค ๋ ์ง์คํธ๋ฆฌ์ ๋์ปค ํ๋ธ (0) | 2021.09.22 |
[Docker] ๋์ปค ์ด๋ฏธ์ง ๋ช ๋ น์ด ์ ๋ฆฌ (0) | 2021.08.29 |
[Docker] ๋์ปค ์ปจํ ์ด๋ ๋ช ๋ น์ด ์ ๋ฆฌ (0) | 2021.08.22 |
[Docker] ๋์ปค๋? ๋์ปค์ ์ปจํ ์ด๋ ์ ๋ฆฌ (0) | 2021.08.22 |