How to use traffic in a Docker container? ========================================= If you don't want to be bothered with Python's dependencies and just want to work, using a Docker container might be an easy solution. It is quite simple to run the traffic library with everything it needs in a Docker container, and you have a few options. We provide a self-contained container image on GitHub that you can use. It has everything in it that you need. Or, alternatively, you can build your own image. We describe both below. Use the GitHub container image ------------------------------ Using the container image from GitHub is simple. Just make sure you have Docker installed and running, then pull the image with: .. code:: bash docker pull ghcr.io/xoolive/traffic/jupyter:latest Once the image is downloaded, you can run it with .. code:: bash docker run -it -p 8888:8888 ghcr.io/xoolive/traffic/jupyter This will start the container, and you can connect to it with the browser and work in a Jupyter notebook. Just copy-paste the URL that starts with *http://127.0.0.1:8888...* into your favourite browser and have fun. Use the GitHub container image with Visual Studio Code ------------------------------------------------------ If you use VS Code, life is even more convenient. You just need to make sure that you have the *Docker* and *Remote - Containers* extensions installed. For example, you have some code that you'd like to run in the container. You can pull the image from GitHub as above. Once that is done, open the *Docker* extension and right-click on the image and select *Run Interactive*. .. image:: images/user_docker_vscode.png This will show give you the URL that you can use on the console similar to the example above. The much cooler thing is, if you have the container running (as you now do if you followed the instructions) you can change VS Code to be running as if it was *in* the container. For that, you can right-click on the container and select *Attach Visual Studio Code*. .. image:: images/vscode_attach_to_container.png A new instance will be started, and you can use all the features of VS Code (including Jupyter notebooks) the same way you used to. Create your own Dockerfile -------------------------- In case you feel a bit more adventurous, you can also create your own Dockerfile and use it for your container. The following two examples show how you can use the traffic library in a Docker with `Jupyter notebook `__. If you are completely unfamiliar with Docker and how to modify a Docker image, you can find a good tutorial in the `official documentation `__. Of course, you can base your Docker container on a different Dockerfile as the one used in the examples. In the simplest case when you just want to run the traffic library in a Docker container, you can install the library and its dependencies directly into the base environment of the container. In that case, the ``Dockerfile`` could look like the following: .. code:: dockerfile FROM jupyter/minimal-notebook USER jovyan RUN mamba install -c conda-forge traffic # manually set environment variable for PROJ when running in base environment ENV PROJ_LIB=/opt/conda/share/proj Note the last line, which sets an environment variable for PROJ. This is needed because the conda base environment never gets properly activated and this fixes the issue described `here `__. To run this Docker, you first have to generate an image with ``docker build``: .. code:: bash docker build -f jupyter.Dockerfile -t traffic/jupyter:latest . The Docker container can now be started: .. code:: bash docker run -it -p 8888:8888 traffic/jupyter:latest Run Jupyter in a custom environment ----------------------------------- If you have already a working conda environment that you would like to use, you can install your existing environment into the Docker container. The ``Dockerfile`` could look like the following: .. code:: dockerfile FROM jupyter/minimal-notebook # copy conda environment file to image COPY traffic.yml traffic.yml # install nb_conda into the base python to allow the user to choose the # environment in the jupyter notebook and install environment USER jovyan RUN mamba install -y nb_conda RUN mamba env create -f traffic.yml Note that the environment file ``traffic.yml`` has to be in the same directory as the ``Dockerfile``: a sample version is provided in the ``docker`` folder.