Myslím, že dobrým výchozím bodem bude Dockerfile, ve kterém začnete z obrazu Ubuntu a poté nainstalujete požadované závislosti (samtools, bwa) a také balíčky python (umístěné v souboru requirements.txt)
pip freeze > requirements.txt
abyste měli požadované balíčky python (numpy, tqdm atd.)-
vytvořte Dockerfile (který je umístěn ve stejném adresáři jako requirements.txt), např.:
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"]
-
vytvořte si obrázek dockeru
docker built --tag repository/imagename .
(DOT je aktuální adresář) - počáteční obrázek
docker run -dti --name test repository/imagename
- zadejte do kontejneru a začněte pracovat
docker attach test
- jak vidíte, vyzkoušel jsem to a uvnitř kontejneru mám všechny požadované nástroje a balíčky
-
Pokud chcete přidat nové nástroje, přidejte je do souboru Dockerfile a pokud chcete přidat balíčky python, rozbalte soubor requirements.txt.
-
Pokud máte skript python, který něco dělá, a potřebujete jej zahrnout do kontejneru Docker , stačí jej umístit do stejného adresáře jako soubor Dockerfile a requirements.txt a aktualizovat soubor Dockerfile (abyste měli kontejner, který spustí váš skript python ), přesněji v Dockerfile bude poslední řádek
CMD [ "python", "./my_script.py" ]
Nešel bych tak daleko, že bych instaloval software na nějaký počítač/server, protože by to mohlo poškodit jiný software běžící na tomto systému. Místo toho bych vytvořil deb balíček a nastavil závislosti na tom, který software musí být nainstalován, aby uživatele provedl instalací.
1. Vytvořte adresářovou strukturu deb
Adresář deb
obsahuje konečné skripty/binární soubory pro balíček. source
má váš kód pythonu.
$ 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. Přidat soubory
Níže jsem přidal obsah každého souboru. Měli byste být schopni jej implementovat podle svých potřeb.
./Makefile :Tento soubor je zodpovědný za generování zdroje a 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 :Kontrolní soubor pro správce balíčků Debianu.
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 :Soubor, do kterého můžete nainstalovat balíčky pythonu. Spouští se před instalací hello-world.py
. Opět se ujistěte, že knihovnu pouze (re)instalujete/neaktualizujete. Mohlo by to způsobit problémy s nekompatibilitou v jiném softwaru.
#! /bin/bash
virtualenv -p /usr/bin/python3 venv/
source venv/bin/activate
pip install -r ./requirements.txt
./source/Makefile :Soubor, který jsem použil k testování tohoto nastavení.
MYFILE=hello-world.py
all:
@echo "#!/usr/bin/python\n\
print('Hello world!')" > $(MYFILE)
@chmod +x $(MYFILE)
clean:
@rm $(MYFILE)
3. Instalace a odstranění Instalace je velmi snadná, stačí použít dpkg
.
dpkg -i hello-world.deb # for installation
dpkg -r hello-world # for removal
Příjemnou funkcí je, že se nemusíte starat o verzování softwaru, protože se to provádí v control
soubor. Debian má docela dobrý tutoriál, pokud si chcete přečíst více.
UPRAVIT:
Přidáno virtualenv
k příkladu. Balíčky Pythonu by měly být instalovány ve virtuálním prostředí, nikoli globálně.