Can not install pymssql on M1 Device
https://github.com/pymssql/pymssql/issues/727 보고 해당 라이브러리에 필요한 시스템종속성을 추가해 해결했다
fastapi 관련 파일들을 도커 이미지로 빌드하려고 도커 파일을 사용해
이미지를 빌드하고 생성된 이미지로 컨테이너를 실행했는데 실행시키자마자 아래와 같은 오류가 나며 컨테이너가 종료되었다
docker build -t myimage ./
docker run -d --name mycontainer -p 8080:8000 myimage
8080:8000
의 의미호스트의 8080번 포트로 들어오는 요청이 컨테이너의 8000번 포트로 전달되며, 애플리케이션은 컨테이너 내부에서 8000번 포트를 사용하여 동작한다는 의미
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
이 경우 호환성 문제이기 때문에 docker build -t myimage ./ --platform linux/arm64
이렇게 각자 환경에 맞게 이미지를 빌드하면된다.
리눅스 서버에서 실행시킬거면 linux/amd64로 지정하면된다
도커 파일 작성
FROM python:3.9
RUN apt-get update && \
apt-get install -y freetds-dev libssl-dev && \
rm -rf /var/lib/apt/lists/*
ENV LDFLAGS="-L/usr/lib/x86_64-linux-gnu -L/usr/lib/i386-linux-gnu"
ENV CFLAGS="-I/usr/include"
WORKDIR /app
COPY . .
RUN apt-get update && \
apt-get install -y freetds-dev libssl-dev && \
rm -rf /var/lib/apt/lists/*
RUN pip install --no-cache-dir -r requirements.txt
EXPOSE 8000
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0"]
이미지 빌드
docker build -t myimage ./ --platform linux/arm64 .
docker build -t fastapi:v1 .
다음부터는 이런식으로 유의미한 이미지 이름을 지정하자
이미지를 컨테이너로 실행
docker run -d --name ctf -p 8080:8000 myimage
localhost:8080/docs 에 접속하면 정상적으로 동작하는것이 확인가능하다
python:3.9
이미지는 Python 3.9 버전을 기반으로 한 공식 Docker 이미지를 가져온다# Use the official Python image
FROM python:3.9
apt-get
명령을 사용하여 필요한 패키지들을 설치한다여기서는
freetds-dev
와libssl-dev
패키지를 설치
# Install system dependencies
RUN apt-get update && \
apt-get install -y freetds-dev libssl-dev && \
rm -rf /var/lib/apt/lists/*
여기서는
ENV
명령을 사용하여LDFLAGS
와CFLAGS
환경 변수를 설정
# Set environment variables
ENV LDFLAGS="-L/usr/lib/x86_64-linux-gnu -L/usr/lib/i386-linux-gnu"
ENV CFLAGS="-I/usr/include"
WORKDIR
명령을 사용하여 컨테이너 내부의 현재 작업 디렉토리를/app
으로 설정
# Set working directory
WORKDIR /app
/app
디렉토리로 복사현재 호스트의 작업 디렉토리에 있는 모든 파일과 디렉토리를 Docker 컨테이너의 지정된 작업 디렉토리로 복사하는 역할
# Copy application code
COPY . .
(pymssql
라이브러리에 필요한 시스템 종속성을 설치하는 부분)
# Install system dependencies for pymssql (if needed)
# Replace this with the correct package name if you have a requirements.txt entry for pymssql
RUN apt-get update && \
apt-get install -y freetds-dev libssl-dev && \
rm -rf /var/lib/apt/lists/*
# Install Python dependencies
RUN pip install --no-cache-dir -r requirements.txt
# Expose port
EXPOSE 8000
CMD
명령을 사용하여uvicorn
명령을 실행하도록 설정한다.uvicorn
은 ASGI(Asynchronous Server Gateway Interface) 애플리케이션을 실행하는 웹 서버인데,a**pp.main:app**
은 FastAPI 애플리케이션의 진입점을 나타내고,--host "0.0.0.0"
은 서버를 모든 IP 주소에서 수신 가능하게 설정한다
# Run your application
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0"]
가장 빠르게 FastAPI를 돌려보자 - uvicorn-gunicorn-fastapi-docker | Daily Log
[Docker] 이미지 빌드 플랫폼 호환성 관련 에러 (linux/amd64)
https://github.com/pymssql/pymssql/issues/727
https://fastapi.tiangolo.com/deployment/docker/#raspberry-pi-and-other-architectures