Docker Python build file
Run python script in docker envelope
$ docker run -it --rm --name my-running-script -v "$PWD":/usr/src/myapp -w /usr/src/myapp python:3 python script.py
Run python3 script in docker and chown files back to original user
$ docker run --rm --name az_script-20helper-split-pem.py \ -v "$path_dir":/app -w /app \ -v /tmp:/tmp \ --env certName=$certName \ --env USER_ID=$(id -u ${USER}) \ --env GROUP_ID=$(id -g ${USER}) \ python:3.7-alpine \ sh -c 'python -m pip install pem ; python az_script-20helper-split-pem.py /tmp/$certName-in.pem /tmp/$certName-split ; chown --changes --silent ${USER_ID}:${GROUP_ID} /tmp/$certName-split* '
- Python docker build file
- create dir myapp, in it add src/myapp.py and requirements.txt
FROM python:3.7-alpine as base FROM base as builder RUN mkdir /install WORKDIR /install COPY requirements.txt /requirements.txt RUN pip install --install-option="--prefix=/install" -r /requirements.txt FROM base COPY --from=builder /install /usr/local COPY src /app WORKDIR /app CMD ["python" . "myapp.py"]
- Build with $ docker build -t myapp .
- Run with $ docker run --rm myapp
Installing pip packages in docker container
- This became complicated as python3 does not allow for global packages to be installed as this can clash with the OS python.
Work around use venv
# Create python venv ENV VIRTUAL_ENV=/opt/venv # ENV VIRTUAL_ENV=${HOME}/venv/ RUN mkdir -p ${VIRTUAL_ENV} # create venv RUN python3 -m venv ${VIRTUAL_ENV} ENV PATH="${VIRTUAL_ENV}/bin:$PATH"