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 ファイルが見つからない場合の解決策
序文かつて、難しい問題に遭遇しました。タワークレーンからスイングハウスを落下させる必要がありましたが...
序文正直に言うと、最近とても混乱していると感じています。テクノロジーと人生について。また、将来の発展...
目次序文1. ルーティングナビゲーションガードを設定する1. グローバルナビゲーションガード2. ロ...
mysql5.7.17のインストールチュートリアルを参考までに共有します。具体的な内容は次のとおりで...
序文多くの Web アプリケーションは、リレーショナル データベース管理システム (RDBMS) に...
プロジェクトドキュメントディレクトリDiv+CSS 命名規則 - 4 - Div+css 命名規則 ...
第二に、キーワードのランキングは、Webページの表示速度にも関係しています(参照:キーワードランキン...
ps: Linux システムで root アカウントのリモート ログインを無効にする方法は次のとおり...
この記事では、WeChatミニプログラムで電子署名を実装するための具体的なコードを参考までに紹介しま...
序文まず、TCP 接続を識別する方法を見てみましょう。システムは、(src_ip、src_port、...
目次まず結論から質問解決Promiseを使用してコールバック関数をカプセル化する要約するまず結論から...
目次1. Docker Composeとは何か、インストールして使用する方法2. DOCleverと...
この記事では、MySQL が 2 つのテーブルを比較して、異なるデータがあるかどうかを確認する方法を...
この記事では、参考までに、シンプルなショッピングカートケースを実装するためのVueの具体的なコードを...
この記事では、カルーセルの効果を実現するためのJavaScriptの具体的なコードを参考までに共有し...