データを管理するために Docker を使用しない場合、1985 年から旅行したことになりますか?

データを管理するために Docker を使用しない場合、1985 年から旅行したことになりますか?

この記事は、公開アカウント「Reading the Core」(ID: AI_Discovery)から転載したものです。

新しいプログラマーが直面する最大の困難の 1 つは、環境の概念を理解することです。環境とは、プログラマーがコーディングを実行するシステムを指します。これは簡単そうに聞こえますが、プログラマーがキャリアを積むにつれて、「環境」を維持することがいかに難しいか徐々に理解するようになります。

これは主に、ライブラリ、IDE (統合開発環境)、さらには Python コードを更新してバージョン管理する必要があるためです。ライブラリを更新すると、コードの特定のセクションに問題が発生する場合があり、コードを再度修正する必要があります。複数のプロジェクトを同時に開発すると、依存関係の競合が発生します。あるコードが別のコードにエラーを引き起こすと、事態は複雑になります。

さらに、異なるオペレーティング システムを使用する同僚とプロジェクトを共有する場合や、Mac でビルドしたプロジェクトを別のオペレーティング システム上の運用サーバーに配信する場合は、コードを再構成する必要があります。

これらの問題を解決するために、プロジェクトと、プロジェクトが配置されている環境を分離する方法を「コンテナ」と呼びます。コンテナは、システム上の他のすべてとは別に、サポート環境が実行される場所です。コンテナに何を入れるかを定義すると、環境を再構築したり、同僚とプロジェクトを共有したりすることも簡単になります。

必要とする

  • Docker を起動するには、ソフトウェアをインストールする必要があります。
  • WindowsまたはmacOS: Docker Desktopをインストールする
  • Linux: Dockerをインストールして、Dockerを書く

Python サービス パッケージ

server.py という名前の Flask サーバーを作成し、ファイルの内容を次のように設定するとします。

  1. FlaskからFlaskをインポート
  2. サーバー= Flask (__name__)@server.route("/")
  3. デフハロー():
  4. 「Hello World!」を返します。 __name__ == "__main__" の場合:
  5. server.run(ホスト= '0.0.0.0' )

前述のように、コードの依存関係の記録を保持する必要があります。したがって、次の内容を含む要件に関する txt ファイルを作成します。

  1. フラスコ==1.1.1

したがって、サービス パッケージの構造は次のようになります。

  1. アプリ
  2. ├─── 要件.txt
  3. └─── 出典
  4. └─── server.py

構造は非常に論理的です (ソース ファイルは別々のディレクトリに保存されます)。 Python プログラムを実行するには、Python インタープリターをインストールして実行する必要があります。次に、このプログラムをローカルで実行できます。同時に 15 個のプロジェクトを実行している場合、それらをコンテナー内で実行すると、他のプロジェクトとの競合を回避できます。

Dockerファイル

Python コードを実行するには、コンテナを Docker イメージにパッケージ化してから実行する必要があります。操作は以下のとおりです。

  • イメージをビルドするために必要な指示を含むDockerfileを作成する
  • 次にDockerビルダーでイメージを作成します
  • 簡単な docker run コマンドで、アプリケーションを実行するコンテナを作成できます。

Dockerfile 分析

Dockerfile は、Docker イメージ (myimage という名前) を組み立てるための指示を含むファイルです。

  1. # ベースイメージを設定する(ホストOS)
  2. FROM python:3.8# コンテナ内の作業ディレクトリを設定する
  3. WORKDIR /code# 依存関係ファイルを作業ディレクトリにコピーします
  4. requirements.txt をコピーします。# 依存関係をインストールします
  5. RUN pip install -r requirements.txt# ローカルの srcdirectory の内容を作業ディレクトリにコピーします
  6. COPY src/ .# コンテナ起動時に実行するコマンド
  7. コマンド ["python", "./server.py"]

Dockerfile は行ごとにコンパイルされるため、ビルダーはレイヤーを生成し、それを前のイメージにオーバーレイします。ビルド コマンドの出力では、ステップとして実行された Dockerfile 命令を確認できます。

  1. イメージをビルドします。
  2. ビルドコンテキストを Docker デーモンに送信する 6.144kBステップ 1/6: FROM python: 3.8
  3. 3.8.3-alpine:ライブラリ/pythonから取得
  4. …ステータス: Python の新しいイメージをダウンロードしました: 3.8.3-alpine
  5. --- > 8ecf5a48c789ステップ 2/6: WORKDIR /code
  6. --- > 9313cd5d834d で実行中
  7. 中間コンテナ 9313cd5d834d を削除しています
  8. --- > c852f099c2f9ステップ 3/6: requirements.txt をコピーします。
  9. --- > 2c375052ccd6ステップ 4/6: pip install -rrequirements.txt を実行します
  10. --- > 3ee13f767d05 で実行中
  11. …中間コンテナの削除 3ee13f767d05
  12. --- > 8dd7f46dddf0ステップ 5/6: ./src をコピーします。
  13. --- > 6ab2d97e4aa1ステップ 6/6: CMD python server.py
  14. --- > fbbbb21349be で実行中
  15. 中間コンテナ fbbbb21349be--- > 27084556702bを削除しています
  16. 70a92e92f3b5 の構築に成功しました
  17. myimage:latest のタグ付けに成功しました

次に、ローカル イメージに保存されているイメージを見つけることができます。

  1. $ docker イメージ
  2. リポジトリ タグ 画像 ID 作成サイズ myimage 最新 70a92e92f3b5 8 秒前 991 MB

開発プロセス中に、Python サービスのイメージを何度も再構築する必要がある場合があるため、できるだけ時間を節約する必要があります。

Docker と virtualenv は非常に似ていますが、異なります。 Virtualenv を使用すると、Python 依存関係を切り替えることができますが、ホスト オペレーティング システムのみで可能です。ただし、Docker を使用すると、任意のオペレーティング システム (Ubuntu、Debian、Alpine、Windows Server Core を含む) に Python をインストールして実行できます。

したがって、チームで作業していて、後で自分のスキルを証明したい場合は、Docker を使用してください。 docker を使用しない場合は、venv も良いですが、将来的には信頼できる方法ではありません。

[[341481]]

画像ソース: unsplash

この記事では、Python サービス パッケージを作成する方法を示し、そのプロセスを簡素化して、プログラマーがプロジェクトをより長く続けられるようにします。依存関係が変更されてもコードエラーが発生する可能性が低くなるためです。

<<:  デジタル経済の最適な道を探り、クラウドについてテンセントと議論

>>:  今後は中小企業向けのSaaS製品やソリューションの提供に100億のリソースを投入します

推薦する

ウェブサイトを作ることにはまだ未来があるのでしょうか?個人ウェブサイト所有者の将来の道筋は何でしょうか?

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービスウェブサイトの構築を始め...

よく使われる検索コマンドは 360 でも使えますか?

360統合検索は今年8月16日にリリースされると、360製品の巨大なユーザーベースにより、あっという...

日々の話題: ブラウザ競争が激化、UCがPCブラウザ市場参入を計画

A5 Webmaster Network(www.admin5.com)は4月17日、モバイル分野の...

Citrix Yu Fang:QingCloudと提携し、テクノロジーで企業のデジタル変革を加速

[51CTO.comより引用] 現在、クラウドコンピューティングは企業のデジタル変革の重要な原動力と...

JVM に固執する | Arthas を使用して JVM メモリをチェックするのは素晴らしいことです。

[[402910]]この記事はWeChatの公開アカウント「Mu Xiaonong」から転載したもの...

SEOとユーザーエクスペリエンスの組み合わせが真実

UCD(ユーザーエクスペリエンスデザイン)については皆さんもよくご存知だと思います。 SEO と U...

推奨: HeroicVPS-7USD/2IP/512MB RAM/Onapp/Win (RAMが2倍になりました)

データ センター: フェニックス (西海岸) IP: 184.164.150.106、バージニア (...

#BlackWeek5#: Hostus - 香港を含む 9 つのデータセンター / 10G ポート / DDOS 保護 / さまざまな特別オファー

Hostus の今年のブラックフライデーはこの記事で取り上げます。最新ニュースは次のとおりです。ワシ...

Dogyun:「618」イベント、香港cn2/ドイツcn2/日本ソフトバンクなどのVPSが50%オフ、独立サーバーが直接100元引き

Dogyunの618イベントがここにあります。クラウドサーバーには、香港Alibaba Cloudラ...

Baiduの最新のデータアルゴリズムと考え方を共有する

みなさんこんにちは。朱衛坤が最新のデータ発見を皆さんにお伝えします。百度のクロール時間が更新されまし...

実例から考えるインターネットマーケティング

最近、私たちの住んでいるところからそう遠くないところに、「スネークハウス」というレストランがあります...

#ブラックフライデー#: hostmonster-すべてのホストが月額3.95ドルから

Hostmonster も今年のブラックフライデーにプロモーションを実施しました。11 月 27 日...

エッジコンピューティング: 最速のデータ処理を支えるテクノロジー

[[410792]]エッジコンピューティング入門エッジ コンピューティングは、クライアント データが...

Apple App Store 2015 ベストゲームが発表

今年も毎年恒例のランキング発表の時期がやってきました。Google はすでに Play ストアの年間...

hostwinds-$13.5/Windows/1g メモリ/50g ハードディスク/100M 無制限

Hostwindsは2010年に設立され、米国ダラスにコンピュータルームを構えています。仮想ホスティ...