반응형
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
하지만 설명처럼 실행이 되지는 않음.
왜......... 만드는거지?
반응형
'요즘공부' 카테고리의 다른 글
[도커&쿠버네티스] 교육 3일차_ Docker Hub Upload (0) | 2025.03.17 |
---|---|
[도커&쿠버네티스] 교육 3일차_ Dockerfile 실습(저장용량) (0) | 2025.03.14 |
[도커&쿠버네티스] 교육 2일차_ Dockerfile 생성 (0) | 2025.03.09 |
[도커&쿠버네티스] 교육 2일차_인터넷이 차단된 환경에서 도커이미지 다운로드 및 설치 방법 (0) | 2025.03.07 |
[도커&쿠버네티스] 교육 2일차_도커 이미지 생성(일반,*.tar)/컨테이너 생성 (0) | 2025.03.06 |