Dockerfile 작성

songtofu·2022년 4월 15일
0

Docker

목록 보기
4/6

1. Dockerfile?

  • DockerImage를 생성하기 위한 스크립트(설정 파일)
  • 여러가지 명령어를 토대로 Dockerfile을 작성 후 빌드 -> Docker는 Dockerfile에 나열된 명령문을 차례대로 수행하며 DockerImage를 생성한다.

장점

  1. 이미지가 어떻게 만들어졌는지 기록
    • 어떠한 애플리케이션을 담고 있는 이미지가 설치 되기 위한 과정과 중간에 어떠한 과정을 수행해야하는지 알아야하는 경우에 편리함.
  2. 배포에 용이
    • 어떠한 이미지를 배포할 때, 용량이 큰 이미지 파일 자체를 배포하기보다 그 이미지를 만들 수 있는 스크립트인 Dockerfile만을 배포하면 매우 편리.
  3. 컨테이너(이미지)가 특정 행동을 수행하도록 한다.
    • 컨테이너 환경에서 애플리케이션을 개발하다 보면, 특정 행동을 취하도록 하는 컨테이너(이미지)를 만들어야 할 때가 있다. (?????)

2. Dockerfile 작성

  • 실제 파일의 이름을 Dockerfile로 해야함.
FROM alpine:3.10

RUN \
      apt-get update - y&& \
      apt-get upgrade -y

ENTRYPOINT ["echo", "hello"]

FROM

  • 새로운 이미지를 생성할 때 기반으로 사용할 이미지를 지정.

RUN

  • 새로운 레이어에서 명령어를 실행하고, 새로운 이미지를 생성한다.
  • RUN 명령을 실행할 때 마다 레이어가 생성되고 캐시된다. 따라서, RUN 명령을 따로 실행하면 apt-get update는 다시 실행되지 않아서 최신 패키지를 설치할 수 없다. RUN 명령 하나에 apt-get update와 upgrade를 함께 실행 해주자.

WORKDIR

  • 작업 디렉토리를 지정한다. 해당 디렉토리가 없으면 새로 생성한다. 작업 디렉토리를 지정함녀 그 이후 명령어는 해당 디렉토리를 기준으로 동작한다.

COPY

  • 파일이나 폴더를 이미지에 복사한다.

ENV

  • 이미지에서 사용할 환경 변수 값을 지정한다.

ENTRYPOINT vs CMD

  • 컨테이너를 시작할 때 실행할 명령어를 입력 (= 컨테이너가 무슨 일을 하는지 결정하는 최종 단계를 정의하는 명령)

  • 그렇기 때문에 Dockerfile의 가장 마지막 부분 쯤에 ENTRYPOINT또는 CMD를 선언

  • ENTRYPOINT : 해당 컨테이너가 수행될 때 반드시 ENTRYPOINT에서 지정한 명령을 수행하도록 지정.
    1. exec 형식 : ENTRYPOINT ["실행명령어", "인자1", "인자2", ... ]
    2. shell 형식 : 실행 명령어를 문자열로 입력
    ENTRYPOINT echo hello
    (= /bin/sh -c 'echo hello')

  • CMD : 컨테이너를 실행할 때 인자값을 주게 되면 Dockerfile에 지정된 CMD값을 대신 하여 지정한 인자값으로 변경하여 실행

  • 예시

    	```Dockerfile
    	FROM alpine:3.10
    
    	ENTRYPOINT ["/bin/echo", "Hello"]
    	CMD ["world"]
    	```

    docker run --name <container-name> <image-name>
    결과 : Hello world
    docker run --name <container-name> <image-name> ME
    결과 : Hello ME

profile
읽으면 머리에 안들어와서 직접 쓰는 중. 잘못된 부분 지적 대환영

0개의 댓글