시그마 삽질==six 시그마

Dockerfile 본문

프로그래밍/Docker

Dockerfile

Ethan Matthew Hunt 2020. 5. 6. 23:56

도커파일은  도커 인프라구성 관리를 하는 파일임

 

도커파일에는 베이스가 되는 이미지에 각종 미들웨어를 설치 및 설정하고 애플리케이션 실행기반의 모든 구성 정보를 기술

 

도커파일은 명령 인수 라는 기본 서식을 사용. 명령은 대문자가 관례

 

FROM 베이스 이미지 지정 VOLUME 볼륨 마운트
RUN 명령 실행 USER 사용자 지정
CMD 컨테이너 실행명령 WORKDIR 작업 디렉토리
LABEL 라벨설정 ARG 도커파일 안의 변수
EXPOSE 포트 익스포트 ONBUILD 빌드 완료 후 실행되는 명령
ENV 환경변수 STOPSIGNAL 시스템 콜 시그널 설정
ADD 파일/디렉토리 추가 HEALTHCHECK 컨테이너의 헬스 체크
COPY 파일 복사 SHELL 기본 쉘 설정
ENTRYPOINT 컨테이너 실행 명령    

 

 

1. From

 

도커파일은 어떤 Docker 이미지로부터 생성할지 정보를 기술하는것부터 시작함.

이것을 베이스 이미지라 부름

 

From [이미지명]

From [이미지명] :[태그명]

 

 

2. RUN

 

FROM에서 지정한 베이스 이미지에 대해 애플리케이션/미들웨어를 설치 및 설정시 RUN 사용

 

1)Shell 형식 기술

 

명령의 지정을 쉘에서 실행하는 형식으로 기술

RUN apt-get install -y nginx

 

2)Exec 형식 기술

 

shell형식으로 명령 기술시 /bin/sh에서 실행되지만 Exer 형식으로 기술시 쉘 경유 없이 직접 실행됨

또다른 쉘 사용원할시 실행원하는 명령 지정해서 사용가능

RUN ["apt-get", "install", "-y" ,"nginx"]

RUN ["/bin/bash","-c","apt-get install -y nginx"]

 

3. CMD 

 

RUN명령은 이미지를 작성하기 위해 실행하는 명령을 기술함

이미지를 바탕으로 생성된 컨테이너 안에서 명령을 실행하려면 CMD 명령사용

도커파일에서 한개의 CMD 명령만 사용가능 여러개 기정시 마지막 명령만 유효

 

1)Shell 형식 기술

 

CMD nginx -g  'daemon off;'

 

2)Exec 형식 기술

 

CMD ["nginx","-g","daemon off;"]

 

4. ENTRYPOINT

 

ENTRYPOINT명령에서 지정한 명령은 도커파일에서 빌드한 이미지로부터 도커컨테이너를 시작하기 때문에

docker container run 명령 실행시 실행됨

 

 

1)Shell 형식 기술

 

ENTRYPOINT nginx -g  'daemon off;'

 

2)Exec 형식 기술

 

ENTRYPOINT ["nginx","-g","daemon off;"]

 

 

CMD vs ENTRYPOINT

CMD는 docker container run 명령 실행시 만약 run 뒤에 신규 명령을 주면 도커파일의 명령을 무시하고 신규 명령을 우선실행함.

ENTRYPOINT는 그러지 않음. 

 

5. ONBUILD

 

자신의  도커파일로 생성한 이미지를  다른 도커파일에서 베이스 이미지로 사용할때 실행하고 싶은 명령을 기술

 

6. ENV 

 

도커파일 안에서 환경변수를 설정하고 싶을때 ENV사용함

 

ENV [key] [value]

 

1. key value형으로 지정

ENV myName "Hong gildong"

ENV   myCar sonata k5 k7

 

2. key=value형으로 지정

ENV myName="Hong gildong" \

  myCar=sonata \k5 \k7

 

 

 

7. WORKDIR

 

도커파일에서 정의한 명령을 실행하기 위한 작업용 디렉토리를 지정

WORKDIR은 RUN,CMD,ENTRYPOINT,COPY,ADD 명령을위한 작업용 디렉토리 지정하는것임

 

ENV DIRPATH /first

ENV DIRNAME second

WORKDIR $DIRPATH/$DIRNAME

RUN ["pwd"]

 

8. USER

 

이미지 실행이나 도커파일의 RUN,CMD,ENTRYPOINT명령을 실행하기 위한 사용자 지정시 USER명령 사용

 

USER aaa

RUN touch index.html

 

USER bbb

RUN touch hello.txt

 

 

9. LABEL

 

이미지에 버전 정보나 작성자 정보, 코멘트 등과 같은 정보를 제공할 때는 LABEL 명령을 사용함

 

LABEL  <키> <값>

LABEL  <키>=<값>

 

 

10. EXPOSE

 

컨테이너 공개 포트 번호를 지정할때 EXPOSE 사용

 

EXPOSE 8080

 

11. ADD

 

이미지에 호스트상의 파일이나 디렉토리 추가할때 사용

압축해제도 해줌( copy와의 차이)

ADD <호스트의 파일경로> <도커 이미지파일경로>

ADD ["<호스트의 파일경로>" "<도커 이미지 파일경로>"]

 

ADD host.html /docker_dir/

ADD hos* /docker_dir/

ADD xxx.tar.gz /docker_dir/

 

 

12. COPY

 

이미지에 호스트상의 파일이나 디렉토리를 복사할때 COPY 사용

COPY <호스트의 파일경로> <도커 이미지파일경로>

COPY ["<호스트의 파일경로>" "<도커 이미지 파일경로>"]

 

13. VOLUME

 

볼륨은 데이터를 컨테이너에 저장하지 않고 호스트에 저장하도록 설정

 

 

 

14. 도커파일로부터 도커 이미지 만들기

 

docker build -t [생성할 이미지명]:[태그명] [Dockerfile 위치]

 

1)docker build -t hello-world:1.0 .

 

Dockerfile 내용

 

From centos:centos7

 

베이스 이미지와  hello-world:1.0 두개가 생성(동일 이미지)

 

 

 

2)docker build -t nginxtest .

 

Dockerfile 내용

 

From ubuntu:latest

RUN apt-get update && apt-get install -y -q nginx

COPY index.html /usr/share/nginx/html/

CMD ["nginx","-g","daemon off;"]

 

 

step1<step2<step3<step4 이미지 포함

 

nginxtest속에는 ubuntu이미지가 들어가 있음

 

'프로그래밍 > Docker' 카테고리의 다른 글

docker-compose(docker compose)  (0) 2020.08.06
docker 명령어  (0) 2020.05.05
도커란 무엇인가?  (0) 2020.05.05
Comments