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
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 の構築に成功しました
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 を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: Jsモジュールパッケージのエクスポートの使用法と違いにはインポートが必要
>>: MySQL 5.7 で my.ini ファイルが見つからない場合の解決策
背景位置が背景画像の表示に与える影響この2日間のプロジェクトでホームページの写真を入れ替えていたとこ...
Windows XP でフォルダーのプロパティ ダイアログ ボックスを使用すると、フォルダーの属性カ...
2 端揃えを実現する div+css レイアウトは、Web ページの組版でよく使用されます。この記事...
新しいLinuxサーバーを入手する場合、通常は次の5つの構成を実行する必要があります。 HOSTAN...
1. ワイヤレスPowerShell を実行し、次のコマンドを入力します。 install-wind...
目次コンストラクタインスタンスとプロトタイプの関係プロトタイププロパティ属性またはメンバーの検索原則...
まず、いくつかの概念を明確にします。 JDBC: Javaデータベース接続、Oricalによって規定...
ここでは、フォーム要素とフォーム送信に関する知識を紹介します。フォーム要素フォーム要素の DOM イ...
目次序文Ajax シリアルおよびパラレルAjaxの同時リクエスト制御のための2つのソリューションPr...
Portainer は、ステータス表示パネル、アプリケーション テンプレートの迅速な展開、コンテナ ...
MySQL の遅いクエリの説明MySQL スロー クエリ ログは、MySQL が提供するログ レコー...
黄金律常に同じコーディング標準セットに従ってください。同じプロジェクトに何人の人が関わっているかに関...
目次1. マスタースレーブレプリケーションマスタースレーブレプリケーション3スレッドマスタースレーブ...
Dockerのインストール手順をスキップする1. postgresqlイメージを取得する docke...
目次1. SVNとは何か2. SVNサーバーとクライアントの取得方法3. SVN ワークフローとアー...