Search

Docker File

대분류
DevOps/Tool
소분류
Docker
설명
Dockerfile 설정, 구조
유형
구조
사용법
최종 편집 일시
2024/10/27 15:42
생성 일시
2024/01/23 04:35
14 more properties

Dockerfile이란?

Docker Image를 만들기 위한 설정 파일(스크립트)
배포판을 보완할 때 사용
Docker는 Dockerfile에 나열된 명령문을 차례대로 수행하며DockerImage를 생성

구조

$ vim Dockerfile RUN apt-get update 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"]
YAML
복사

FROM

기반이 되는 이미지 레이어
<이미지 이름>:<태그> 형식으로 작성
AS로 별칭 지정 가능
ex) ubuntu:14.04
해당 정보는 https://hub.docker.com/search?image_filter=official&q= 에서 찾으면 된다.
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>

COPY

파일 복사
COPY hello.html /var/www/html # hello.html파일을 이미지의 /var/www/html 경로에 복사
YAML
복사
작성 된 Docker File로 Image 만들기
$ docker build -t [만들고싶은 이미지 이름]
Docker File 경로에서 입력

예제 (아파치)

# server image는 ubunutu 18.04를 사용 FROM ubuntu:18.04 # image가 올라갔을 때 수행되는 명령어들 # -y 옵션을 넣어서 무조건 설치가 가능하도록 한다. RUN \ apt-get update && \ apt-get install -y apache2 # 파일 복사 COPY hello.html /var/www/html # 작업공간 이동 (=cd) WORKDIR /var/www/html # apache가 기본적으로 80포트를 사용하기 때문에 expose를 이용해 apache server로 접근이 가능하도록 한다. EXPOSE 80 # 컨테이너가 생성 된 이후에 내부의 아파치 서버는 항상 실행중인 상태로 만들어준다. # apachectl을 foreground(즉, deamon)상태로 돌아가도록 한다. CMD ["apachectl", "-D", "FOREGROUND"]
YAML
복사