2022년 3월 6일 일요일

[ Docker ] 도커파일

[ 도커파일이란? ]

  • 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. 본 이미지  작성

From web-base

4. 본 이미지 빌드

$ docker build -t web-app .

$ docker run -d -p 80:80 web-app

# 이후 website.tar로 구성된 html, css 화면이 나오는지 확인


STOPSIGNAL

컨테이너를 종료할 때 송신하는 시그널 설정

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 \

지정한 환경변수 변경시

docker run --env를 통해


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




댓글 없음:

댓글 쓰기