Dockerfile が良い出発点になると思います。この Dockerfile では、Ubuntu イメージから開始し、必要な依存関係 (samtools、bwa) と python パッケージ (requirements.txt に配置) をインストールします。
pip freeze > requirements.txt
必要な python パッケージ (numpy、tqdm など) を入手する-
Dockerfile を作成します (requirements.txt と同じディレクトリにあります) 例:
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"]
-
Docker イメージをビルドします
docker built --tag repository/imagename .
(DOT は現在のディレクトリです) - 開始画像
docker run -dti --name test repository/imagename
- コンテナに入って作業を開始
docker attach test
- ご覧のとおり、私はそれをテストしました。コンテナー内には、必要なツールとパッケージがすべて含まれています。
-
新しいツールを追加したい場合は、それらを Dockerfile に追加するだけです。Python パッケージを追加したい場合は、requirements.txt ファイルを展開するだけです。
-
何かを実行する python スクリプトがあり、それを Docker コンテナーに含める必要がある場合は、それを Dockerfile および requirements.txt と同じディレクトリに配置し、Dockerfile を更新します (python スクリプトを開始するコンテナーを作成するため)。 )、より正確には、Dockerfile の最後の行は
CMD [ "python", "./my_script.py" ]
になります。
そのシステムで実行されている他のソフトウェアが壊れる可能性があるため、一部のコンピューター/サーバーにソフトウェアをインストールすることはしません。代わりに、deb パッケージを作成し、どのソフトウェアをインストールする必要があるかについて依存関係を設定して、ユーザーのインストールをガイドします。
<強い>1. deb ディレクトリ構造を作成する
ディレクトリ deb
パッケージの最終的なスクリプト/バイナリを保持します。 source
あなたの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.ファイルを追加
以下に、すべてのファイルの内容を追加しました。必要に応じて実装できるはずです。
./Makefile :このファイルは、ソースと 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 :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 :Python パッケージをインストールできるファイル。 hello-world.py
のインストール前に実行されます .繰り返しますが、ライブラリを (再) インストール/更新するだけではないことを確認してください。他のソフトウェアで非互換性の問題が発生する可能性があります。
#! /bin/bash
virtualenv -p /usr/bin/python3 venv/
source venv/bin/activate
pip install -r ./requirements.txt
./source/Makefile :この設定をテストするために使用したファイル。
MYFILE=hello-world.py
all:
@echo "#!/usr/bin/python\n\
print('Hello world!')" > $(MYFILE)
@chmod +x $(MYFILE)
clean:
@rm $(MYFILE)
<強い>3.インストールと削除 インストールは非常に簡単です。dpkg
を使用するだけです .
dpkg -i hello-world.deb # for installation
dpkg -r hello-world # for removal
control
で行われるため、ソフトウェアのバージョン管理について心配する必要がないという優れた機能があります。 ファイル。もっと読むことに興味があるなら、Debian にはかなり良いチュートリアルがあります。
編集:
virtualenv
を追加 例に。 Python パッケージは、グローバルではなく仮想環境にインストールする必要があります。