sumedhn:
Is there any docker image available which comes with pre installed python and pip. I am quite new to docker.
python
?
I would highly highly recommend reading the
basic Docker tutorial
that covers building new images, running them, and exposing ports. The Docker Hub link above has some reference Dockerfiles for basic use cases.
I also generally recommend getting your application built, working, and tested
outside
Docker (probably in a
virtual environment
) before trying to package it in Docker. If you look around this forum you will see a lot of people trying to inject their application into a container without building a real image; and there are a lot of questions around mechanics and permissions and not having the development tools they’re used to on their desktop. There are very established development practices around virtualenv/pip/pytest/$EDITOR that don’t require Docker (or root access on the host), and IMHO it’s better for you and your teammates to develop in an environment you’re comfortable with and use Docker mostly as a release packaging step.
https://hub.docker.com/r/sabbir1cse/ubuntu-python-pip-supervisor/
or you can create it with your own requirements:
FROM ubuntu:16.04
ENV LANG C.UTF-8
RUN apt-get update && apt-get install -y python python-dev python3.5 python3.5-dev python-pip virtualenv libssl-dev libpq-dev git build-essential libfontconfig1 libfontconfig1-dev
RUN pip install setuptools pip --upgrade --force-reinstall
RUN virtualenv /venv/testenv/ -p
which python3.5
eldeberde:
RUN apt-get update && apt-get install -y python python-dev python3.5 python3.5-dev python-pip virtualenv libssl-dev libpq-dev git build-essential libfontconfig1 libfontconfig1-dev
RUN pip install setuptools pip --upgrade --force-reinstall
RUN virtualenv /venv/testenv/ -p
which python3.5
There’s no point in installing and using a virtualenv in a Docker container: the container itself has its own distinct Python and library installation. Just
pip install
your application into the “global” (unique to your image) Python library space. I’d try not to install
build-essential
or purely developer-oriented tools like
git
in your container if at all avoidable, it’ll double the size for no benefit at runtime.
I’d recommend writing a
Dockerfile
like…well…what’s recommended in the
python image documentation
(“Create a Dockerfile in your Python app project”). Put the
Dockerfile
in your application’s root directory, next to your
setup.py
file. Your development sequence is roughly like:
(1) Check out your application using git as normal
(2) Develop your application locally
(3) Run
pytest
or your other preferred unit testing tool, locally
(4) Go to 2 and repeat until your tests pass
(5) Run
docker build -t something .
(6) Run
docker run -p ... something
, which launches the server process in the built container
Note that in the last step you do not need to use
-v
to push your application code into the container; it gets packaged in during the
docker build
step (and in particular by the
COPY . .
line in the
Dockerfile
).
for development purposes, I would just use a host volume to hold the code, instead of having to rebuild the container for every change…
once you are happy, tested, then copy the code in