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 ファイルが見つからない場合の解決策

推薦する

background-positionプロパティでのパーセンテージ値の使用法の検討

背景位置が背景画像の表示に与える影響この2日間のプロジェクトでホームページの写真を入れ替えていたとこ...

チェックボックスの不確定プロパティの使用の紹介

Windows XP でフォルダーのプロパティ ダイアログ ボックスを使用すると、フォルダーの属性カ...

CSS の両端揃えを実現する div+css レイアウトの 4 つの方法の概要

2 端揃えを実現する div+css レイアウトは、Web ページの組版でよく使用されます。この記事...

Linux で一般的なソフトウェアを設定する方法

新しいLinuxサーバーを入手する場合、通常は次の5つの構成を実行する必要があります。 HOSTAN...

Windows Server のインストール後にワイヤレスとオーディオが機能しない問題を解決する

1. ワイヤレスPowerShell を実行し、次のコマンドを入力します。 install-wind...

JavaScriptプロトタイプと例の詳細な説明

目次コンストラクタインスタンスとプロトタイプの関係プロトタイププロパティ属性またはメンバーの検索原則...

JDBC を使用して Mysql データベースに接続する際に発生する可能性のある問題の概要

まず、いくつかの概念を明確にします。 JDBC: Javaデータベース接続、Oricalによって規定...

HTML でのフォームとフォーム送信操作に関する情報のコレクション

ここでは、フォーム要素とフォーム送信に関する知識を紹介します。フォーム要素フォーム要素の DOM イ...

JS ベースの Ajax 同時リクエスト制御を実装する方法

目次序文Ajax シリアルおよびパラレルAjaxの同時リクエスト制御のための2つのソリューションPr...

Docker 用ビジュアル UI 管理ツール Portainer のインストールと使用方法の分析

Portainer は、ステータス表示パネル、アプリケーション テンプレートの迅速な展開、コンテナ ...

Mysql の遅いクエリ操作の概要

MySQL の遅いクエリの説明MySQL スロー クエリ ログは、MySQL が提供するログ レコー...

柔軟で安定した高品質の HTML および CSS コード標準を作成するためのガイド

黄金律常に同じコーディング標準セットに従ってください。同じプロジェクトに何人の人が関わっているかに関...

MySQL データベースのマスター・スレーブ レプリケーションと読み取り/書き込み分離

目次1. マスタースレーブレプリケーションマスタースレーブレプリケーション3スレッドマスタースレーブ...

docker で PostgreSQL データベースをインストールして永続化する方法

Dockerのインストール手順をスキップする1. postgresqlイメージを取得する docke...

SVN のインストールと基本操作 (グラフィック チュートリアル)

目次1. SVNとは何か2. SVNサーバーとクライアントの取得方法3. SVN ワークフローとアー...