Docker: Difference between revisions
No edit summary |
|||
Line 7: | Line 7: | ||
WORKDIR /app | WORKDIR /app | ||
## build python environment from requirements.txt | |||
COPY requirements.txt . | COPY requirements.txt . | ||
RUN pip install -r requirements.txt | RUN pip install -r requirements.txt | ||
## copy everything except the database directory (will be mapped) \ | |||
## note that for this implementation, the app needs to initialize its database | |||
copy . . | copy . . | ||
RUN rm -Rf app/database | RUN rm -Rf app/database | ||
## launch the flask app | |||
# | ENTRYPOINT FLASK_APP=/app/app.py flask run --host=0.0.0.0 --port=5000 | ||
# | </pre> | ||
ENTRYPOINT FLASK_APP=/app/app.py flask run --host=0.0.0.0</pre> | |||
Revision as of 20:59, 17 February 2024
Python Dockerfile
FROM python:3.11-slim as build EXPOSE 5000/tcp WORKDIR /app ## build python environment from requirements.txt COPY requirements.txt . RUN pip install -r requirements.txt ## copy everything except the database directory (will be mapped) \ ## note that for this implementation, the app needs to initialize its database copy . . RUN rm -Rf app/database ## launch the flask app ENTRYPOINT FLASK_APP=/app/app.py flask run --host=0.0.0.0 --port=5000
Pycharm Example
Maintaining Files Between Builds
Docker will overwrite files inside the container between builds and resources like databases and cache files may be overwritten. To work around this, it can be useful to create mount points that will reference volumes on the host server (or another server).
docker run --mount type=bind,src=/home/docker,target=/app/database -dp 5000:5000 fnv
Run
Not ideal because it resets whenever you start the container. Need a better way:
sudo docker run -it -p 8888:8888 jupyter/pyspark-notebook jupyter notebook --no-browser --allow-root --ip=0.0.0.0
Then access it from a browser:
You'll need the token from the docker terminal the first time accessing the notebook.
Get Shell to Container
Get a list of running containers and find the id for your specific container:
[bpopp@p1 pubs]$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e0fd0ef0e5c0 jupyter/all-spark-notebook "tini -g -- jupyter …" 22 hours ago Up 22 hours 0.0.0.0:8888->8888/tcp kind_sanderson
Launch a shell
sudo docker exec -it e0fd0ef0e5c0 /bin/bash
Or as root
sudo docker exec -u root -it e0fd0ef0e5c0 /bin/bash
To install something
pip install plotnine --proxy http://myproxy.somewhere.com:3128