7.1 기본 이미지
기본 이미지는 Docker 이미지 생성에서 중요한 역할을 해. 왜냐면, 이게 빌드의 시작점을 제공하고 애플리케이션이 실행될 환경을 정의하기 때문이야. 올바른 기본 이미지를 선택하고 설정하는 건 최종 이미지의 성능, 크기, 보안에 크게 영향을 줄 수 있어. 이 강의에서는 Docker의 기본 이미지를 선택하고 설정하는 방법에 대해 알아볼게.
기본 이미지(또는 베이스 이미지) — Docker 이미지를 새 Docker 이미지를 만드는 데 사용되는 초기 레이어를 말해. 여기에는 최소한의 운영 체제, 필요한 도구와 라이브러리 또는 아무것도 포함되지 않은 (scratch-이미지) 경우도 있어. 기본 이미지를 선택하면 기본적으로 컨테이너에서 어떤 리소스와 패키지를 사용할 수 있는지가 결정돼.
기본 이미지 선택
기본 이미지를 선택할 때 몇 가지 요소를 고려해야 해:
- 이미지 크기: 더 작은 이미지는 더 빨리 다운로드되고 디스크 공간도 덜 차지하며, 애플리케이션 배포를 더 빠르게 만들 수 있어.
- 지원 및 업데이트: 정기적으로 업데이트되는 공식 이미지를 사용하는 게 더 높은 수준의 보안, 취약점 수정, 안정성을 보장해.
- 호환성: 기본 이미지는 애플리케이션이 올바르게 작동하는 데 필요한 라이브러리와 종속성을 포함해야 해.
인기 있는 기본 이미지
1. Alpine Linux
약 5MB 크기의 매우 가벼운 이미지야. 최소 운영 체제가 필요한 애플리케이션에 완벽히 적합해. 하지만 Alpine에는 많은 기본 라이브러리가 없기 때문에 일부 애플리케이션에서는 추가 설정이 필요할 수 있음을 개발자가 고려해야 해.
FROM alpine:3.12
2. Debian/Ubuntu
더 많은 도구와 라이브러리를 포함한 완전한 기능을 갖춘 이미지야. 더 복잡한 애플리케이션, 더 풍부한 환경이 필요하거나 잘 알려진 표준 Linux 라이브러리가 필요한 경우에 적합해.
FROM ubuntu:20.04
3. Official Language Images
프로그래밍 언어용 공식 이미지, 예를 들어 Node.js, Python, Ruby 등이 있어. 이 이미지는 해당 언어에서 애플리케이션 개발과 실행에 필요한 환경을 이미 포함하고 있어서 설정이 간단해져.
FROM node:14
7.2 기본 이미지 설정
기본 이미지를 선택한 후, 애플리케이션 요구사항에 맞게 설정해야 해. 설정에는 필요한 패키지 설치, 애플리케이션 파일 복사, 그리고 환경 설정이 포함돼.
예제: Alpine Linux 기반 기본 이미지 설정
# 기본 이미지로 Alpine Linux 사용
FROM alpine:3.12
# 필요한 패키지 설치
RUN apk add --no-cache python3 py3-pip
# 작업 디렉토리 설정
WORKDIR /app
# 애플리케이션 파일 복사
COPY . .
# 종속성 설치
RUN pip3 install -r requirements.txt
# 애플리케이션 실행 명령어 지정
CMD ["python3", "app.py"]
이 예제에선 alpine:3.12 기본 이미지를 사용하고, 필요한 패키지를 설치하고, 애플리케이션 파일을 복사하고, 종속성을 설치해. 마지막 명령어 alpine:3.12는 애플리케이션 실행 방법을 지정해.
예제: Ubuntu 기반 기본 이미지 설정
# 기본 이미지로 Ubuntu 사용
FROM ubuntu:20.04
# 패키지 업데이트 및 필요한 패키지 설치
RUN apt-get update && apt-get install -y \
python3 \
python3-pip \
&& rm -rf /var/lib/apt/lists/*
# 작업 디렉토리 설정
WORKDIR /app
# 애플리케이션 파일 복사
COPY . .
# 종속성 설치
RUN pip3 install -r requirements.txt
# 애플리케이션 실행 명령어 지정
CMD ["python3", "app.py"]
이 Dockerfile은 ubuntu:20.04 이미지를 사용하고, Python과 pip를 설치해. 그런 다음, 애플리케이션 파일을 복사하고 종속성을 설치하는데, 이전 예제와 비슷해.
7.3 베스트 프랙티스
기본 이미지를 올바르게 선택하고 설정하는 방법:
1. 최소 이미지를 선택하세요: 앱의 요구사항을 충족하는 가장 작은 이미지로 시작하세요. 이렇게 하면 최종 이미지 크기가 줄어들고 보안성이 높아져요.
2. 불필요한 패키지를 설치하지 마세요: 앱에 실제로 필요한 종속성만 추가하세요. 이렇게 하면 이미지 크기를 줄이고 잠재적인 취약점 수를 줄일 수 있어요.
3. 패키지 매니저 캐시를 정리하세요: 패키지를 설치한 후 임시 파일과 캐시를 삭제하면 이미지가 더 가벼워져요.
RUN apt-get update && apt-get install -y python3 python3-pip && rm -rf /var/lib/apt/lists/*
4. 멀티스테이지 빌드를 사용하세요: 빌드 단계와 실행 단계를 분리할 수 있어서 더 가볍고 안전한 이미지를 만들 수 있어요.
# 빌드 단계
FROM node:14 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
# 최종 단계
FROM nginx:alpine
COPY --from=builder /app/build /usr/share/nginx/html
5. 이미지를 정기적으로 업데이트하세요: 최신 기본 이미지를 사용하여 최신 보안 패치와 업데이트를 포함하세요.
GO TO FULL VERSION