( Dockerでpythonスクリプトを実行しようとしています。さまざまな方法で試しましたが、Dockerで実行できませんでした。私のpythonスクリプトは次のとおりです。
import os
print ('hello')
Macに既にdockerをインストールしています。しかし、私はどのように画像を作成し、それをドッカーにプッシュしてから、ドッカー自体でスクリプトをプルして実行したいのかを知りたいです。
さて、まず、Dockerイメージ用の特定のプロジェクトディレクトリを作成します。例えば:
mkdir /home/pi/Desktop/teasr/capturing
そこにdockerfileとスクリプトをコピーし、現在のコンテキストをこのディレクトリに変更します。
cp /home/pi/Desktop/teasr/capturing.py /home/pi/Desktop/teasr/dockerfile /home/pi/Desktop/teasr/capturing/
cd /home/pi/Desktop/teasr/capturing
これはベストプラクティスです。docker-engineがビルド時に最初に行うことは、現在のコンテキスト全体を読み取ることです。
次に、dockerfileを見てみましょう。次のようになります。
FROM python:latest
WORKDIR /usr/local/bin
COPY capturing.py .
CMD ["capturing.py", "-OPTIONAL_FLAG"]
次に行う必要があるのは、スマート名でビルドすることです。通常、ドットの使用は推奨されません。
docker build -t pulkit/capturing:1.0 .
次は、あなたがやったように画像を実行するだけです。
docker run -ti --name capturing pulkit/capturing:1.0
スクリプトはコンテナ内で実行され、おそらく完了時に終了します。
Edit次のエラーを作成した問題を見つけた後:
"standard_init_linux.go:195: exec user process caused "exec format error"
Raspberry Piの下(x86_64の代わりにARM)に異なるアーキテクチャがありますが、これは問題になっているかもしれませんが、そうではありませんでした。それが問題であれば、親画像をFROM armhf/python
に切り替えるだけで十分でしょう。
しかし!エラーが発生し続けました。
したがって、この問題の解決策は、pythonスクリプトの上にSha-Bangが欠けているだけです。スクリプトの最初の行は#!/usr/bin/env python
である必要があり、これで問題を解決できます。
スクリプトがあるディレクトリにdockerfileを作成する必要があります。
次のテンプレートを使用できます。
FROM python:latest
COPY scriptname.py /usr/local/share/
CMD ["scriptname.py", "-flag"]
次に、docker build -t pulkit/scriptname:1.0 .
を実行するだけで、イメージが作成されます。
画像はdocker images
の下に表示されるはずです。ローカルコンピューターで実行する場合は、docker run
を使用します。
DockerHubにアップロードする場合は、docker login
でDockerHubにログインし、docker Push
で画像をアップロードする必要があります。