- 명령어 순서를 변경하는 것은 빌드 과정에서 캐시를 효율적으로 활용하기 위해서입니다. - Docker에서 각 명령어를 별도의 레이어에 저장하고 이전에 빌드한 적이 있는 레이어는 캐시에서 가져옵니다.
💡 사용예시
- 변경이 자주 발생하는 'COPY..' 명령어를 'COPY go.mod go.sum.'와 'COPY..'로 분리하고, 'RUN go mod download' 명령어를 두 명령어 사이에 배치하여 의존성 다운로드를 캐시 할 수 있게 했습니다. - 이렇게 하면, 코드가 변경되었을 때 의존성 다운로드 단계를 건너뛸 수 있어 빌드 속도를 향상할 수 있습니다.
# syntax=docker/dockerfile:1
FROM golang:1.21-alpine
WORKDIR /src
- COPY . .
+ COPY go.mod go.sum .
RUN go mod download
+ COPY . .
RUN go build -o /bin/client ./cmd/client
RUN go build -o /bin/server ./cmd/server
ENTRYPOINT [ "/bin/server" ]
- Dockerfile은 필요한 패키지, 환경 변수, 파일 복사 등의 작업을 단계별로 기술하여 이미지를 구성합니다. - 이러한 구성을 위해 간단하고 직관적인 문법을 사용합니다. 각각의 명령어는 컨테이너 이미지의 계층으로 변환이 됩니다.
https://docs.docker.com/engine/reference/builder/
명령어
설명
ADD
로컬 또는 원격 파일 및 디렉토리 추가
ARG
빌드 시간 변수 사용
CMD
기본 명령어 지정
COPY
파일 및 디렉토리 복사
ENTRYPOINT
기본 실행 가능한 파일 지정
ENV
환경 변수 설정
EXPOSE
애플리케이션이 수신 대기 중인 포트 설명
FROM
기본 이미지에서 새로운 빌드 스테이지 생성
HEALTHCHECK
컨테이너의 시작 시 건강 상태 확인
LABEL
이미지에 메타데이터 추가
MAINTAINER
이미지의 작성자 지정
ONBUILD
빌드 시 이미지가 사용될 때의 지침 지정
RUN
빌드 명령어 실행
SHELL
이미지의 기본 셸 설정
STOPSIGNAL
컨테이너 종료 시스템 콜 신호 지정
USER
사용자 및 그룹 ID 설정
VOLUME
볼륨 마운트 생성
WORKDIR
작업 디렉토리 변경
4) Nginx
💡 Nginx
- 웹 서버, 리버스 프록시, 로드 밸런서, 메일 프록시 및 HTTP 캐시를 포함한 여러 기능을 제공하는 오픈 소스 소프트웨어입니다.
- 이는 동시에 수천 개의 연결을 처리할 수 있도록 설계되었으며, 이는 효율적인 이벤트 드리븐 아키텍처를 사용함으로써 가능합니다. - 정적 컨텐츠를 서비스하는 데 사용되곤 하며, 이는 빠른 응답 시간과 낮은 메모리 사용량으로 인해 가능합니다. 또한, 리버스 프록시로서의 역할을 수행하여 백엔드 서버의 부하를 분산시키고, 캐싱, SSL 종료, HTTP/2 처리 등의 기능을 제공합니다.
5) Dockerfile + Nginx 사용예시 : 구성하기
💡 Dockerfile + Nginx 구성하기
- 해당 부분에서는 Dockerfile을 통해 Nginx를 구성하고 이미지를 생성 및 컨테이너를 올려서 구성한 html 파일을 띄우는 것을 목적으로 합니다.
1. 프로젝트 구조 구성
💡 프로젝트 구조 구성
파일 및 디렉터리
설명
Dockerfile
해당 파일을 실행시켜 레이어를 구성하고 Nginx 이미지를 받아 재구성에 사용할 파일입니다.
config
설정 파일을 관리하는 디렉터리입니다
config/nginx.cof
Nginx를 실행하기 위한 환경설정이 구성된 파일입니다.
html
html 파일들을 관리하는 디렉터리입니다.
html/index.html
Nginx를 통해 실행될 파일입니다.
2. Docker 파일 생성
💡 Docker 파일 생성 1. FROM nginx - 기존 Docker hub에 있는 컨테이너 이미지 중 Nginx 이미지를 기반으로 새롭게 구성할 Docker 이미지를 생성합니다.
2. COPY ./config/nginx.conf /etc/nginx/conf.d/nginx.conf - COPY A B A를 B로 복사합니다. - 새로운 Nginx 설정 파일(내가 구성한 설정 파일)을 Nginx 이미지 경로 /etc/nginx/conf.d/nginx.conf에 복사합니다.