Dockerfile
이미지를 생성하는 방법
- 아무것도 존재하지 않는 이미지(우분투, CentOS)로 컨테이너를 생성
- 애플리케이션을 위한 환경을 설치하고 소스코드 등을 복사해 잘 동작하는 것을 확인
- 컨테이너를 이미지로 커밋(commit)
Dockerfile
- 위와 같은 일련의 과정을 손쉽게 기록하고 수행할 수 있는 빌드 명령어를 제공
- 컨테이너에 설치해야 하는 패키지, 소스코드, 명령어, 셸 스크립트 등을 하나의 파일에 기록
- 빌드 명령어는 Dockerfile을 읽어 이미지 생성
- Dockerfile을 작성하여 빌드 및 배포 자동화 가능
Dockerfile 작성
- 컨테이너에서 수행해야 할 작업을 명시
- 예시 Dockerfile
$ vi Dockerfile
FROM ubuntu:14.04
MAINTAINER alicek106
LABEL "purpose"="practice"
RUN apt-get update
RUN apt-get install apache2 -y
ADD test.html /var/www/html
WORKDIR /var/www/html
RUN ["/bin/bash", "-c", "echo hello >> test2.html"]
EXPOSE 80
CMD apachectl -DFOREGROUND
- Dockfile 수행 목록
- 이미지에 아파치 웹 서버 설치
- 로컬에 있는 test.html 파일을 웹 서버로 접근할 수 있는 컨테이너의 디렉터리인 /var/www/html에 복사
Dockerfile 명령어
FROM
- 생성할 이미지의 베이스가 될 이미지를 의미
- 반드시 한 번 이상 입력
MAINTAINER
LABEL
- 이미지에 메타데이터 추가
- 메타데이터는 키:값의 형태로 저장
RUN
- 이미지를 만들기 위해 컨테이너 내부에서 명령어 실행
- 이미지 빌드시 별도의 입력을 받아야 하는 RUN이 있다면 오류로 간주하고 빌드 종료
ADD
- 파일을 이미지에 추가
- 추가하는 파일은 Dockerfile이 위치한 디렉터리인 컨텍스트에서 가져온다
- JSON 배열 형태로 사용 가능
- [”추가할 파일 이름”, “컨테이너에 추가될 위치”]
- 추가할 파일명 여러개 지정 가능
- 배열 마지막 원소가 컨테이너에 추가될 위치
WORKDIR
- 명령어를 실행할 디렉터리
- 배시 셸에서 cd 명령어를 입력하는 것과 동일
EXPOSE
- Dockerfile의 빌드로 생성된 이미지에서 노출할 포트를 설정
- 반드시 이 포트가 호스트의 포트와 바인딩되는 것은 아니다
CMD
- 컨테이너가 시작될 때마다 실행할 명령어를 설정
- Dockerfile에서 한 번만 사용 가능
- JSON 배열 형태로 입력 가능
- [”실행 가능한 파일”, “명령줄 인자 1”, “명령줄 인자 2”]