当社のイントラネット環境では、一部のテーブルの CRUD、データのエクスポート、人事権限管理などの機能を備えた CMS に似たアプリケーションを導入する必要があります。 Django はこのような作業に向いており、開発作業量も大きくないと考え、開発基盤として Django を選択しました。開発機能は比較的シンプルで、xadmin などのプラグインを使用することで上記の機能のほとんどを実現できます。しかし、イントラネット環境へのデプロイではpipなどのツールが使えないという、避けられない問題がありました。幸い、イントラネット内にyumサーバーが用意されていたので、イントラネットサーバーにDockerをインストールし、開発環境のコンテナを本番環境にコピーしてデプロイすることにしました。主な手順は次のとおりです。
注: ここでの開発環境は Ubuntu 18.04 で、本番環境は Centos 7.2 です。別の環境をご利用の場合は、ご自身で違いを確認し、システムに適したコマンドを使用してください。 開発環境用のDocker-ceをインストールするDocker と Docker-compose が今回のデプロイメントのキーポイントです。Django アプリケーション部分を削減してみます。 Docker はコンテナ仮想化の基盤部分を担当します。Docker-compose はコンテナ オーケストレーション ツールです。これを使用すると、コンテナを接続するためのシェルを作成する必要がありません。まず Docker-ce をインストールしましょう。ここでは主に Docker の公式ドキュメントを参照します。私が書いた内容が十分に詳細でなかったり、古くなっている場合は、公式 Web サイトにアクセスして、より信頼性が高く更新されたドキュメントを参照できます。 古いバージョンをアンインストールする インストールする前に、古いバージョンの Docker をアンインストールする必要があります。新しいシステムを使用している場合は、この手順を無視できます。 $ sudo apt remove docker docker-engine docker.io containerd runc 使用するaptリポジトリをインストールする apt パッケージインデックスを更新する $ sudo aptアップデート apt が https 経由でリポジトリにアクセスできるようにする $ sudo apt インストール \ apt-transport-https \ ca証明書\ カール\ gnupgエージェント\ ソフトウェアプロパティ共通 Dockerの公式GPGキーを追加する $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key を追加 - Dockerリポジトリを追加する $ sudo aptリポジトリを追加\ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ 安定した" Docker-ceをインストールする 以上の準備ができたら、Docker-ceのインストールは簡単です。Ubuntuに慣れている方であれば、すぐにインストールできます。 $ sudo aptアップデート $ sudo apt install -y docker-ce インストールが完了したら、docker サービスを開始し、システムの起動時に毎回起動するようにします。 $ sudo systemctl dockerを起動します $ sudo systemctl dockerを有効にする 開発環境用のDocker-composeをインストールするDocker-ce をインストールすると、Docker-compose は簡単に使用できるようになります。 Linux またはその他のプラットフォームを使用している場合は、Docker-compose のコンパイル済みバイナリファイルを直接ダウンロードして使用できます。 次のようにコードをコピーします。 $ sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose ダウンロード後、権限を変更し、実行ファイルを追加します $ sudo chmod +x /usr/local/bin/docker-compose 最後に、Docker-compose のバージョン番号を確認して、正常にインストールされているかどうかを確認できます。 $ docker-compose --version docker-compose バージョン 1.24.0-rc1、ビルド 0f3d4dda 開発環境の設定ここでの開発環境は Django 環境です。デモンストレーションの都合上、新しく作成した Django プロジェクトを使用してみます。 新しいDjangoプロジェクトを作成する 新しい Django プロジェクトを作成し、最初に最上位フォルダーを作成して、このフォルダーにプロジェクト ファイルを配置します。ディレクトリ構造はおおよそ次のようになります。 - プロジェクト --Dockerファイル --docker-compose.yml --マイサイト --manage.py --要件.txt まずプロジェクトフォルダを作成します $ mkdir プロジェクト 次に、新しい Django プロジェクトを作成するか、既存のプロジェクトをコピーします。 $ django-admin.py プロジェクト mysite を開始します requirements.txt ファイルを生成する 前の手順では、mysite という Django プロジェクトがすでに存在します。このフォルダーに requirements.txt を配置し、その内容が次のようになっているとします。 $ cat 要件.txt defusedxml==0.5.0 差分マッチパッチ==20181111 ジャンゴ==2.1.7 django-crispy-forms==1.7.2 django-フォームツール==2.1 django-import-export==1.2.0 django-reversion==3.0.3 et-xmlファイル==1.0.1 将来==0.15.2 httplib2==0.9.2 jdcal==1.4 odfpy==1.4.0 オープンpyxl==2.6.0 ピッツ==2018.9 pyYAML == 3.13 です 6==1.10.0 タブライブラリ==0.12.1 ユニコードcsv==0.14.1 xadmin==0.6.1 xlrd==1.2.0 xlwt==1.3.0 mysqlクライアント==1.4.2 もちろん、これらは私のプロジェクトに必要な依存関係であり、あなたの依存関係は私のものとは異なる場合があります。 新しいDockerfileを作成する プロジェクトとその依存ファイルができたので、次のステップは、Django プロジェクトの実行環境の Docker イメージを作成することです。まず、Docker イメージをビルドするための Dockerfile を作成します。 プロジェクト フォルダーに次の内容の新しい Dockerfile を作成します。 $ 猫 Dockerfile Python:3.6.8 から 環境変数 PYTHONUNBUFFERED 1 mkdir /configを実行します /mysite/requirements.txt /config/ を追加します。 pip install -r /config/requirements.txt を実行します。 mkdir /src を実行 ワークディレクトリ /src/mysite このファイルについて簡単に説明させてください。
ここで使用するベース イメージは python: 3.6.8 です。そのベース イメージは Ubuntu で、こちらの方が使い慣れています。alpine に慣れている場合は、はるかに小さい alpine を使用することもできます。
Env キーワードを使用して、任意のオペレーティング システムの環境変数を作成できます。
たとえば、Django キーを保存するために使用している場合は、次のように記述します。
コード内では次のように使用します。 インポートOS SECRET_KEY = os.environ['DJANGO_SECRET_KEY'] 名前が示すように、RUN はコンテナ内でコマンドを実行します。ここでは、RUN コマンドは /config と /src の 2 つのフォルダーを作成し、Python の依存関係環境をインストールします。 mkdir /configを実行します mkdir /src を実行 pip install -r /config/requirements.txt を実行します。 追加 /mysite/requirements.txt /config/ を追加します。 コンテナのWORKDIRにローカルファイルを追加する ワークディレクトリ /src/mysite コンテナ内で実行される後続のすべてのコマンドのデフォルト パスを指定します。実行されるコマンドは、後で docker-compose ファイルで確認できます。 新しいdocker-composeスクリプトを作成する Docker-compose を使用すると、複数のコンテナを管理できます。コンテナを実行するために大量のパラメータを手動で追加したり、コンテナを接続したりする作業は、Docker-compose によって実行できるようになります。私の docker-compose.yml の内容は次のとおりです。 $ cat docker-compose.yml バージョン: '3' サービス: デシベル: イメージ:mysql:5.7 コンテナ名: mysite_db ポート: - 「3306:3306」 環境: MYSQL_ROOT_PASSWORD: マイサイト MYSQL_DATABASE: マイサイト 言語: C.UTF-8 ウェブ: 建てる: 。 コンテナ名: mysite_web コマンド: bash -c "python manage.py makemigrations && python manage.py migrate && python manage.py runserver 0.0.0.0:8000" 依存: -db ボリューム: - ./mysite:/src 再起動: 常に ポート: - 「8002:8000」 この docker-compose ファイルについて簡単に説明しましょう。 バージョン: '3' docker-compose のバージョンを指します。バージョンによってサポートされる構成項目が若干異なります。サービスはサービスによって管理されます。この例では、db と web の 2 つのサービスがあります。 2 つのサービスの設定項目を個別に説明します。 image は、docker hub またはローカルの既存のイメージを直接使用します。これは MySQL5.7 を使用します。container_name はコンテナの名前を指定します。ports は、コンテナからホストへのポート マッピングを指定します。前のポートはホスト ポート、後ろのポートはコンテナ ポートです。environment は、現在のサービスが実行されている環境を指定します。環境の詳細については、現在のイメージの説明を参照してください。サポートされているものを構成できます。この場合、MySQL ルート パスワード、デフォルトのデータベース、およびデータベースの文字セットを指定します。 web: build はイメージをコンパイルします。ここでは、現在のフォルダにある Dockerfile が使用されます。command は、コンテナの起動後に実行されるコマンドです。depends_on は、現在のコンテナが依存するサービスです。つまり、現在のサービスを起動する前に、依存関係にあるサービスが正常に起動されている必要があります。volumes は、現在のコンテナによってマウントされるボリュームです。前半はホスト ディレクトリを参照し、後半はコンテナ ディレクトリを参照します。restart は、コンテナの再起動戦略を指定します。今回の場合、エラーが発生すると再起動を続けます。 ここでは、コンテナのポート 8000 がホストのポート 8002 にマッピングされ、Web サービスにはポート 8002 からアクセスされます。 Django プロジェクトの設定 次に、現在のコンテナ環境に応じて、mysite プロジェクトの settings.py ファイルを変更します。 $ vim mysite/mysite/settings.py ファイル内の ALLOW_HOSTS セクションを見つけて、次の内容で「web」を追加します。 ALLOW_HOSTS = [ ... 'ウェブ' ] 次に、settings.py の DATABASES 部分を変更し、パラメータを MySQL サービス db のパラメータに変更します。内容は次のとおりです。 データベース = { 'デフォルト': { 'エンジン': 'django.db.backends.mysql', '名前': 'mysite', 'ユーザー': 'root', 'パスワード': 'mysite', 'ホスト': 'db' } } ここでの MySQL 接続パラメータは、docker-compose.yml ファイルの db 部分の環境で定義されます。パラメータ HOST の値が db であることは注目に値します。docker-compose がコンテナを起動すると、これらのコンテナが接続されます。コンテナは、ドメイン名を使用する場合と同様に、サービス名を使用して相互に ping を実行できるため、ここでの「HOST」には直接「db」を入力できます。 Docker-composeを使用してプロジェクトをビルドする 上記の作業が終わると、基本的には準備完了です。イメージをビルドできます。ここでは 2 つのサービスがあります。DB は実行時にローカル イメージをダウンロードまたは使用するだけで済み、Web も Dockerfile を使用してビルドする必要があります。 $ docker-composeビルド ダウンロードまたはビルドにしばらく時間がかかると、イメージが正常にビルドされたという情報が表示されます。 プロジェクトを実行してテストする ビルドが完了すると、Web サービスのイメージが作成されます。次に、docker-compose を使用してサービスを開始します。 $ docker-compose アップ -d このプロセスも、ネットワーク速度によっては時間がかかる場合があります。MySQL イメージをダウンロードし、db イメージと web イメージに基づいてコンテナを構築し、コンテナを実行します。完了したら、docker-compose psとdocker-compose imagesを使用して、生成したコンテナとイメージを表示できます。 $ docker-compose ps 名前 コマンド 状態 ポート --------------------------------------------------------------------------------------- mysite_db docker-entrypoint.sh mysqld アップ 0.0.0.0:3306->3306/tcp、33060/tcp mysite_web bash -c python manage.py m ... 0.0.0.0:8002->8000/tcp を起動 $ docker-compose イメージ コンテナ リポジトリ タグ イメージ ID サイズ -------------------------------------------------------- mysite_db mysql 5.7 e47e309f72c8 355 MB mysite_web mysite_web 最新 3989acbcc3c9 938 MB docker-compose を使用してサービスを停止および開始することもできます。より具体的な使用方法については、公式ドキュメントを参照してください。 $ docker-compose を開始します db を起動しています...完了 ウェブを起動しています...完了 $ docker-compose を停止します mysite_web を停止しています...完了 mysite_db を停止しています...完了 ここで、サービスの停止と開始の順序が規則的であることがわかります。開始時には、依存するサービスが最初に開始され、次にそれに依存するサービスが開始されます。サービスを開始するときは、その逆になります。サービスが正常に実行されたら、ブラウザにアクセスして、サービスが正常に開始されているかどうかをテストできます。 コンテナを保存サービスに問題がなければ、現在のコンテナを保存し、新しいプラットフォームへの展開の準備をする必要があります。 注意: イメージを保存するには save を使用します。 save にはコンテナ間の接続状態などの情報が含まれます。 export を使用してイメージを本番環境にエクスポートした場合、docker-compose を使用してサービスを復元することはできません。 $ docker save -o mysql.tar mysql:5.7 $ docker save -o mysite.tar mysite_web:latest 上記のコマンドが正常に実行されると、現在のディレクトリに 2 つの tar ファイルが生成され、プロジェクト ディレクトリに Dockerfile および docker-compose.yml ファイルが生成され、本番マシンに移行する準備が整います。 本番環境用にDocker-ceとdocker-composeをインストールする本番環境はCentOSなので、yumを使って直接インストールできます。 $ sudo yum インストール docker-ce インストールが成功したら、開発環境を参照して docker-compose を本番サーバーにデプロイします。 コンテナファイルを送信して実行するscp またはその他のツールを使用して、mysql.tar、mysite.tar、Docker-compose.yml、およびプロジェクト フォルダーを運用サーバーに送信し、元のディレクトリ構造を維持しながらこれらのファイルを保存する適切なフォルダーを見つけます。 まず、2つのイメージを本番サーバーに復元しましょう $ docker ロード -i mysql.tar $ docker load -i mysite_web.tar 実行が完了するまでしばらく待つと、現在のサーバーにすでにこれら 2 つのイメージがあることがわかります。 リポジトリ タグ イメージ ID 作成 サイズ mysite_web 最新 3989acbcc3c9 2日前 983MB mysql 5.7 e47e309f72c8 3週間前 372MB ビルド コンテナを実行する前に、docker-compose.yml に簡単な変更を加える必要があります。お気づきかと思いますが、本番サーバーにはインターネットがないので、これ以上イメージをビルドすることはできません。開発環境のイメージもそのままコピーしておいたので、今度はイメージからWebサービスを実行できます。内容は以下のとおりです。 バージョン: '3' サービス: デシベル: ... ウェブ: 画像: mysite_web:latest ... Web 内のビルド アイテムを削除し、イメージ アイテムを追加するだけで、コンテンツはコピーしたイメージになります。その後、コンテナを構築してサービスを開始できます。 $ docker-compose アップ -d 結果 名前 コマンド 状態 ポート ---------------------------------------------------------------------------------------- mysite_web bash -c python manage.py m ... 0.0.0.0:8002->8000/tcp を起動 mysite_db docker-entrypoint.sh mysqld アップ 0.0.0.0:3306->3306/tcp、33060/tcp ブラウザを再度開いて、正常に起動するかどうかを確認します。 追記docker-compose には他にも多くの用途があり、今後のプロジェクトでは他の方向についてもさらに詳しく紹介する予定です。私の作品をご覧いただきありがとうございます。少しでもお役に立てれば幸いです。 参照ドキュメントUbuntu用のDocker CEを入手する 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: CocosCreator 一般的なフレームワーク設計リソース管理
>>: mysql5.7.19 解凍版の詳細なインストール チュートリアル (純粋なクラックされた中国語版 SQLYog を使用)
目次序文1. ヌル合体演算子2. ??= 空代入演算子3. ?. オプション連鎖演算子4. ?: 三...
ウェブサーバー1. Webサーバーは、wev、cgi、asp機能を無効にするなど、不要なIISコンポ...
目次1.1. MySQL binlog を有効にする1.2. RabbitMQ の交換とキューを構成...
作業の過程で、暗黙的な変換が発生するケースが数多くあります。暗黙的な変換は、クエリの速度低下を引き起...
1. libfastcommon-1.0.43 をインストールします。インストール パッケージは h...
インターフェイス ドメイン名を構成する際、各パブリック プラットフォームはドメイン名に対する開発者の...
コードを見てみましょう:コードをコピーコードは次のとおりです。 < !DOCTYPE html...
よく聞かれる答えは、列に NULL 値を使用するとインデックスが無効になるというものですが、実際にテ...
目次機能コンポーネント子コンポーネントの分割ローカル変数v-show によるDOMの再利用キープアラ...
MySql データベース システムをインストールして構成します。 1. ダウンロード http://...
まず依存関係をダウンロードします yarn sass-loader ノード sass を追加します次...
インデックス定義: ディスク上に保存される個別のデータベース構造であり、データ テーブル内のすべての...
目次序文Denoとは何ですか? Node.jsとの比較建築ESモジュール依存関係の管理TypeScr...
はじめに: この記事ではreact-native-cliで作成したサンプル プロジェクト (Andr...
通常、清明節、国哀悼日、大地震の日、影響力のある偉人の死去または命日には、ウェブマスターとして、故人...