Dockerfile
Dockerfile은 docker에서 동작하는 컨테이너의 구성 정보를 프로비저닝(provisioning)한 텍스트 template 파일이다.
프로비저닝(provisioning)
사용자의 요구의 맞게 시스템 자원을 할당, 배치, 배포해 두었다가 필요 시 시스템을 즉시 사용할 수 있는 상태로 미리 준비해두는 것.
- Dockerfile은 컨테이너에 설치해야하는 패키지, 소스코드, 명령어, 환경 변수 설정 등을 기록한 하나의 파일이다.
- Docker 이미지는 컨테이너가 런타임 환경으로 동작하기 위해 필요한 특정 기술 또는 서비스를 사전에 구축한 환경이다 .
- Dockerfile 은 애플리케이션 배포에 필요한 컨테이너 인프라를 코드 형태로 정의한 파일이다 . 이러한 개념을 IaCInfrastructure as Code) 라고 한다.
- 원하는 환경의 Docker Image 개발에 필요한 Instration( 명령 ) 을 포함한 텍스트 파일
- docker build: Dockerfile 을 사용하여 docker image 생성 과정을 트리거하는 Docker CLI
- Image registry: 생성된 이미지를 public or private 하게 저장할 수 있는 영역
- Docker image 에 포함된 애플리케이션 인프라에 프로세스를 붙여 서비스로 배포되는 것을 컨테이너라고 한다.
Dockerfile 명령어
# FROM 명령어
FROM <image>
FROM <image>:<tag>
ex)
FROM node:12
FROM python:3.8-alpine
FROM mdock.daumkakao.io/eclipse-temurin:17-alpine as jre-build
Docker image는 base 이미지부터 시작해서 기존 이미지 위에 새로운 이미지를 중첩해서 여러 단계의 이미지 층을 쌓아가며 만들어 진다. 여기서 From 명령어는 base image를 지정해주기 위해서 사용되고 보통 Dockerfile 내에서 최상단에 위치한다.
# RUN 명령어
RUN ["<커맨드>", "<파라미터1>", "<파라미터2>"]
RUN <전체 커맨드>
ex)
- curl 도구 설치 : RUN apk add curl
- npm 패키지 설치 : RUN npm install --silent
- bin utils : RUN apk add binutils
RUN 명령어는 마치 shell 에서 커맨드를 실행하는 것처럼 이미지 빌드 과정에서 필요한 cmd를 실행하기 위해 사용된다. 보통 이미지 안에 특정 소프트웨어를 설치하기 위해 많이 사용된다. 보통 이미지 안에 특정 소프트웨어를 설치하기 위해 많이 사용된다.
# WORKDIR 명령어
WORKDIR <이동할 경로>
ex) /kaas/app로 작업 디렉토리 전환
WORKDIR /kass/app
WORKDIR 명령어는 shell의 cd 명령어처럼 컨테이너상에서 작업 디렉터리로 전환을 위해서 사용된다. WORKDIR 명령어로 작업 디렉터리를 전환하면 그 이후에 사용하는 모든 RUN, CMD, ENTYPOINT, COPY, ADD 명령어들은 해당 디렉터리를 기준으로 실행된다.
# ENV 명령어
ENV<키><값>
ENV<키>=<값>
ENV 명령어는 환경 변수를 설정하기 위해서 사용된다. ENV 명령어로 설정된 환경 변수는 이미지 빌드 시에도 사용되고, 해당 컨테이너에 돌아가는 application에도 접근 할 수 있다.
# COPY (layer)명령어
COPY <src>... <dest> COPY ["<src>",... "<dest>"]
COPY inex.html /usr/share/nginx/html
COPY ./runapp.py
COPY 명령어는 호스트 환경의 파일, 디렉터리를 이미지 안에 복사하는 경우에 작성한다. 단순한 복사 작업만 지원한다. 빌드 작업 디렉토리 외부의 파일은 COPY할 수 없다. 만약 복사가 필요한 명시적인 작업인 경우 ADD 보다는 COPY를 권장한다. COPY는 ADD 보다 더 예측 가능하고 오류가 덜 발생한다.
# ADD(layer) 명령어
ADD index.html /usr/share/nginx/html
ADD http://example.com/view/customer.tar.gz /workspace/data/
ADD website.tar.gz /var/www/html
호스트 환경의 파일, 디렉터리를 이미지 안에 복사하는 경우 뿐만 아니라, URL 주소에서 직접 다운로드하여 이미지에 넣을 수도 있다. 압축 파일(tar, tar.gx 등)인 경우에는 지정한 경로에 압축을 풀어서 추가한다.
단 , 빌드 작업 디렉터리의 외부의 파일은 ADD 할 수 없고, 디렉터리 추가 시에는 /로 끝나야한다.
# MAINTAINER 명령어
MAINTAINER DW <DW@smaple.com>
일반적으로 이미지를 빌드한 작성자 이름과 이메일을 작성한다.
#LABEL(layer) 명령어
LABEL purpose=’Nginx for webserver’
LABEL version=’1.0
LABEL description=’web service application using Nginx’
권장사항) LABEL purpose=’Nginx for webserver’ \
이미지의 작성 목적으로 버전, 타이틀, 설명, 라이선스 및 작성자 정보 등을 작성하여 이미지 관리에 도움을 준다. 하나 이상 작성 가능하다.
#CMD 명령어
[Shell 방식 ]
CMD apachectl -D FOREGROUND
[Exec 방식 ]
CMD [ˮ/usr/sbin/apachectlˮ, “-Dˮ, “FOREGROUNDˮ]
CMD [ˮnginxˮ, “-gˮ, “daemon off;ˮ]
CMD [ˮpythonˮ, “app.pyˮ]
생성된 이미지를 컨테이너로 실행할 때 실행되는 명령이고, ENTRYPOINT 명령문으로 지정 된 커맨드에 디폴트로 넘길 파리미터를 지정할 때 사용한다. 여러개의 CMD를 작성해도 마지 막 하나만 처리된다. 일반적으로 이미지가 컨테이너 실행 시 애플리케이션 데몬이 실행되도록 하는 경우 유용하다.
#ENTRYPOINT
동일 환경에 entrypoint.sh 쉘 스크립트를 이미지에 넣고(ADD) 실행 권한 설정(RUN) 후 컨 테이너 실행 시 entrypoint.sh를 실행(ENTRYPOINT)
….
ADD ./entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENTRYPOINT [”/bin/bash”,”/entrypoint.sh”]
CMD와 마찬가지로 생성된 이미지가 컨테이너로 실행될 때 사용되지만 다른 점은 컨테이너가 실행될 때 명령어 인자 값을 전달해여 실행한다.
#VOLUME
사용방법)
VOLUME /var/log
VOLUME /var/www/html
VOLUME /etc/nginx
## HOST OS의 Volume 기본 경로와 container 내부의 /project 연결
VOLUME [”/project”]
볼륨을 이미지 빌드에 미리 설정하는 경우 작성한다.
도커 컨테이너에서 사용된 파일과 디렉 터리는 컨테이너 삭제와 함께 사라진다. 따라서, 사용자 데이터의 보존과 지속성을 위해 볼륨 사용을 권장한다. VOLUME으로 지정된 컨테이너의 경로는 볼륨의 기본 경로인 /var/lib/docker와 자동으로 연결된다.
'OS > Docker' 카테고리의 다른 글
[Docker] 이미지 경량화 (1) | 2024.10.28 |
---|---|
[Docker] Dokerfile 빌드 (개발 & 배포 과정) (0) | 2024.10.28 |
[Docker] Web container log 유지 및 실시간 확인 Volume 구성 (0) | 2024.10.28 |
[Docker] 암시적 docker volumes (0) | 2024.10.28 |
[Docker] Proxy vs Reverse Proxy 차이 (0) | 2024.10.21 |