728x90
반응형
Dockerfile이란?
- Docker Image를 만들기 위한 설정 파일(스크립트)
- 배포판을 보완할 때 사용
- Docker는 Dockerfile에 나열된 명령문을 차례대로 수행하며DockerImage를 생성
구조
$ vim Dockerfile
FROM ubuntu:14.04
# app 디렉토리 생성
RUN mkdir -p /app
#Docker 이미지 내부에서 RUN, CMD, ENTRYPOINT의 명령이 실행될 디렉터리를 설정합니다.
WORKDIR /app
# 현재 디렉터리에 있는 파일들을 이미지 내부 /app 디렉터리에 추가함
ADD . /app
RUN apt-get update && apt-get install apache2
RUN service apache2 start
VOLUME ["/data", "/var/log/httpd"]
# 하기 포트를 외부로 노출합니다.
EXPOSE 80
# 쉘을 사용하지 않고 컨테이너가 시작되었을 때 logbackup 스크립트를 실행
CMD ["/app/log.backup.sh"]
FROM
- 기반이 되는 이미지 레이어
- <이미지 이름>:<태그> 형식으로 작성
- AS로 별칭 지정 가능
- ex) ubuntu:14.04
<aside> 🔖 해당 정보는 https://hub.docker.com/search?image_filter=official&q= 에서 찾으면 된다.
</aside>
- MAINTAINER
- 이미지를 생성한 개발자 정보
RUN
- 도커이미지가 생성되기 전에 수행할 쉘 명령어
- RUN 명령을 실행할 때 마다 레이어가 생성되고 캐시됨.
- 따라서 RUN 명령을 따로 실행하면 apt-get update는 다시 실행되지 않아서 최신 패키지를 설치할 수 없다.
- 위 처럼 RUN 명령 하나에 apt-get update와 install을 함께 실행 필수.
VOLUME
- VOLUME은 디렉터리의 내용을 컨테이너에 저장하지 않고 호스트에 저장하도록 설정합니다.
- 데이터 볼륨을 호스트의 특정 디렉터리와 연결하려면 docker run 명령에서 -v 옵션을 사용해야 합니다.
- ex) -v /root/data:/data
WORKDIR
- CMD에서 설정한 실행 파일이 실행될 디렉터리, 없으면 새로 생성 (작업 디렉토리)
- 작업 디렉토리를 지정하면 그 이후 명령어는 해당 디렉토리를 기준으로 동작
- cd+mkdir 명령어와 동일
EXPOSE
- 호스트와 연결할 포트 번호
- 호스트 머신과 컨테이너의 포트 매핑시에 사용
- 컨테이너 생성 시 -p 옵션의 컨테이너 포트 값으로 EXPOSE 값을 적어야 함
CMD
- 컨테이너가 시작되었을 때 실행할 실행 파일 또는 셸 스크립트
- 해당 명령어는 DockerFile내 1회만 가능
- CMD
- 컨테이너를 생성할 때만 실행됩니다. (docker run)
- 컨테이너 생성 시, 추가적인 명령어에 따라 설정한 명령어를 수정 가능
- ENTRYPOINT
- 컨테이너를 시작할 때마다 실행됩니다. (docker start)
- 컨테이너 시작 시, 추가적인 명령어 존재 여부와 상관 없이 무조건 실행
- 명령어 형식
- CMD ["<커맨드>", "<파라미터1>", "<파라미터2>"]
- CMD <커맨드> <파라미터1> <파라미터2>
- ENTRYPOINT ["<커맨드>", "<파라미터1>", "<파라미터2>"]
- ENTRYPOINT <커맨드> <파라미터1> <파라미터2>
- CMD
COPY
- 파일 복사
작성 된 Docker File로 Image 만들기
- $ docker build -t [만들고싶은 이미지 이름]
- Docker File 경로에서 입력
반응형