빌드 완료 후에 실행되는 명령(ONBUILD)
ONBUILD 명령은 그 다음 빌드에서 실행할 명령을 이미지 안에 지정하기 위한 명령임
예를 들어 Dockerfile에 ONBUILD 명령을 사용하여 어떤 명령을 실행하도록 설정하여 이미지를 작성하고, 그 이미지를 다른 Dockerfile에서 베이스 이미지로 설정하여 빌드했을 때 ONBUILD 명령에서 지정한 명령을 실행시킬 수 있음

위와 같은 순서로 명령어가 사용됨 ONBUILD 명령을 통해 명령의 실행 타이밍을 늦출 수 있음
ONBUILD 명령의 구문은 다음과 같음
ONBUILD [실행하고 싶은 명령]
ONBUID 명령은 자신의 Dockerfile로 부터 생성한 이미지를 베이스 이미지로 한 다른 Dockerfile을 빌드할 때 실행하고 싶은 명령을 기술함. 예를 들어 ONBUILD 명령을 사용하여 웹 어플리케이션의 실행 환경을 구축할 수 있음
보통은 웹 시스템을 구축할 때 OS 설치 및 환경 설정이나 웹 서버 설치 및 각종 플러그인 설치 등과 같은 인프라 환경 구축과 같은 부분을 베이스 이미지로 작성하고 이때 ONBUILD 명령으로 이미지 안에 개발한 프로그램을 전개하는 명령(ADD or COPY 명령 등)을 지정함
어플리케이션 개발자는 어플리케이션의 구축 부분을 코딩하고 이미 작성이 끝난 베이스 이미지를 바탕으로 한 이미지를 작성함. 이 이미지 안에서 개발된 어플리케이션이 전개되어서 실행됨
ONBUILD를 이용해 아래와 같은 방법으로 웹 서버 개발이 가능함
1. STEP1 베이스 이미지 작성
먼저 Ubuntu 18.04를 베이스 이미지로 하여 웹 서버의 실행 환경을 작성함
RUN 명령으로 Nginx를 설치하고, 데몬을 실행하도록 CMD 명령을 지정함.
그리고 웹 콘텐츠를 /var/www/nginx/html 아래에 배치하는 명령을 ONBUILD 명령으로 지정함
아래와 같은 Dockerfile.base를 이용함
# 베이스 이미지 설정
FROM ubuntu:18.04
# Nginx 설치
RUN apt-get -y update && apt-get -y upgrade
RUN apt-get install -y nginx
# 포트 지정
EXPORT 80
# 웹 콘텐츠 배치
ONBUILD ADD webdite.tar /usr/share/nginx/html/
# Nginx 실행
CMD ["nginx", "-g", "daemon off;"]
이 Dockerfile.base를 docker build에 -f 옵션을 주어서 빌드함
docker build -t web-base -f Dockerfile.base .
2. STEP2 웹 콘텐츠 개발
웹 서버를 작동시키기 위한 인프라 실행 환경이 완성 되었으므로 그 다음은 웹 컨텐츠를 구축함
그리고 HTML, CSS, 그림같은 모든 콘텐츠를 website라는 이름으로 해서 tar로 압축함.
3. STEP3 웹 서버용 이미지 작성
웹 서버 실행용 이미지 작성 STEP1에서 작성한 베이스 이미지를 FROM 명령으로 지정함
아래와 같은 Dockerfile을 작성함
# Docker 이미지 취득
FROM web-base
이 Dockerfile을 빌드하면 ONBUILD에서 지정한 웹 콘텐츠를 이미지에 추가하는 처리가 실행되므로
Dockerfile과 website.tar는 같은 경로에 위치하게 한 후 아래와 같이 빌드함
docker build -t onbuild-test .
4. STEP4 웹 서버용 컨테이너 시작
STEP1에서 웹서버 작동을 위한 실행 환경과 STEP2에서 웹 콘텐츠가 전개되었으므로 컨테이너 시작을 함
docker container run -d -p 80:80 onbuild-test
그리고 이미지에 ONBUILD 명령이 설정되어 있는지 아닌 지는 docker image inspect 명령으로 확인 가능함
'ComputerScience > Docker' 카테고리의 다른 글
[Docker] 14. Dockerfile 환경 및 네트워크 설정 (0) | 2019.05.22 |
---|---|
[Docker] 13. Dockerfile 명령 및 데몬 실행 (3) (0) | 2019.05.22 |
[Docker] 11. Dockerfile 명령 및 데몬 실행 (1) (0) | 2019.05.16 |
[Docker] 10. Dockerfile을 사용한 구성 관리 (0) | 2019.05.14 |
[Docker] 9. Docker 이미지 생성 (0) | 2019.05.04 |