Docker Image를 build하기 위한 파일이다.
FROM: 베이스 이미지를 선택
FROM ubuntu:22.04MAINTAINER: Dockerfile을 작성한 사람의 정보를 입력
MAINTAINER naebaecaem <nbcamp@spartacoding.co>LABEL명령어를 사용하여 메타데이터를 추가하는 방식으로 대체되었다.LABEL: 이미지에 메타데이터를 추가
LABEL purpose='nginx test'maintainer: 이미지의 작성자나 유지보수자의 이름과 연락처 정보.version: 이미지의 버전.description: 이미지의 설명.license: 이미지가 사용하는 라이센스 정보. RUN: 이미지를 생성하는 동안 실행할 명령어를 입력, 이미지에 명령을 실행하여 파일을 추가하거나 삭제
RUN apt update && apt upgrade -y && apt autoremove && apt autocleanRUN apt install openjdk-21-jdkCMD: Command, 컨테이너를 생성할 때, 실행할 명령어를 입력
CMD ["nginx", "-g", "daemon off;"]ENTRYPOINT: 컨테이너 시작할 때, 실행할 명령어를 입력
ENTRYPOINT ["npm", "start"]ENV: 환경 변수를 설정
ENV STAGE stagingENV JAVA_HOME /usr/lib/jvm/java-8-oracleWORKDIR: 작업 디렉토리(=위킹 디렉토리=Working directory)를 지정
WORKDIR /appCOPY: 파일을 이미지에 복사
COPY index.html /usr/share/nginx/htmlRUN ["useradd", "user"]
USER user
RUN ["/bin/bash, "-c", "ls"]
EXPOSE 80EXPOSE 443 docker build -t my-nginx:latest .
docker buildx build -t my-nginx:latest .를 추가로 실행해주면 된다. buildx : Docker의 Image build 기능을 확장하는 도구이다. Docker BuildKit을 기반으로 하며, 여러 기능을 제공한다.-t는 tag를 의미, .은 현재 디렉토리를 의미한다.docker run -d -p 80:80 my-nginx:latest
docker stop my-nginx
Dockerfile 명령어를 사용한 Dockerfile 예제1
이는 Dockerfile은 Ubuntu 최신 버전을 기반으로 Nginx를 설치하고, index.html 파일을 Nginx의 HTML 디렉토리에 복사하는 예시이다.
FROM ubuntu:latest
MAINTAINER Your Name <your-email@example.com>
RUN apt-get update && apt-get install -y nginx
COPY index.html /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
Dockerfile 명령어를 사용한 Dockerfile 예제2
# Python 3.11 기반 이미지
# Python 3.11이 설치된 Linux 기반의 환경을 포함하고 있음
FROM python:3.11
# pipenv 설치
# pipenv는 Python 프로젝트의 종속성을 관리하는 도구
RUN pip install pipenv
# 작업 디렉터리 설정
# /app 디렉터리로 작업 디렉터리를 설정. 이후의 명령들은 모두 이 디렉터리에서 실행
WORKDIR /app
# 현재 디렉터리(로컬 컴퓨터)의 모든 파일을 Docker 이미지의 /app 디렉터리로 복사
# 이는 프로젝트 파일을 Docker 컨테이너에 포함시키는 단계
ADD . /app/
# pipenv로 Python 3.11 환경에서 가상 환경 생성
# pipfile에 정의된 종속성을 설치
RUN pipenv --python 3.11
# pipenv 환경 안에서 poetry를 설치
# poetry는 또 다른 Python 패키지 관리 도구로, 프로젝트 관리 및 종속성 관리를 도와줌
RUN pipenv run pip install poetry
# pipenv로 종속성 설치
# pipenv sync는 Pipfile.lock에 정의된 정확한 종속성 버전을 설치(종속성들 맞춰줌)
RUN pipenv sync
# pipenv 환경 내에서 certifi 패키지를 설치
# certifi는 SSL 인증서 번들을 제공하는 Python 패키지
RUN pipenv run pip install certifi
# 빌드 인자 STAGE 정의
# Docker 빌드 시 지정될 수 있다
ARG STAGE
# .env 파일에 환경 변수 추가
# PYTHONPATH=.는 현재 디렉터리를 Python 모듈 경로에 추가하는 설정
RUN sh -c 'echo "STAGE=$STAGE" > .env'
RUN sh -c 'echo "PYTHONPATH=." >> .env'
# 스크립트 실행 권한 설정
# ./scripts/run.sh와 ./scripts/run-worker.sh 스크립트 파일에 실행 권한을 부여
RUN chmod +x ./scripts/run.sh
RUN chmod +x ./scripts/run-worker.sh
# 컨테이너 시작 시 기본적 실행할 명령어 설정
# 컨테이너가 시작될 때 ./scripts/run.sh 스크립트를 실행하도록 지정
CMD ["./scripts/run.sh"]
정리 : 위 Dockerfile은 Python 3.11 환경을 설정하고, pipenv와 poetry를 사용하여 종속성을 관리한다. 그 후 필요한 패키지를 설치하고, .env 파일을 생성하여 환경 변수를 설정하며, 실행할 스크립트에 실행 권한을 부여한다. 마지막으로, 컨테이너가 실행될 때 run.sh 스크립트를 실행하도록 설정한다.
Dockerfile 명령어를 사용한 Dockerfile 예제3
# 기본
이미지: Ubuntu 22.04
FROM ubuntu:22.04
# Docker 이미지의 메인테이너를 설정 (build 시 주석으로 사용)
MAINTAINER your-name <your-email@example.com>
# 목적 라벨 (웹 서버용)
# 이 이미지는 "웹 서버" 용도로 사용됨을 라벨로 표시
LABEL purpose=Web Server
# nginx 설치: 패키지 목록 업데이트 후 nginx 설치
# apt-get을 통해 Nginx 패키지를 설치
RUN apt-get update && apt-get install -y nginx
# nginx 설정 파일을 컨테이너에 복사
# 로컬의 nginx.conf를 컨테이너의 설정 디렉토리로 복사
COPY nginx.conf /etc/nginx/nginx.conf
# nginx 실행 (백그라운드 실행 방지)
# 로컬의 nginx.conf를 컨테이너의 설정 디렉토리로 복사
CMD ["nginx", "-g", "daemon off;"]
# nginx의 사용자 및 워커 프로세스 수 설정
user nginx;
worker_processes 1;
# 에러 로그 설정(로그 파일 및 로그 레벨 정의)
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
# 워커 프로세스 당 최대 연결 수 설정
worker_connections 1024;
}
http {
# 기본 MIME 타입 설정
include /etc/nginx/mime.types;
default_type application/octet-stream;
# 로그의 출력 형식 정의
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
# 접근 로그 파일 위치 및 형식 설정
access_log /var/log/nginx/access.log main;
# sendfile을 통해 효율적인 파일 전송을 설정
sendfile on;
# Keep-Alive 시간 설정
# 클라이언트와 서버 간 연결 유지 시간 설정
keepalive_timeout 65;
# Gzip 압축 설정
# gzip 압축을 활성화하여 데이터 전송 효율을 높임
gzip on;
gzip_disable "msie6";
# 추가 설정 파일 포함 (디폴트 설정을 추가할 때 사용)
# 추가적인 Nginx 설정 파일들을 포함시켜서 설정을 확장 가능
include /etc/nginx/conf.d/*.conf;
}