Create docker iamge¶
Docker can help us to maintain our computational environments. Each of our Nextflow pipeline has a dedicated docker iamge in our lab. And all the docker files should be avalible at dockerfile.
Dockerfile¶
To simplify the image building, we can use conda to install most of the tools. We can collect the tools avalible on conda cloud into a conda.yml
file, which might looks like this.
name: concordance-nf
channels:
- defaults
- bioconda
- r
- biobuilds
- conda-forge
dependencies:
- bwa=0.7.17
- sambamba=0.7.0
- samtools=1.9
- picard=2.20.6
- bcftools=1.9
# - vcfkit=0.1.6
- csvtk=0.18.2
- r=3.6.0
- r-ggplot2=3.1.1
- r-readr=1.3.1
- r-tidyverse=1.2.1
Then, build the Dockerfile
as bellow.
FROM continuumio/miniconda
MAINTAINER XXX <email>
COPY conda.yml .
RUN \
conda env update -n root -f conda.yml \
&& conda clean -a
# install other tools not avalible on conda cloud
RUN apt-get install -y procps
RUN R -e "install.packages('roperators',dependencies=TRUE, repos='http://cran.us.r-project.org')"
Note
Put the conda.ymal
and Dockerfile
under the same folder.
Build docker image¶
To build the docker iamge, you need docker desktop installed in your local machine. Also you should sign up the dockerhub to enable pushing docker image to cloud.
Go to the folder which have conda.ymal
and Dockerfile
, run
docker build -t <dockerhub account>/<name of the iamge> . # don't ingore the dot here
You can use docker image ls
to check the image list you have in your local machine.
Importantly, you have to check if the tools were installed sucessfully in your docker image. To test the docker iamge, run
docker run -ti <dockerhub account>/<name of the iamge> sh
The above command will let you into the docker image, where you can check the tools by their normal commands. Make sure all the tools you need have been installed appropriately.
Push docker image to dockerhub¶
After the image check, you are ready to push the image to dockerhub which allows you to download the image when ever you need to use.
docker push <dockerhub account>/<name of the iamge>