Penso che un buon punto di partenza sia un Dockerfile, in cui si parte da un'immagine Ubuntu e quindi si installano le dipendenze desiderate (samtools, bwa) e anche i pacchetti python (posizionati in un requirements.txt)
pip freeze > requirements.txt
per avere i pacchetti python desiderati (numpy, tqdm ecc.)-
creare un Dockerfile (che risiede nella stessa directory di requirements.txt) ad esempio:
FROM ubuntu:16.04 RUN apt-get update && \ apt-get upgrade -y && \ apt-get install -y python && \ apt-get install -y wget \ curl \ bc \ unzip \ less \ bedtools \ samtools \ openjdk-8-jdk \ tabix \ bwa\ python-pip\ software-properties-common && \ apt-get -y clean && \ apt-get -y autoclean && \ apt-get -y autoremove RUN mkdir -p /usr/src/app WORKDIR /usr/srv/app COPY . /usr/srv/app RUN pip install -r requirements.txt CMD ["/bin/bash"]
-
costruisci la tua immagine docker
docker built --tag repository/imagename .
(DOT è la directory corrente) - inizia l'immagine
docker run -dti --name test repository/imagename
- entra nel contenitore per iniziare a lavorare
docker attach test
- come puoi vedere, l'ho testato e all'interno del contenitore ho tutti gli strumenti e i pacchetti desiderati
-
Se vuoi aggiungere nuovi strumenti, aggiungili semplicemente nel Dockerfile e se vuoi aggiungere pacchetti Python, espandi semplicemente il file requirements.txt.
-
Se hai uno script Python che fa qualcosa e devi includerlo nel contenitore Docker, inseriscilo nella stessa directory con Dockerfile e requirements.txt e aggiorna il Dockerfile (in modo da avere un contenitore che avvii il tuo script Python ), più precisamente nel Dockerfile l'ultima riga sarà
CMD [ "python", "./my_script.py" ]
Non andrei fino all'installazione di software su alcuni computer/server perché potrebbe interrompere altri software in esecuzione su quel sistema. Invece, creerei un pacchetto deb e imposterei le dipendenze su quale software deve essere installato per guidare l'utente attraverso l'installazione.
1. Crea la struttura della directory deb
La directory deb
contiene gli script/binari finali per il pacchetto. source
ha il tuo codice Python.
$ cd $HOME/path/to/some/directory
$ mkdir -p ./deb/DEBIAN ./source
$ touch ./Makefile ./source/Makefile ./deb/DEBIAN/{control,preinst} ./source/hello-world.py
$ chmod +x ./deb/DEBIAN/preinst
2. Aggiungi file
Di seguito ho aggiunto il contenuto di ogni file. Dovresti essere in grado di implementarlo in base alle tue esigenze.
./Makefile :Questo file è responsabile della generazione del sorgente e del deb.
PACKAGE := hello-world
DEB_DIR := deb
DEB_FILE := $(PACKAGE).deb
SOURCE_DIR := source
SOURCE_IN := $(SOURCE_DIR)/$(PACKAGE).py
SOURCE_OUT := $(DEB_DIR)/usr/bin/
.PHONY: all clean
all:
@make -C $(SOURCE_DIR) CROSS_COMPILE=$(CROSS_COMPILE)
@mkdir -p $(SOURCE_OUT)
@cp -r $(SOURCE_IN) $(SOURCE_OUT)
@chmod -R a-s $(DEB_DIR)
@dpkg-deb --build $(DEB_DIR) $(DEB_FILE)
clean:
@rm -rf $(DEB_FILE) $(SOURCE_OUT)
@make -C $(SOURCE_DIR) clean
./deb/DEBIAN/control :Il file di controllo per il gestore pacchetti di Debian.
Package: hello-world
Version: 1
Section: misc
Priority: optional
Architecture: all
Depends: libc6 (>= 2.24), python (>=2.7.13), virtualenv (>=1.11.6)
Maintainer: Your name <[email protected]>
Description: This is a deb package to install an application
./deb/DEBIAN/preinst :il file in cui è possibile installare i pacchetti Python. Viene eseguito prima dell'installazione di hello-world.py
. Ancora una volta, assicurati di non (re)installare/aggiornare semplicemente una libreria. Potrebbe causare problemi di incompatibilità in altri software.
#! /bin/bash
virtualenv -p /usr/bin/python3 venv/
source venv/bin/activate
pip install -r ./requirements.txt
./source/Makefile :Un file che ho usato per testare questa configurazione.
MYFILE=hello-world.py
all:
@echo "#!/usr/bin/python\n\
print('Hello world!')" > $(MYFILE)
@chmod +x $(MYFILE)
clean:
@rm $(MYFILE)
3. Installazione e rimozione L'installazione è molto semplice, basta usare dpkg
.
dpkg -i hello-world.deb # for installation
dpkg -r hello-world # for removal
Una bella caratteristica da avere è che non devi preoccuparti di controllare la versione del tuo software, poiché è fatto nel control
file. Debian ha un buon tutorial se sei interessato a leggere di più.
MODIFICARE:
Aggiunto virtualenv
ad esempio. I pacchetti Python dovrebbero essere installati in un ambiente virtuale invece che globalmente.