Saya pikir titik awal yang baik adalah Dockerfile, di mana Anda mulai dari gambar Ubuntu dan kemudian menginstal dependensi yang Anda inginkan (samtools, bwa) dan juga paket python (ditempatkan di requirements.txt)
pip freeze > requirements.txt
untuk mendapatkan paket python yang Anda inginkan (numpy, tqdm dll)-
buat Dockerfile (yang berada di direktori yang sama dengan requirements.txt) misalnya:
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"]
-
bangun gambar buruh pelabuhan Anda
docker built --tag repository/imagename .
(DOT adalah direktori saat ini) - mulai gambar
docker run -dti --name test repository/imagename
- masuk ke wadah untuk mulai bekerja
docker attach test
- seperti yang Anda lihat, saya mengujinya dan di dalam wadah saya memiliki semua alat dan paket yang diinginkan
-
Jika Anda ingin menambahkan alat baru, tambahkan saja di Dockerfile dan jika Anda ingin menambahkan paket python cukup perluas file requirements.txt.
-
Jika Anda memiliki skrip python yang melakukan sesuatu dan Anda perlu memasukkannya ke dalam Docker container , taruh saja di direktori yang sama dengan Dockerfile dan requirements.txt dan perbarui Dockerfile (agar memiliki wadah yang memulai skrip python Anda ), lebih tepatnya di Dockerfile, baris terakhir adalah
CMD [ "python", "./my_script.py" ]
Saya tidak akan menginstal perangkat lunak ke beberapa komputer / server karena dapat merusak perangkat lunak lain yang berjalan di sistem itu. Sebagai gantinya, saya akan membuat paket deb dan mengatur dependensi perangkat lunak mana yang harus diinstal untuk memandu pengguna melalui penginstalan.
Direktori deb
menyimpan skrip/biner akhir untuk paket tersebut. source
memiliki kode python Anda.
$ 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
Di bawah ini saya telah menambahkan konten dari setiap file. Anda harus dapat menerapkannya sesuai kebutuhan Anda.
./Makefile :File ini bertanggung jawab untuk menghasilkan sumber dan 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 :File kontrol untuk pengelola paket 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 :File tempat Anda dapat menginstal paket python. Dijalankan sebelum instalasi hello-world.py
. Sekali lagi, pastikan Anda tidak hanya (kembali) menginstal/memperbarui perpustakaan. Ini dapat menyebabkan masalah ketidakcocokan pada perangkat lunak lain.
#! /bin/bash
virtualenv -p /usr/bin/python3 venv/
source venv/bin/activate
pip install -r ./requirements.txt
./source/Makefile :File yang saya gunakan untuk menguji penyiapan ini.
MYFILE=hello-world.py
all:
@echo "#!/usr/bin/python\n\
print('Hello world!')" > $(MYFILE)
@chmod +x $(MYFILE)
clean:
@rm $(MYFILE)
dpkg
.
dpkg -i hello-world.deb # for installation
dpkg -r hello-world # for removal
Fitur yang bagus untuk dimiliki adalah Anda tidak perlu khawatir tentang pembuatan versi perangkat lunak Anda, karena hal itu dilakukan di control
mengajukan. Debian memiliki tutorial yang cukup bagus jika Anda tertarik untuk membaca lebih lanjut.
EDIT:
Menambahkan virtualenv
untuk contoh. Paket Python harus dipasang di lingkungan virtual, bukan secara global.