Docker で nginx ログをスクロールする方法
Docker の使用方法
1. docker ps で実行中のコンテナを表示します。
2. docker image で docker イメージを表示します。
3. docker rm id (コンテナID) コンテナを削除します(コンテナIDはdocker psで確認できます。削除するにはコンテナを停止する必要があります)
3.1 すべてのコンテナを削除 docker rm `docker ps -a -q`
4 . docker stop id (container id) コンテナの実行を停止します
## 5. docker rmi id (mirror id) イメージを削除します## 6. docker pull ubuntu:16.04 (ミラー名:バージョン番号) イメージをダウンロードします
7. docker run -it ubuntu:16.04 コンテナを作成して実行しますcontainer
-tは疑似端末、または新規で端末を指定することを意味しますコンテナ
# -iは、コンテナ内で(stdin)との対話を許可することを意味します# -pは、マップされたポートを指定します
# -d コンテナをバックグラウンドで実行し、コンテナID 7.1 docker run -dit ubuntu:16.04 バックグラウンドでコンテナを作成して実行します 7.2 docker run -ditp 8080:8080 (ホストポート:コンテナポート) ubuntu:16.04 を作成して実行します。バックグラウンドでコンテナを実行し、コンテナのポートをマッピングします# 8. dockerattach id (コンテナID) 実行中のコンテナ環境に入ります
# 9. コンテナを終了します# 9.1 exit コンテナを直接終了し、実行中のコンテナを終了します
9.2 [ctrl p] [ctrl q ] (ショートカットキー) コンテナを終了しますが、実行中のコンテナは終了しません
10. docker commit -m'バージョン識別' id (コンテナー ID) ubuntu:16.04 (イメージとバージョン番号) イメージを送信してイメージを生成します ( このコマンドを使用して、ビルドされたコンテナーを新しいイメージにパッケージ化するか、元のイメージ (つまり、元のイメージの内容を変更します。生成されたイメージの名前がバージョン番号と同じ場合は、生成されたイメージ名を直接上書きできます))
さて、docker については誰もが知っています。 . この記事のポイントは以下のとおりですので、見ていきましょう。 nginx 自体はログ ローリングの問題を処理せず、ユーザーに問題を投げつけました。通常、logrotate ツールを使用してこのタスクを実行できます。また、必要に応じて、さまざまなスクリプトを作成して同じタスクを実行することもできます。この記事の著者は、docker で実行されている nginx ログ ファイルをスクロールする方法を紹介しています (下の画像はインターネットからのものです)。思考
nginx 公式は、実際にログをロールする方法について説明しています:ログ ファイルをローテーションするには、最初に名前を変更する必要があります。その後、usr1 シグナルがマスター プロセスに送信される必要があります。マスター プロセスは、現在開いているすべてのログ ファイルを再度開き、非特権ファイルを割り当てます。ワーカー プロセスが所有者として実行されているユーザー。再オープンに成功すると、マスター プロセスは開いているすべてのファイルを閉じ、ファイルを再オープンするようにワーカー プロセスにメッセージを送信します。ワーカー プロセスも新しいファイルを開いて閉じます。古いファイルをすぐに削除します。その結果、古いファイルはほぼ即座に圧縮などの後処理に使用できるようになります。
#この説明の一般的な考え方は次のとおりです:•次に、usr1 シグナルを nginx マスター プロセスに送信します
•nginx マスター プロセスは、シグナルを受信した後にいくつかの処理を実行し、ワーカー プロセスにログ ファイルを再度開くように要求します。
•ワーカー プロセスは新しいログ ファイルを開き、古いログ ファイルを閉じます
実際、実際に行う必要がある作業は最初の 2 つのポイントだけです。
Docker がシステムにインストールされていると仮定して、ここでは nginx コンテナーを直接実行します。
$ docker run -d \ -p 80:80 \ -v $(pwd)/logs/nginx:/var/log/nginx \ --restart=always \ --name=mynginx \ nginx:1.11.3
マウントされた nginx ログをバインドしていることに注意してください。現在のディレクトリ内のログ ディレクトリ。 次の内容を test.sh ファイルに保存します:
#!/bin/bash for ((i=1;i<=100000;i++)) do curl http://localhost > /dev/null sleep 1 done
次の内容を含むrotatelog.sh ファイルを作成します。
#!/bin/bash getdatestring() { tz='asia/chongqing' date "+%y%m%d%h%m" } datestring=$(getdatestring) mv /var/log/nginx/access.log /var/log/nginx/access.${datestring}.log mv /var/log/nginx/error.log /var/log/nginx/error.${datestring}.log kill -usr1 `cat /var/run/nginx.pid`
getdatestring 関数は、現在の時刻を取得し、次のような文字列としてフォーマットします。 「201807241310」、作成者は日付と時刻をファイル名に付けることを好みます。ここでは、tz='asia/chongqing' によってタイム ゾーンが指定されていることに注意してください。デフォルトの形式は UTC 時間であり、これを使用するのは奇妙であるためです (リアルタイムで 8 時間を補う必要があります)。次の 2 つの mv コマンドは、ログ ファイルの名前を変更するために使用されます。最後に、kill コマンドを使用して usr1 シグナルを nginx マスター プロセスに送信します。
次のコマンドを使用して、rotatelog.sh ファイルに実行可能アクセス許可を追加し、それを $(pwd)/logs/nginx ディレクトリにコピーします。
$ chmod +x rotatelog.sh $ sudo cp rotatelog.sh $(pwd)/logs/nginx
私たちの nginx はコンテナ内で実行されるため、コンテナ内の nginx マスター プロセスに usr1 シグナルを送信する必要があります。したがって、docker exec コマンドを使用して、mynginx コンテナ内のrotatelog.sh スクリプトを実行する必要があります:
$ docker exec mynginx bash /var/log/nginx/rotatelog.sh上記のコマンドを 1 回実行すると、スケジュールどおりに新しいログ ファイルのバッチが生成されます:
以下では、このコマンドをスケジュールされたタスクに設定し、毎朝 1 時に 1 回実行します。 crontab -e コマンドを実行し、ファイルの末尾に次の行を追加します。
* 1 * * * docker exec mynginx bash /var/log/nginx/rotatelog.sh
# ## ############保存して終了。次の図は、作成者のテスト プロセス中に 5 分ごとにスクロールした場合の効果です。
ログ ファイルをホストで直接 mv しないのはなぜですか?
バインドによってマウントされたデータ ボリュームの内容は、ホストから見た場合とコンテナーから見た場合で同じであるため、理論的にはこれが可能です。しかし、実際にこれを行うと、権限の問題が発生する可能性があります。ホスト マシンでは通常、通常のユーザーを使用しますが、コンテナーで生成されるログ ファイルの所有者は特別なユーザーとなり、通常、他のユーザーには書き込み権限と実行権限が与えられません。
ホストから信号を送信できますか?
答えは「はい」です。
著者はこの記事でコンテナでの信号キャプチャの問題を紹介していますので、興味のある方はぜひご覧ください。その記事では、コンテナ内のプロセスにシグナルを送信する docker の kill コマンドを紹介しました。コマンド
$ dockercontainer kill mynginx -s usr
上記 2 つの質問を組み合わせると、Docker で nginx ログをスクロールする別の方法を作成できます。この方法では、docker exec コマンドを使用してコンテナ内でコマンドを実行する必要はありませんが、ホスト上ですべての操作が完了します。
•最初にコンテナ データ ボリューム内のログ ファイルの名前を変更します
以上がDocker で nginx ログをスクロールする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Dockerデスクトップの使用方法は? Dockerデスクトップは、ローカルマシンでDockerコンテナを実行するためのツールです。使用する手順には次のものがあります。1。Dockerデスクトップをインストールします。 2。Dockerデスクトップを開始します。 3。Docker Imageを作成します(DockerFileを使用); 4. Docker画像をビルド(Docker Buildを使用); 5。Dockerコンテナを実行します(Docker Runを使用)。

Dockerバージョンを取得するには、次の手順を実行できます。Dockerコマンド「Docker -version」を実行して、クライアントバージョンとサーバーバージョンを表示します。 MacまたはWindowsの場合は、DockerデスクトップGUIのバージョンタブまたはDockerデスクトップメニューのバージョン情報を表示することもできます。

国内のミラーソースに切り替えることができます。手順は次のとおりです。1。構成ファイル/etc/docker/daemon.jsonを編集し、ミラーソースアドレスを追加します。 2。保存して終了した後、Docker Service Sudo SystemCtlを再起動してDockerを再起動して、画像のダウンロード速度と安定性を改善します。

Docker画像を作成する手順:ビルド命令を含むDockerFileを書きます。 Docker Buildコマンドを使用して、ターミナルで画像を作成します。画像にタグを付け、Dockerタグコマンドを使用して名前とタグを割り当てます。

Docker画像を更新する手順は次のとおりです。最新の画像タグ新しい画像をプルする新しい画像は、特定のタグのために古い画像を削除します(オプション)コンテナを再起動します(必要に応じて)

Dockerログを表示する方法は次のとおりです。たとえば、Docker Logsコマンドを使用します。たとえば、Docker logs container_name docker execコマンドを使用して /bin /shを実行し、logファイルを表示します。 cat /var/log/container_name.log docker-compose -f docker-comのDocker ComposeのDocker-Composeログを使用します。

Dockerに画像を保存するには、Docker Commitコマンドを使用して、指定されたコンテナの現在の状態、Syntax:Docker Commit [Options]コンテナID画像名を含む新しい画像を作成できます。画像をリポジトリに保存するには、Docker Pushコマンド、Syntax:Docker Push Image Name [:Tag]を使用できます。保存された画像をインポートするには、Docker Pullコマンド、Syntax:Docker Pull Image Name [:Tag]を使用できます。

すべてのコンテナ(Docker PS)をリストする手順に従って、Dockerコンテナ名を照会できます。コンテナリストをフィルタリングします(GREPコマンドを使用)。コンテナ名(「名前」列にあります)を取得します。
