[ 도커파일이란? ]
- Docker상에서 실행시킬 컨테이너의 구성 정보(미들웨어, OS, 어플리케이션 등)을 기술하기 위한 파일
- 확장자는 필요없음
- Dockerfile이란 파일명 말고 다른 파일명으로 쓸 수 있지만 build시 명시해줘야 함
[ Docker File을 이용한 Sample ]
Dockerfile
# 베이스 이미지 설정
FROM ubuntu:latest
(or dighests로 지정: FROM ubuntu@sha256:se21f... )
# Nginx 설치
RUN apt-get update && apt-get install -y -q nginx
# 파일 복사
COPY index.html /usr/share/nginx/html
# Nginx 시작
CMD ["nginx", "-g", "daemon off;"]
도커 build
# 도커 파일 build
$ docker build -t webapp:1.0 /dockerfile_path
# 빌드된 이미지 실행
$ docker run -d --name "web_nginx" -p 80:80 webapp
[ 도커파일 작성 명령어 ]
RUN
# Shell 형식으로 bin/sh 를 거쳐서 실행
RUN apt-get install -y nginx
# Shell을 경유하지 않고 실행
RUN ["/bin/bash","-c","apt-get install -y nginx"]
CMD
이미지를 바탕으로 생성된 컨테이너 안에서 명령을 실행
하나만 지정 가능하며, 여러 개 지정 시 마지막 명령만 유효
# 베이스 이미지 설정
FROM ubuntu:16.04
# Nginx설치
RUN apt-get -y install nginx
# 포트 지정
EXPOSE 80
# 서버 실행
CMD nginx -g 'daemon off;' [or] CMD ["nginx", "-g", "daemon off;"]
ENTRYPOINT
docker container run 명령을 실행했을 때 실행
# Docker file
# 베이스 이미지 설정
FROM ubuntu:16.04
# top 실행
ENTRYPOINT ["top"]
CMD ["-d", "10"]
실행
# CMD 명령에서 지정한 10초 간격
$ docker run -it --name sample sample-app
# 인자를 다시 주어 2초 간격으로 갱신
$ docker run -it --name sample sample-app -d 2
ONBUILD
ONBUILD 구문을 포함한 Dockerfile이 다음 빌드에서
베이스 이미지로 설정 하였을 때, ONBUILD로 지정한 명령어를 설정
1.베이스 이미지 작성(Dockerfile.base)
# 베이스 이미지 설정
FROM ubuntu:16.04
# Nginx 설치
RUN apt-get -y update && apt-get -y upgrade
RUN apt-get -y install nginx
# 포트 지정
EXPOSE 80
# 웹 콘텐츠 배치
ONBUILD ADD website.tar /var/www/html
# Nginx 실행
CMD nginx -g "daemon off;'
2. 베이스 이미지 빌드
$ docker build -t web-base -f Dockerfile.base .
3. 본 이미지 작성
4. 본 이미지 빌드
$ docker build -t web-app .
$ docker run -d -p 80:80 web-app
# 이후 website.tar로 구성된 html, css 화면이 나오는지 확인
STOPSIGNAL
컨테이너를 종료할 때 송신하는 시그널 설정
HEALTHCHECK
컨테이너 안에 프로세스 정상 작동 확인
#5분마다 가용 중인 웹서버를 5초 안에 표시할 수 있는지 확인
HEALTHCHECK --interval=5m(체크간격) --timeout=5s (체크타임아웃) CMD curl -f http://localhost/ || exit1
# 헬스 체크 결과는 docker contain inspect로 확인
ENV
key value형태로 환경변수 설정
# Docker file
ENV myName = "42 fire user" \
myOrder = book\ desck\ chair \
지정한 환경변수 변경시
WORKDIR
작업용 디렉토리 지정, 없으면 새로 생성
# Docker file
ENV DIRPATH second
WORKDIR /first/$DIRPATH
USER
도커파일의 명령어를 실행 할 사용자 지정
# Docker file
RUN ["adduser", "42F"]
RUN ["whoami"] # root
USER 42F
RUN ["whoami"] #42F
EXPOSE
실행 중인 컨테이너의 공개 포트 지정
# Docker file
EXPOSE 8080 # docker run -p 로도 설정 가능
ARG
도커파일 안에서 사용할 변수를 정의
# Docker file
ARG MYNAME = "42F"
RUN echo $MYNAME
실행 시
$ docker build . --build-arg # MYNAME = "42F"
$ docker build . -build-arg MYNAME=70F # MYNAME이 정의 되었어도 "70F"로 변수 재정의 됨
ADD
빌드 시, 이미지에 파일이나 디렉토리를 추가
# Docker file
ADD host.txt /docker_dir/
# 파일명 패턴 사용
ADD ho* /docker_dir/
ADD hos?.txt /docker_dir # ? : 임의의 한 문자
# WORKDIR 명령어와 같이 사용 (경로 : /docker_dir/web/ ) cd역할
WORKDIR /docker_dir
ADD host.html /web
# 원격 파일 추가
ADD http://www.site.com/index.php /docekr_dir/web/
# 퍼미션이 600인 파일이 추가, URL을 통해 다운로드시 인증이 필요한 경우면 wget, curl을 사용
VOLUME
이미지에 볼륨을 추가
# Docker file
VOLUME /Mount PATH