coleygroup / pyscreener

pythonic interface to virtual screening software
MIT License
85 stars 32 forks source link

Dockerfile #44

Closed calum-hand closed 2 years ago

calum-hand commented 2 years ago

Description

This PR adds a Dockerfile which allows for easy installation of all python dependencies, the pyscreener library, ADFR suite tools and choice of vina based docking software to a contained docker image. This allows for reproducible and straightforward installation / testing / usage of the pyscreener code. All pytest checks pass as well as smoke-test for all vina versions.

Example / Current workflow

Creating a docker image containing the pyscreener library, its dependencies, ADFR suite tools and the vina docking software can be accomplished with docker build -t pyscreener:vina --target vina . however any of the vina base docking softwares can be specified instead.

Bugfix / Desired workflow

n/a

Questions

Installing qvina / psovina requires building from source which raises some pragma issues during compilation. If any light can be shed on solving these issues / clarifying if these issues then that would be invaluable feedback.

Relevant issues

n/a

checklist

No new tests added but all docker builds pass the associated python and docking smoke tests

Status

Not 100% ready as seeking feedback on compilation of qvina and psovina docking tools from souce

calum-hand commented 2 years ago

is it possible to add a base image for DOCK6? I know the source download requires a license, so we can't install and build automatically, but there are a few additional utilities that we could include a base DOCK6 image

Sure, from the README I'm assuming the desired software would be sphgen_cpp and chimera?

Seeing as DOCK6 doesn't rely on the ADFR suite, I'd imagine re-structuring the final dockerfile as below:

# base  (python dependencies only)
FROM continuumio/miniconda3 AS base

# vina base (installs ADFR)
FROM base AS vina-base

# dock6 base (installs relevant dock6 accessories)
FROM base AS dock6-base

# final vina flavour images (specific vina docking softwares_
FROM vina-base AS psovina
... etc

If you could suggest a better name than vina-base however I'd be all for it to avoid ambiguities in the naming (i.e. vina vs vina-base)

how do you feel about using micromamba instead of miniconda? In my experience, it's usually interchangeable with conda and results in smaller images with faster builds

I'd never say no to a smaller or faster build let alone both simultaneously! I'll start working on creating the docker file as above from the miniconda image then move over to the micromamba version. From what you say should hopefully be a simple change at the very top!

davidegraff commented 2 years ago

yeah i think that new organization makes sense re: DOCK6. Of course, you can't add sphgen_cpp to the $DOCK6/bin because it doesn't exist, but at least it'll be installed in the image

calum-hand commented 2 years ago

yeah i think that new organization makes sense re: DOCK6. Of course, you can't add sphgen_cpp to the $DOCK6/bin because it doesn't exist, but at least it'll be installed in the image

So I've downloaded and compiled the spghen_cpp code to a dock6_utils directory and also placed the chimera installation binary there also for the user. I couldn't find a way to automate the chimera installation itself as the script required several complex inputs (empty quotes, deleting and replacing text etc) which I couldn't find a way round.

Will try and swap the main parent image from miniconda to micromamba then otherwise should be good to go.

calum-hand commented 2 years ago

@davidegraff have successfully managed to swap out the conda base image for the micromamba base image. So far as I can see there's nothing left outstanding with this PR.

codecov[bot] commented 2 years ago

Codecov Report

Merging #44 (f4f4ed4) into main (71762e8) will decrease coverage by 1.20%. The diff coverage is n/a.

:exclamation: Current head f4f4ed4 differs from pull request most recent head 30a991d. Consider uploading reports for the commit 30a991d to get more accurate results

@@            Coverage Diff             @@
##             main      #44      +/-   ##
==========================================
- Coverage   28.57%   27.36%   -1.21%     
==========================================
  Files          32       30       -2     
  Lines        1400     1374      -26     
  Branches      185      154      -31     
==========================================
- Hits          400      376      -24     
+ Misses        994      992       -2     
  Partials        6        6              
Flag Coverage Δ
unittests 27.36% <ø> (-1.21%) :arrow_down:

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files Coverage Δ
pyscreener/exceptions.py
pyscreener/__init__.py

:mega: We’re building smart automated test selection to slash your CI/CD build times. Learn more

calum-hand commented 2 years ago

All good points, definitely makes the README clearer / easier to read. Have accepted the changes.