Docker実践: Pythonアプリケーションのコンテナ化

Docker実践: Pythonアプリケーションのコンテナ化

1. はじめに

コンテナはサンドボックス メカニズムを使用して相互に分離します。コンテナ内にデプロイされたアプリケーションは相互に影響を与えず、独立して実行されるため、セキュリティが強化されるという利点があります。この記事では主に、Docker コンテナ内での Python アプリケーション (Django) の実行、イメージ構築を自動化するための Dockerfile の作成、および Docker アーティファクト Compose について紹介します。

2. Dockerfileファイルを書く

公式サイトからダウンロードした Python イメージは比較的簡素化されており、Web アプリケーション関連の依存関係は依然として自分でインストールする必要があります。 Dockerfile を作成すると、イメージの構築プロセスを自動化できます。以下に例を示します。

Python:3.6.4より

mkdir /code \ を実行します
&&apt-get アップデート \
&&apt-get -y をインストール freetds-dev \
&&apt-get -y unixodbc-dev をインストール
アプリ/コードをコピー 
requirements.txt /code をコピーする
pip install -r /code/requirements.txt -i https://pypi.douban.com/simple を実行します。
WORKDIR /コード

CMD ["/bin/bash","run.sh"]

FROM: Dockerfile 内の非常に重要なコマンドで、ビルド プロセスのベース イメージを指定するために使用されます。例えば、上記ではベースイメージとしてpython3.6.4を指定しており、以降の操作はすべてこのイメージを元にカスタマイズされます。存在しない場合は公式サイトからダウンロードされます。 FROM は Dockerfile の最初のコマンドである必要があります。

RUN: イメージ構築プロセス中にパラメータを実行する、Dockerfile 実行コマンドの中核部分です。

COPY: ファイルをコピーします。 COPY <ソースパス> <宛先パス>

WORKDIR: 作業ディレクトリ。存在しない場合は自動的に作成されます。

CMD: コンテナの起動コマンド。Docker は仮想マシンではありませんが、コンテナはプロセスです。プロセスなので、コンテナを起動する際には実行するプログラムとパラメータを指定する必要があります。 CMD 命令は、デフォルトのコンテナ メイン プロセスの起動コマンドを指定するために使用されます。 docker run がコマンド パラメータを指定すると、ここでの cmd は機能しません。たとえば、docker run -it -name redis docker.io/redis /bin/bash の場合、docker run ではすでにコマンド パラメータ /bin/bash が指定されているため、コンテナーを起動しても Dockerfile 内の cmd は実行されません。

3. イメージを構築する

docker build [オプション] コンテキストパス | URL

  • [オプション]: 通常、コマンドにはイメージの名前を指定するために使用される -t が含まれます。 -f は Dockfile のコンテキスト パスを指定します。
  • コンテキスト パス|URL: コンテキスト パス。ドット "." が 1 つだけの場合は、現在のディレクトリを表します。

docker bulid -t webtest . コマンドは、webtest という名前のイメージをビルドし、ビルドが完了するとイメージ ID 1dfa2905efac を返します。

[root@CentOS ウェブテスト]# ls
アプリ Dockerfile requirements.txt run.sh
[root@CentOS webtest]# docker build -t webtest . 
...
...
...
中間コンテナ 9c510e88e659 を​​削除しています
ステップ 6/6 : CMD /bin/bash run.sh
---> 0bd29255c648 で実行中
---> 1dfa2905efac
中間コンテナ 0bd29255c648 を削除しています
1dfa2905efac の構築に成功しました
  • アプリ: Django プロジェクト
  • Dockerファイル
  • requirements.txtはプロジェクトを実行するために必要なPythonライブラリです
    • ジャンゴ
    • ジャンゴ2
    • pyDes
    • pyMySQL の
    • レディス
    • リクエスト
    • pymssql
    • pyodbc
    • パラミコ
    • psutil

run.shはコンテナを実行するときに呼び出す必要があるシェルスクリプトです。

Python /code/app/manage.py 実行サーバー 0.0.0.0:8000

コンテナを起動し、ビルドしたイメージを実行します。

docker run -it -p 6500:8000 -v /home/code/webtest:/code --name web --restart always --privileged=true webtest

[root@CentOS webtest]# docker run -it -p 6500:8000 -v /home/code/webtest:/code --name web --restart always --privileged=true webtest
システムチェックを実行しています...

システム チェックで問題は検出されませんでした (0 件はサイレント)。

適用されていない移行が 15 件あります。admin、auth、contenttypes、sessions のアプリの移行を適用するまで、プロジェクトは正常に動作しない可能性があります。
これらを適用するには、「python manage.py migrate」を実行します。

2018年8月9日 - 09:56:51
Django バージョン 2.1、設定 'ShiHangTool.settings' を使用
http://0.0.0.0:8000/ で開発サーバーを起動しています
CONTROL-C でサーバーを終了します。

-p: コンテナのポート8000​​をホストのポート6500にマップします

-v: ホストディレクトリ /home/code/webtest はコンテナディレクトリ /code にマップされます

--name: コンテナにwebという名前を付けます。webtestは先ほど作成したイメージです。

--restart: always コンテナは終了時に常に再起動されます

--privileged=true: コンテナ内のファイルの実行に必要な権限

ip:6500/Home/OrderSettle-K8S/ を入力してください

実行に成功しました!

5. 作曲する

上記の操作は複雑すぎると思いますか? 自動的に展開できれば素晴らしいと思います。心配しないでください。composeがお手伝いします

1. はじめに:

Compose は Docker の公式オープンソース プロジェクトであり、Docker クラスターの迅速なオーケストレーションに使用されます。 Compose は、docker-compose.yml ファイルを通じて 1 つ以上のコンテナを定義および実行します。 figのアップグレード版です。

2. インストール:

Compose は Python で記述されており、コンテナを管理するために Docker が提供する API を呼び出します。 Python管理ツールpipを通じてインストールできます

pip で docker-compose をインストールします

3. docker-compose.ymlファイルを書く

これはdocker-compose.ymlのメインテンプレートフォーマットです

バージョン: '3'
サービス:
  ウェブ1:
    建てる: 。
    画像: web1
    ポート:
      - 「7500:8000」
    ボリューム: 
      - /home/code/webtest:/code
    特権: true
    再起動: 常に

4. Composeプロジェクトを実行する

dockerfile、requirements.txt、docker-compose.yml、appフォルダを同じディレクトリに配置し、docker-compose upコマンドを実行します。

[root@CentOS webtest]# docker-compose up
デフォルト ドライバーを使用してネットワーク「webtest_default」を作成しています
ウェブ構築1
ステップ 1/6: python3.6.4-dev から
 --->ca46b1ed99ab
ステップ 2/6: アプリ / コードをコピーする
 ---> f59b9540f8ab
中間コンテナ e987c66b51f5 を削除しています
ステップ 3/6: requirements.txt /code をコピーする
 ---> 2095b64882ac
中間コンテナ e3099b386727 を削除しています
...
...
...

実行が完了すると、docker ps は起動したばかりのコンテナ web1 をチェックし、すでに実行中であることを確認します。

[root@CentOS ~]# docker ps
コンテナID イメージ コマンド 作成ステータス ポート名
eeab6b5a993b web1 "/bin/bash run.sh" 約 1 分前 59 秒前に起動 0.0.0.0:7500->8000/tcp webtest_web1_1
5fb51ce5a51c webtest "/bin/bash run.sh" 23 時間前 約 1 時間前 0.0.0.0:6500->8000/tcp web

5. まとめ

Compose は、自動デプロイメントを実現するために、イメージの構築とコンテナの実行という 2 つのステップを yml ファイルで構成します。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Django Docker コンテナのデプロイ Django-Docker ローカルデプロイ
  • Node.jsサービスDockerコンテナアプリケーション実践のまとめ
  • .NETCore Dockerはコンテナ化とプライベートイメージリポジトリ管理を実装します
  • Docker 大規模プロジェクトのコンテナ化変革
  • Docker コンテナのデプロイの試み - マルチコンテナ通信 (node+mongoDB+nginx)
  • Dockerコンテナ化されたSpring Bootアプリケーションの詳細な説明
  • ELK を使用して Docker コンテナ化されたアプリケーション ログ センターを構築する方法の詳細な説明
  • DockerコンテナにPythonアプリケーションをデプロイするプロセスの分析

<<:  Jsモジュールパッケージのエクスポートの使用法と違いにはインポートが必要

>>:  MySQL 5.7 で my.ini ファイルが見つからない場合の解決策

推薦する

CSSアニメーションを途中で止めて姿勢を維持する方法

序文かつて、難しい問題に遭遇しました。タワークレーンからスイングハウスを落下させる必要がありましたが...

ByteDance インタビュー: JS を使用して Ajax 同時リクエスト制御を実装する方法

序文正直に言うと、最近とても混乱していると感じています。テクノロジーと人生について。また、将来の発展...

Vue2.xは、ユーザーのログインと終了を実装するためにルーティングナビゲーションガードを設定します。

目次序文1. ルーティングナビゲーションガードを設定する1. グローバルナビゲーションガード2. ロ...

MySQL 5.7.17 zip パッケージ バージョンを Windows 10 にインストールするチュートリアル

mysql5.7.17のインストールチュートリアルを参考までに共有します。具体的な内容は次のとおりで...

キャッシュサーバーを構築するためのMemcached方式

序文多くの Web アプリケーションは、リレーショナル データベース管理システム (RDBMS) に...

CSS XTHML の記述標準とよくある問題の概要 (ページ最適化)

プロジェクトドキュメントディレクトリDiv+CSS 命名規則 - 4 - Div+css 命名規則 ...

ウェブページの読み込み速度を上げる6つのヒント

第二に、キーワードのランキングは、Webページの表示速度にも関係しています(参照:キーワードランキン...

Linuxシステムはルートアカウントのリモートログインコマンドを禁止しています

ps: Linux システムで root アカウントのリモート ログインを無効にする方法は次のとおり...

電子署名を実装するWeChatミニプログラム

この記事では、WeChatミニプログラムで電子署名を実装するための具体的なコードを参考までに紹介しま...

Linux サーバーが処理できる接続数をご存知ですか?

序文まず、TCP 接続を識別する方法を見てみましょう。システムは、(src_ip、src_port、...

WeChatミニプログラムでトークンの有効期限を処理する方法

目次まず結論から質問解決Promiseを使用してコールバック関数をカプセル化する要約するまず結論から...

Docker Composeを使用してDOCleverをインストールする詳細なプロセスを説明します

目次1. Docker Composeとは何か、インストールして使用する方法2. DOCleverと...

MySQL実践スキル: 2つのテーブルに異なるデータがあるかどうかを比較する方法の分析

この記事では、MySQL が 2 つのテーブルを比較して、異なるデータがあるかどうかを確認する方法を...

Vueはシンプルなショッピングカートの例を実装します

この記事では、参考までに、シンプルなショッピングカートケースを実装するためのVueの具体的なコードを...

カルーセル効果を実現するネイティブJavaScript

この記事では、カルーセルの効果を実現するためのJavaScriptの具体的なコードを参考までに共有し...