효율적인 Python Docker 이미지를 만드는 방법

효율적인 Python Docker 이미지를 만드는 방법
당신과 같은 독자들이 MUO를 지원하는 데 도움을 줍니다. 귀하가 당사 사이트의 링크를 사용하여 구매하면 당사는 제휴 수수료를 받을 수 있습니다. 자세히 읽어보세요.

Docker는 업계 표준 소프트웨어입니다. 컨테이너에 애플리케이션을 패키징하고 배포하는 데 사용됩니다. Docker 이미지는 애플리케이션을 구축하고 실행할 수 있는 초석입니다.





Docker의 잠재력을 최대한 활용하려면 리소스 효율성, 보안 및 성능을 위해 이미지를 최적화해야 합니다. 이렇게 하면 애플리케이션이 Docker 생태계 내에서 원활하게 작동하도록 보장됩니다.





Python 계산기 앱을 컨테이너화하는 방법을 보여주는 실제 사례를 통해 이를 수행하는 방법을 알아보세요.





최소 기본 이미지로 시작하기

Docker 이미지의 효율성에 영향을 미치는 요소 중 하나는 기본 이미지의 선택입니다. 애플리케이션을 실행하는 데 필요한 필수 구성 요소만 포함된 최소 이미지로 시작해야 합니다.

또한 사용하는 이미지는 보안 업데이트와 패치를 제공하는 평판이 좋은 소스에서 가져온 것이어야 합니다. 활발한 커뮤니티와 좋은 문서가 있어야 합니다. 이는 문제를 해결하거나 도움을 구할 때 유용합니다.



계산기 애플리케이션의 경우 다음을 선택합니다. 파이썬:3.11-슬림-책벌레 , 최소 이미지이므로 이미지 크기가 줄어듭니다. 결과적으로 리소스 소비가 최소화되고 이미지 다운로드 및 배포 속도가 빨라집니다.

# Starting With a Minimal Base Image 
FROM python:3.11-slim-bookworm AS builder

당신은 할 수 있습니다 더 작은 Alpine Linux 이미지를 사용하세요. , python:3.11-alpine을 선택합니다. 그러나 이 이미지에는 Python 인터프리터, 패키지 관리자 및 일반 Python 라이브러리가 포함되어 있지 않습니다.





루트가 아닌 사용자로 애플리케이션 실행

Docker 컨테이너를 루트 사용자로 실행하면 심각한 보안 위험이 발생할 수 있습니다. 악의적인 행위자가 루트로 실행되는 컨테이너에 액세스할 수 있게 되면 컨테이너 소프트웨어의 취약점을 악용하여 권한을 상승시킬 수 있습니다. 그런 다음 이러한 권한을 사용하여 호스트 시스템을 완전히 제어하면서 명령을 실행할 수 있습니다.

솔루션은 애플리케이션을 다음과 같이 실행합니다. 루트가 아닌 사용자 . 계산기 예제에서는 사용자를 생성하고 구성합니다. 계산자 .





아주 좋은

루트가 아닌 사용자로 애플리케이션 실행

Docker 컨테이너를 루트 사용자로 실행하면 심각한 보안 위험이 발생할 수 있습니다. 악의적인 행위자가 루트로 실행되는 컨테이너에 액세스할 수 있게 되면 컨테이너 소프트웨어의 취약점을 악용하여 권한을 상승시킬 수 있습니다. 그런 다음 이러한 권한을 사용하여 호스트 시스템을 완전히 제어하면서 명령을 실행할 수 있습니다.

.00 hdtv용 수제 안테나
# Set non-root user for security 
RUN adduser calculator --system

# Add the user to the calculator group
RUN addgroup calculator && adduser calculator calculator

애플리케이션에 대한 전용 사용자를 생성하면 잠재적인 공격자가 사용할 수 있는 권한이 제한됩니다. 이로 인해 취약점을 악용하는 것이 더 어려워집니다.

필요한 파일 복사 및 가상 환경 생성

Docker 컨테이너 내에 가상 환경을 생성하면 종속성이 격리됩니다. 이렇게 하면 시스템 전체 패키지 및 기타 응용 프로그램과의 충돌이 방지됩니다. 또한 시스템의 나머지 부분에 영향을 주지 않고 애플리케이션에 필요한 종속성의 정확한 버전을 설치할 수 있으므로 버전 호환성도 보장됩니다.

필요한 파일을 컨테이너에 복사합니다. 그런 다음 Python의 내장 기능을 사용하여 계산기 애플리케이션을 위한 가상 환경을 만듭니다. 벤브 기준 치수.

# Set working directory and copy necessary files 
WORKDIR /app
COPY app.py .
COPY requirements.txt .
COPY config.json ./
# Copy config.json from the local directory

# Create a virtual environment and install dependencies
RUN python -m venv /venv
ENV PATH="/venv/bin:$PATH"
RUN /venv/bin/pip install --upgrade pip --no-cache-dir --requirement requirements.txt

가상 환경은 시스템 전체 패키지를 복제하지 않으므로 가볍고 효율적입니다. 이렇게 하면 Docker 이미지 크기를 더 작게 유지하고 컨테이너가 실행될 때 리소스 소비를 줄이는 데 도움이 됩니다.

마이크 창 10을 음소거하는 방법

효율성을 위한 레이어 최소화

Dockerfile의 각 명령은 결과 이미지에 새 레이어를 생성합니다. Docker는 쓰기 중 복사 메커니즘을 사용하여 이러한 레이어를 관리합니다. Docker 이미지의 레이어 수를 줄이면 이미지 크기와 빌드 성능이 크게 향상됩니다. 레이어를 줄이는 한 가지 방법은 여러 명령을 단일 명령으로 통합하는 것입니다. 달리다 지침.

# Minimizing Layers for Efficiency 
# Combine commands to reduce the number of layers
RUN echo "Build process goes here" && \
   /venv/bin/python -m compileall . && \
   rm -rf __pycache__

위 명령을 결합하면 이미지 빌드 프로세스 중에 생성되는 중간 레이어 수가 줄어듭니다.

구성 처리 보안

Docker 이미지 내에서 중요한 정보를 처리하면 보안 위험이 발생합니다. 보안을 강화하려면 환경 변수와 외부 구성 파일을 사용해야 합니다. 계산기 애플리케이션 예제에서는 다음과 같은 디렉터리를 생성할 수 있습니다. /구성 저장하다 구성 파일 적절한 소유권을 설정합니다.

# Securing Configuration Handling 
RUN mkdir /config && chown calculator:calculator /config

그런 다음 구성.json 파일을 이 디렉터리에 저장하여 애플리케이션 코드와 별도로 유지되도록 합니다.

# Copy the config.json file into the container 
RUN cp config.json /config/config.json
ENV CONFIG_PATH=/config/config.json

코드에서 구성 데이터를 분리하고 적절한 권한을 적용하면 Docker 이미지의 전반적인 보안이 강화됩니다. 이는 승인된 프로세스나 사용자만 중요한 구성 데이터에 액세스할 수 있도록 보장합니다.

다단계 빌드 사용

다단계 빌드를 사용하면 빌드 환경을 최종 이미지에서 분리할 수 있습니다. 그 결과 더 작고 집중된 프로덕션 이미지가 생성됩니다. 또한 최종 이미지에서 빌드 관련 도구 및 파일을 제외하여 보안을 강화합니다. 이는 공격 표면을 줄이고 불필요한 구성 요소와 관련된 잠재적인 보안 위험을 최소화합니다.

# Leveraging Multi-Stage Builds 
FROM python:3.11-slim-bookworm

COPY --from=builder /etc/passwd /etc/passwd
COPY --from=builder /etc/group /etc/group
COPY --from=builder /venv /venv
COPY --from=builder /config /config
COPY --from=builder /app /app
# Copy the application code

위 코드는 빌드 단계에서 필요한 아티팩트만 복사합니다. (건축업자) 최종 이미지에 들어갑니다. 이렇게 하면 계산기 애플리케이션을 실행하는 데 필요하지 않은 빌드 관련 도구 및 파일을 제외하여 이미지 크기가 줄어듭니다.

이미지 스캔으로 보안 강화

Docker 이미지의 보안을 더욱 강화하려면 Trivy 또는 Clair와 같은 이미지 검색 도구를 사용하세요. 이러한 도구는 이미지 레이어 및 종속성의 취약점을 식별하도록 설계되었습니다. 계산기 앱으로 Trivy를 사용하세요. 취약점 스캔 수행 .

휴대 전화 위치를 추적하는 방법
# Install Trivy for Debian/Ubuntu 
RUN apt-get update && \
   apt-get install -y wget apt-transport-https gnupg lsb-release && \
   wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | apt-key add - && \
   echo "deb https://aquasecurity.github.io/trivy-repo/deb bookworm main" \
   | tee -a /etc/apt/sources.list.d/trivy.list && \
   apt-get update && \
   apt-get install -y trivy

Docker 이미지에 Trivy 취약점 검사를 추가하는 것이 중요합니다. 이는 알려진 취약점에 대한 정보로 정기적으로 업데이트되는 CVE(Common Vulnerability and Exposures) 데이터베이스를 사용하기 때문입니다. 이를 통해 최신 보안 패치로 이미지를 최신 상태로 유지하고 알려진 공격으로부터 애플리케이션을 보호할 수 있습니다.

이미지에 대한 취약점 보고서를 얻으려면 다음 명령을 사용하십시오.

docker run --rm ` 
 -v /var/run/docker.sock:/var/run/docker.sock `
 -v $HOME/Library/Caches:/root/.cache/ `
 aquasec/trivy:0.18.3 `
 <your image name>

위의 명령을 실행하는 데 시간이 좀 걸립니다. 완료되면 아래와 같은 보고서가 생성됩니다.

  터미널에 대한 Trivy 취약점 보고서

심각도가 높을수록 식별된 취약점을 더 빨리 해결해야 합니다.

루트가 아닌 사용자로 애플리케이션 실행

보안을 강화하려면 응용 프로그램을 다음과 같이 실행하십시오. 계산하다 r 사용자는 잠재적인 취약점을 제한합니다.

# Running Applications as Non-Root Users 
WORKDIR /app
USER calculator

# Activate the virtual environment and run the application
CMD ["/bin/bash", "-c", "source /venv/bin/activate && python app.py"]

루트가 아닌 사용자로 전환하면 공격 표면이 최소화됩니다.

Python이 아닌 애플리케이션 컨테이너화

다른 언어로 구동되는 애플리케이션의 Docker 컨테이너화는 약간 다릅니다. 다양한 유형의 애플리케이션을 컨테이너화하는 방법을 숙지해야 합니다. 이는 애플리케이션에서 사용하는 언어 유형에 따라 채택할 최선의 전략을 결정하는 데 도움이 됩니다.