본문 바로가기
요즘공부

[도커&쿠버네티스] 교육 3일차_ Dockerfile ONBUILD, ADD 등

by 게으른 피글렛 2025. 3. 13.
반응형

1. Dockerfile ONBUILD

ONBUILD : 부모 이미지에서 ONBUILD 명령어를 정의해 놓으면, 자식 이미지를 빌드할 때 그 명령어들이 자동으로 실행

 

ONBUILD 없이 실행 > 에러발생 > ONBUILD 넣어서 실행 > 에러 없음

 

도커파일을 생성하여 실행

Ubuntu 22.04 기반으로 Nginx 웹 서버를 설치  > src/website.tar  파일을 /var/www/html 에 붙여넣기

vagrant@ubuntu2204:~/work$ vi Dockerfile.base
vagrant@ubuntu2204:~/work$ cat Dockerfile.base
FROM ubuntu:22.04
RUN apt-get -y update
RUN apt-get -y install nginx
EXPOSE 8080

ADD src/website.tar /var/www/html
CMD ["nginx","-g","demon off:"]

 

도커파일로 도커이미지 생성

#현재위치에 도커이미지생성
docker build -t nginx:base -f Dockerfile.base .

 

=> 에러 발생 : 원인 src/website.tar 파일이 없음

 

 

 

ONBUILD 명령어 추가

vagrant@ubuntu2204:~/work$ vi Dockerfile.base
vagrant@ubuntu2204:~/work$ cat Dockerfile.base
FROM ubuntu:22.04
RUN apt-get -y update
RUN apt-get -y install nginx
EXPOSE 8080

ONBUILD ADD src/website.tar /var/www/html
CMD ["nginx","-g","demon off:"]

 

src/website.tar 파일이 없지만실행이 됨

 

이미지 파일 생성됨

ADD website.tar /var/www/html 명령어를 건너뛰고 실행됨

vagrant@ubuntu2204:~/work$ docker build -t nginx:base -f Dockerfile.base .

vagrant@ubuntu2204:~/work$ docker images nginx:base
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
nginx        base      fed50e9df3c3   33 seconds ago   193MB

 

 

 

vagrant@ubuntu2204:~/work$ docker image inspect nginx:base

 

 

 

2. Dockerfile ADD

COPY : 단순 복사

ADD : *.tar, *.gz 같은 압축 파일을 자동으로 해제

 

 

src/website.tar 파일을 생성하고 다시 테스트

vagrant@ubuntu2204:~/work$ mkdir src
vagrant@ubuntu2204:~/work$ cd src
vagrant@ubuntu2204:~/work/src$ touch test.html a.html b.html a.jpg b.jpg
vagrant@ubuntu2204:~/work/src$ echo "my nginx web application" > inxex.html
vagrant@ubuntu2204:~/work/src$ ls
a.html  a.jpg  b.html  b.jpg  greet.txt  inxex.html  test.html
vagrant@ubuntu2204:~/work/src$ tar -cf website.tar *
vagrant@ubuntu2204:~/work/src$ ls
a.html  a.jpg  b.html  b.jpg  greet.txt  inxex.html  test.html  website.tar

 

Dockerfile로 테스트

ADD 명령어 포함하여 생성

 

vagrant@ubuntu2204:~/work$ vi Dockerfile.base
vagrant@ubuntu2204:~/work$ cat Dockerfile.base
FROM ubuntu:22.04
RUN apt-get -y update
RUN apt-get -y install nginx
EXPOSE 8080

ADD src/website.tar /var/www/html
CMD ["nginx","-g","demon off:"]

 

vagrant@ubuntu2204:~/work$ docker build -t nginx:base -f Dockerfile.base .
#파일을 만들었기 때문에 실행이됨

vagrant@ubuntu2204:~/work$ docker images nginx:base
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
nginx        base      d526f5adf18d   14 seconds ago   193MB

 

결과

ADD 명령어의 파일이 압축이 해제되어있는 것을 확인 할 수 있음

vagrant@ubuntu2204:~/work$ docker run -it nginx:base /bin/bash

#기존에 생성했던 파일이 압축이 풀려서 설치되어있는 것을 확인할 수 있음
root@d29532992073:/# cd var/www/html
root@d29532992073:/var/www/html# ls
a.html  b.html  greet.txt                inxex.html
a.jpg   b.jpg   index.nginx-debian.html  test.html

root@d29532992073:/var/www/html# cat greet.txt
Hello Docker

 

 

3. Dockerfile SCRETCH

SCRETCH : 최소의 이미지 생성

 

 

https://hub.docker.com/_/scratch

 

스크래치 관련 설명글

 

vagrant@ubuntu2204:~/work$ vi Dockerfile
vagrant@ubuntu2204:~/work$ cat Dockerfile
FROM scratch
COPY hello /
CMD ["/hello"]

(참고로 테스트시 hello.c 파일을 만들고 실행해야함)

vagrant@ubuntu2204:~/work$ docker build -t scratch .

 

내용 테스트를 해봤는데 scratch가 생성이 된다 용량은 0

하지만 설명처럼 실행이 되지는 않음.

왜......... 만드는거지?

 

반응형