1. Dockerfile?
- DockerImage를 생성하기 위한 스크립트(설정 파일)
- 여러가지 명령어를 토대로 Dockerfile을 작성 후 빌드 -> Docker는 Dockerfile에 나열된 명령문을 차례대로 수행하며 DockerImage를 생성한다.
장점
- 이미지가 어떻게 만들어졌는지 기록
- 어떠한 애플리케이션을 담고 있는 이미지가 설치 되기 위한 과정과 중간에 어떠한 과정을 수행해야하는지 알아야하는 경우에 편리함.
- 배포에 용이
- 어떠한 이미지를 배포할 때, 용량이 큰 이미지 파일 자체를 배포하기보다 그 이미지를 만들 수 있는 스크립트인 Dockerfile만을 배포하면 매우 편리.
- 컨테이너(이미지)가 특정 행동을 수행하도록 한다.
- 컨테이너 환경에서 애플리케이션을 개발하다 보면, 특정 행동을 취하도록 하는 컨테이너(이미지)를 만들어야 할 때가 있다. (?????)
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