この記事は誰のためのものですか?
依存関係ツリーが絡み合った回路基板のように見えるコードまたはプログラムを渡されたことはありますか?
依存関係の管理はどのように見えるか
問題ありません。開発者から、すべてを機能させるためのインストールスクリプトが提供されたと思います。そのため、スクリプトを実行すると、すぐにシェルに一連のエラーログメッセージが表示されます。 「すべてが私のマシンで機能しました」 -これは、開発者が助けを求めたときに通常答える方法です。
Dockerは、ドッキングされたアプリケーションにほとんど些細な移植性を提供することで、この問題を解決し ます。この記事では、Pythonアプリケーションをすばやくドッキングして、Dockerを持っている人と簡単に共有できるようにする方法を紹介します。
特に、バックグラウンドプロセスとして実行する必要のあるスクリプトについて説明します。
GithubおよびDockerリポジトリ
可視性の方が便利な場合は、このコードがホストされるGithubリポジトリと Dockerリポジトリを調べてください 。
しかし...なぜDockerなのか?
コンテナ化は、船会社(または他のホストコンピュータ)がソフトウェアと対話するための標準インターフェイスを提供する輸送コンテナにソフトウェアを配置することと比較できます。
アプリケーションのコンテナ化は、実際には移植性のゴールドスタンダードです。
一般的なDocker /コンテナ化フレームワーク
コンテナ化(特に dockerを使用)は、ソフトウェアアプリケーションに大きな可能性をもたらします。適切にコンテナ化された(たとえば、ドッキングされた)アプリケーションは、任意のクラウドプロバイダーからKubernetesまたは スケールセットを介してスケーラブルにデプロイでき ます。はい、これについては次の記事でも説明します。
私たちのアプリケーション
それほど複雑なことはありません。ここでも、ディレクトリの変更を監視する単純なスクリプトを使用しています(Linuxで作業しているので、これはそうです
/tmp
)。ログはstdoutにプッシュされます。これは、Dockerログに表示する場合に重要です(詳細は後で説明します)。
main.py:単純なファイル監視アプリケーション
このプログラムは無期限に実行されます。
いつものように、
requirements.txt
依存関係のあるファイルがあります が、今回は次の1つだけです。
Requirements.txt
Dockerfileを作成する
私には 、以前の記事で、我々は共有することは非常に容易になりMakefileの、でインストールプロセスのスクリプトを作成しました。今回は同様のことを行いますが、Dockerで行います。
Dockerfile Dockerfile
の構造と操作の詳細に立ち入る必要はありません。これについては、より詳細なチュートリアルがあります 。
Dockerfileの概要-完全なPythonインタープリターとそのパッケージを含むベースイメージから始めて、依存関係をインストールし(6行目)、新しいミニマルイメージを作成し(9行目)、依存関係とコードを新しいイメージにコピーします(13行目- 14;これはマルチステージビルドと呼ばれ、この場合、完成したイメージのサイズを1GBから200MBに縮小しました)、環境変数(17行目)と実行コマンド(20行目)を設定します。ここで終わりです。
画像を組み立てる
Dockerfileの使用が終了したら、プロジェクトディレクトリから次のコマンドを実行するだけです。
sudo docker build -t directory-monitor .
画像をまとめる
イメージの実行
組み立てが完了したら、魔法の作成を開始できます。
Dockerの優れた点の1つは、標準化されたインターフェースを提供することです。したがって、プログラムを正しく設計してから他の人に転送する場合は、Dockerを学習する必要があり(その人がまだそれを知らない場合)、プログラムのデバイスの複雑さを教えないでください。
私が何を意味するのか見たいですか?
プログラムを実行するコマンドは次のようになります。
ここで説明することがたくさんあるので、それをいくつかの部分に分けてみましょう:
-d
-フォアグラウンドモードではなく、デタッチモードでイメージ
--restart=always
を起動します-Dockerコンテナがクラッシュすると、再起動します。私たちは事故から回復することができます、万歳!
--e DIRECTORY='/tmp/test'
-環境変数を使用して、監視対象のディレクトリを渡します。 (引数を読み取るようにPythonプログラムを設計し、その方法で追跡されたディレクトリを渡すこともできます。)
-v /tmp/:/tmp/
-ディレクトリ
/tmp
を
/tmp
Dockerコンテナディレクトリに マウントし ます。これは重要です。追跡したいディレクトリはすべて、Dockerコンテナ内のプロセスから見える必要があります。これが実装方法です。
directory-monitor
-
起動するイメージの名前イメージを 起動した後、次のコマンドを使用してその状態を確認できます
docker ps
。
Docker ps output Dockerは、実行中のコンテナーに対してクレイジーな名前を生成します。これは、人々がハッシュ値をあまりよく覚えていないためです。この場合、crazy_wozniakという名前はコンテナを指します。
これで
/tmp/test
、ローカルマシンで追跡 しているため、このディレクトリに新しいファイルを作成すると、コンテナログに反映されます。
Dockerログは、アプリケーションが正しく機能していることを示しています。
これで、プログラムがドッキングされ、マシン上で実行されます。次に、プログラムを他の人に転送するという問題を解決する必要があります。
プログラムを共有する
ドッキングされたプログラムは、同僚、友人、将来のあなた、そして世界中の誰にとっても役立つ可能性があるため、配布を容易にする必要があります。このための理想的なソリューションは Dockerハブです。
まだアカウントをお持ちでない場合は、登録してからcliからログインしてください。
Dockerhubにログインし
ます。次に、新しく作成したイメージにマークを付けてアカウントにプッシュします。
ラベルを追加して画像をプッシュします
これで、イメージがDocker Hubアカウントにあります。
すべてが機能することを確認するために、このイメージをプルして、これまでに行ったすべての作業のエンドツーエンドテストで使用してみましょう。
Dockerイメージをエンドツーエンドでテストします。
このプロセス全体はわずか30秒で完了しました。
次は何ですか?
コンテナ化の驚くべき実用性をあなたに納得させることができたと思います。Dockerは長い間私たちと一緒にいて、習得するのが早ければ早いほど、より多くのメリットが得られます。
Dockerは、複雑さを軽減することを目的としています。この例では、これは単純なPythonスクリプトでしたが、このチュートリアルを使用して、スパゲッティに似た依存関係ツリーを使用して任意の複雑さのイメージを作成できますが、 これらの問題はエンドユーザーには影響しません。
のソース
- https://runnable.com/docker/python/dockerize-your-python-application
- https://www.docker.com/
- https://kubernetes.io/
- https://stackoverflow.com/questions/30449313/how-do-i-make-a-docker-container-start-automatically-on-system-boot
- https://docs.docker.com/docker-hub/repos/
広告
Vdsinaは、LinuxまたはWindowsで仮想サーバーを提供します 。私たちは、独占的に ブランド化された機器、その種の最高の独自のサーバーコントロールパネル、およびロシアとEUで最高のデータセンターの1つを使用しています。注文を急いでください!