Dockerfile이란
작성한 Dockerfile 스크립트를 기반으로 docker 이미지를 생성해주는 역할을 한다.
Dockerfile 작성
FROM
•
베이스 이미지 지정 명령. Dockerfile 필수 작성 명령어.
FROM ubuntu:18.04
Bash
복사
LABEL
•
key=value 형식으로 메타데이터 주입.
•
제작자, 버전, 설명, 작성일 등등
LABEL author="minsoftk@gmail.com"
Bash
복사
COPY
•
호스트 파일들을 이미지 내부 디렉토리로 복사한다.
# minsoftk의 파일들을 이미지 내부 디렉토리로 복사한다.
COPY ./minsoftk /var/www/html/
Bash
복사
CMD
•
쉘을 직접 지정해줘서 명령을 전달
•
-c 옵션은 쉘 명령을 터미널상에서 받지 않고, 인자로 받겠다는 의미
•
Dockerfile에 한가지만 설정해야함.
RUN
•
docker는 이미지 생성시, 각 단계를 layer로 나누어 작성함.
◦
이를 통해 특정 단계 변경시, 전체 이미지를 다시 다운로드 받지 않음.
•
일종의 Layer를 만들 수 있는 명령.
RUN apt-get update # 패키지 정보 업데이트
RUN apt-get install -y apache2 apt-utils # 중간에 Y/N를 전부 Y로 선택
Bash
복사
ENTRYPOINT
•
docker run에 CMD 명령에 덮어씌워지지 않는 반드시 실행해야 하는 명령을 기입할 때 사용.
ENTRYPOINT ["usr/sbin/apache2ctl", "-D", "FOREGROUND"]
Bash
복사
Dockerfile 작성 예시
FROM ubuntu:18.04
LABEL maintainer="minsoftk@gmail.com"
COPY ./minsoftk /var/www/html/
CMD ["bin/sh", "-c", "echo", "hello"]
RUN apt-get update
RUN apt-get install -y apache2 apt-utils
ENTRYPOINT ["usr/sbin/apache2ctl", "-D", "FOREGROUND"]
# docker 컨테이너의 특정 포트를 외부에 오픈
# docker run -p 로도 설정. 해당 포트를 호스트 PC 포트와 맵핑까지 함.
# 반면에 EXPOSE는 맵핑을 시키지는 않음.
EXPOSE 80
# 컨테이너 내의 환경변수 설정
# 설정한 환경변수는 RUN, CMD, ENTRYPOINT에서 사용 가능
ENV ROOT_PWD=1234
# RUN, CMD, ENTRYPOINT 명령이 실행될 디렉토리 설정
WORKDIR /usr/local/apache2/htdocs
Bash
복사
Dockerfile 실행 명령어
docker build {옵션} {Dockerfile의 경로}
# 옵션
# -t: 이미지 이름 설정. 기본값은 lastest.
docker build -t minsoftk:0.0.1 .
# -f: 기본값은 Dockerfile로 찾지만, 다른 파일명으로 이미지를 빌드할 경우 필요한 옵션.
docker build -t minsoftk:0.0.1 -f Dockerfile_v2 .
# --pull: 이미지 생성시마다 최신 이미지를 다운로드 받는 옵션.
docker build -t minsoftk:0.0.1 -f Dockerfile_v2 --pull=true .
Bash
복사
Dockerfile 컨테이너, 이미지 조사 명령어
# Layer에 대한 정보를 확인할 수 있다.
docker history {컨테이너ID or 이름}
# 컨테이너에서 특정 파일을 호스트 PC로 가져오기
docker cp {컨테이너ID or 이름}:{컨테이너의 파일 경로} {가져오려는 경로 입력}
# 반대로 쓰면 컨테이너에 파일을 넣을 수 있다.
docker cp {넣을 파일의 경로 입력} {컨테이너ID or 이름}:{컨테이너의 파일 경로}
Bash
복사