[Linux] Dockerfile을 사용하여 python 파일 실행

on_cloud·2023년 3월 23일
0

Linux

목록 보기
2/6
post-thumbnail

Dockerfile


python 파일 실행

FROM ubuntu:latest

WORKDIR /app
COPY ./app.py .
RUN apt update -y
RUN apt install -y curl
RUN apt install -y python3-pip
RUN pip3 install flask
RUN useradd python
USER python
EXPOSE 8080

CMD ["python3", "app.py"]

python compile 후 실행

FROM ubuntu:latest

WORKDIR /app
COPY ./app.py .
RUN apt update -y
RUN apt install -y curl
RUN apt install -y python3-pip
RUN pip3 install flask
RUN python3 -m compileall ./app.py
RUN mv ./__pycache__/ ./app.pyc
RUN useradd python
USER python
EXPOSE 8080

CMD ["python3", "app.pyc"]

port가 지정되어 있지 않은 python 파일 실행

FROM ubuntu:latest

WORKDIR /app
COPY ./app.py .
RUN apt update -y
RUN apt install -y curl
RUN apt install -y python3-pip
RUN pip3 install flask
RUN useradd python
USER python

CMD ["flask", "run", "--host=0.0.0.0", "--port=8080"]

실행


  1. Docker를 설치합니다.
yum install -y docker
systemctl enable --now docker
usermod -aG docker ec2-user
usermod -aG docker root
chmod 666 /var/run/docker.sock
  1. Dockerfile을 작성합니다.
FROM ubuntu:latest

WORKDIR /app
COPY ./app.py .
RUN apt update -y
RUN apt install -y curl
RUN apt install -y python3-pip
RUN pip3 install flask
RUN useradd python
USER python
EXPOSE 8080

CMD ["python3", "app.py"]
  1. Dockerfile을 build 후 image를 생성합니다.
docker build -t <image name> .
  1. image가 생성됐는지 확인합니다.
docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
python-ecr   latest    d32914464f0d   3 seconds ago   476MB
  1. image를 사용하여 container를 실행시킵니다.
docker run -d -p <port>:<port> <image name>
  1. conatiner가 생성됐는지 확인합니다.
docker ps
CONTAINER ID   IMAGE        COMMAND             CREATED         STATUS        PORTS                                       NAMES
63f6a6f90792   python-ecr   "python3 app.pyc"   2 seconds ago   Up 1 second   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   fervent_bardeen
  1. container를 접근합니다.
docker exec -it <container id> bash
  1. 실행이 되는지 테스트합니다.
curl localhost:8080/health
python@63f6a6f90792:/app$ curl localhost:8080/health
{"status":"ok"}

0개의 댓글