GNU/Linux >> Linux の 問題 >  >> Panels >> Docker

3さまざまなシナリオで役立つ未知のDockerコマンド

Dockerをしばらく使用している場合は、お気に入りのDockerコマンド(技術的に正しいサブコマンド)を含む、シンプルで効果的なワークフローがすでに用意されているはずです。

たとえば、 docker container rm $(docker container ps -qf status =exited)のような長いコマンドを使用して、実行されていないコンテナーを削除していました。 、それは機能し、ぶら下がっているコンテナがない場合は明らかにエラーをスローしました。ある日、 pruneもあることがわかったときにこれは止まりました コンテナのサブコマンド!これで、長いコマンドは単純な<​​code> docker container pruneになりました。 。

重要なのは、私たちの多くがDockerをしばらく使用しているにもかかわらず、いくつかのことが見落とされたり、時間の経過とともに忘れられたりする可能性があるということです。

この記事では、3つのdockerサブコマンドを紹介します。これは、初めての場合もあれば、あまり使用していない場合もありますが、そうすべきだと思います。

これらのサブコマンドには、独自のサブコマンドが含まれる場合もあります。

1。システムサブコマンド

Dockerにはシステムがあります いくつかを与えるコマンド Dockerに関連するシステムレベルの情報。あなたは実際にしばらくの間そのサブコマンドの1つを使用しています。 docker infoを覚えておいてください ?このコマンドは実際にはdockersystem info

このサブコマンドとその機能について詳しくは、-helpを実行してください。 その上のオプション。

➟ docker system --help

Usage:  docker system COMMAND

Manage Docker

Commands:
  df          Show docker disk usage
  events      Get real time events from the server
  info        Display system-wide information
  prune       Remove unused data

Run 'docker system COMMAND --help' for more information on a command.

これらのサブコマンドはすべて非常に重要だと思うので、それぞれを見ていきましょう。

ドッカーシステムdf

サーバーのディスクスペースがほぼいっぱいになっているように見える状況になったことはありますか?それがコンテナ(実行中/ボリューム)であるかどうかを調べるには、おそらく duを使用しています。 データルートで直接コマンドを実行します。

データルートまたはデータルートは、Dockerがその状態に関連するすべてのデータを格納する場所です。これには、イメージ(レイヤー)、ボリューム、ネットワーク関連情報、プラグインが含まれますが、これらに限定されません。

duを使用する データルートにはsudoが必要です アクセス。

✗ du -h --max-depth=1 /var/lib/docker
du: cannot read directory '/var/lib/docker': Permission denied
4.0K    /var/lib/docker

それだけでなく、ボリュームまたはイメージが割り当てられている量を明示的に知るには、コマンドを数回実行する必要があります。

➟ sudo du -h --max-depth=0 /var/lib/docker/volumes && \
    sudo du -h --max-depth=0 /var/lib/docker/image && \
    sudo du -h --max-depth=0 /var/lib/docker/

より良い代替手段は、 docker system dfを呼び出すことです。 指図。これにより、データルートが自動的に検出され、Dockerコンテナ、イメージ、ボリュームによるディスク使用量に関するすべての情報が出力されます。

これが私の現在のシステムが示しているものです(これは新規インストールです)

➟ docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          10        1         84.17MB   84.17MB (100%)
Containers      1         1         8.219MB   0B (0%)
Local Volumes   0         0         0B        0B
Build Cache     0         0         0B        0B
ドッカーシステムの整理

(1)すべての未使用のネットワーク、(2)ぶら下がっているイメージ、(3)停止したコンテナー、(4)すべての未使用のボリュームを削除したい場合は、使用した可能性が高いか、4つの別々のコマンドを使用して仕事。

docker network prune && \
    docker image prune && \
    docker volume prune && \
    docker container prune

container pruneについて以前に知らなかった場合 私のように、コマンドはさらに大きくなります。幸運なことに、これはすべて、 docker system prune --volumesという単純なコマンドを使用して実行できます。 。

デフォルトでは、 docker system prune ボリュームは削除されません。そのため、-volumesを使用する必要があります。 オプション。このコマンドはさらに、ビルドキャッシュもクリアします。

-fを使用できます (時々)迷惑なプロンプトを回避するためのオプション。以下の例を参照してください:

➟ docker system prune --volumes -f
Deleted Containers:
672d39c1a78969887f411ce9139e74e5b21c31fccf2bcf8c1190a9e166089ede

Deleted Networks:
Example
SSHnet
Dummy

Deleted Volumes:
dummy

Total reclaimed space: 0B

その他のオプションには、 -aが含まれます ぶら下がっている画像だけでなく、未使用の画像もすべて削除されます。

Dockerシステムイベント

このコマンドは常に役立つとは限りませんが、誰もが知っておくべきことだと思います。

dockerシステムイベント またはdockerevents 略して、dockerデーモン( dockerd )のリアルタイムイベントを直接提供します )。これは、たとえば、画像が削除されたときなどの特定のイベントを監視するのに役立ちます。

これをよりよく理解するには、以下のスクリーンショットを参照してください。

2。コンテキストサブコマンド

これは、私が知る限り、多くの人が気付いていないもう1つの美しいサブコマンドです。 Dockerコマンドの実行のコンテキストは、いくつかのキーと値のペアです。これには、エンドポイント、ホスト、場合によっては構成ファイルなどが含まれますが、これらに限定されません。

コンテキストを作成したら、後で再利用できます。

特に私にとって最大の実用的なユースケースの1つは、Dockerを実行している個々のサーバーに対して個別のコンテキストを作成することです。私の仕事のほとんどはそれを中心に展開しているので、毎回サーバーにログインする代わりに、SSH経由でdockerサーバーを削除するローカルクライアントを使用します。

Dockerデーモンへのリモートアクセスを設定する方法[詳細ガイド]リモートサーバーにSSHで接続してから、dockerコマンドを実行したくないですか?他の利点もあるリモートDockerアクセス​​を設定できます。 Linux HandbookDebdut Chakraborty

Dockerコンテキストでこれを実現する方法を紹介します。

まず、Dockerを実行しているサーバーをLinodeにデプロイします。コンテキストなしでリモートDockerデーモンにアクセスする場合は、次のようなコマンドを使用します

➟ docker --host ssh://[email protected]:7770 ps
CONTAINER ID   IMAGE                                    COMMAND                  CREATED       STATUS       PORTS                                                                      NAMES
bb4fa8390ab7   jrcs/letsencrypt-nginx-proxy-companion   "/bin/bash /app/entr…"   2 hours ago   Up 2 hours                                                                              reverse-proxy_letsencrypt_1
ccdda507facb   jwilder/nginx-proxy                      "/app/docker-entrypo…"   2 hours ago   Up 2 hours   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   reverse-proxy_reverse_proxy_1

したがって、リモートデーモンにアクセスするには、 dockerのエイリアスを作成する必要があります。 docker --host ssh://[email protected]:7770へ 、または環境変数 DOCKER_HOSTを使用します 。しかし、これらは他のホストへの切り替えを非常に困難にします。より簡単な代替手段は、コンテキストを作成することです。

次のコマンドは、 remoteという名前のコンテキストを作成します 、ローカルとは異なるホストを持つDockerエンドポイントの場合。

docker context create remote --description "Remote docker server" --docker "host=ssh://[email protected]:7770"

出力は次のようになります:

➟ docker context create remote --description "Remote docker server" --docker "host=ssh://[email protected]:7770"
remote
Successfully created context "remote"

これで、 -cを使用できます dockerのオプション 何かをすばやくチェックしたり、繰り返し操作したりする場合は、コンテキストをこの新しいコンテキストに変更してください。

-cを使用 オプション:

➟ docker -c remote ps
CONTAINER ID   IMAGE                                    COMMAND                  CREATED       STATUS       PORTS                                                                      NAMES
bb4fa8390ab7   jrcs/letsencrypt-nginx-proxy-companion   "/bin/bash /app/entr…"   2 hours ago   Up 2 hours                                                                              reverse-proxy_letsencrypt_1
ccdda507facb   jwilder/nginx-proxy                      "/app/docker-entrypo…"   2 hours ago   Up 2 hours   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   reverse-proxy_reverse_proxy_1

docker contextでは、[CONTEXT_NAME]を使用します :

➟ docker context use remote
remote
Current context is now "remote"
~ 
➟ docker ps
CONTAINER ID   IMAGE                                    COMMAND                  CREATED       STATUS       PORTS                                                                      NAMES
bb4fa8390ab7   jrcs/letsencrypt-nginx-proxy-companion   "/bin/bash /app/entr…"   2 hours ago   Up 2 hours                                                                              reverse-proxy_letsencrypt_1
ccdda507facb   jwilder/nginx-proxy                      "/app/docker-entrypo…"   2 hours ago   Up 2 hours   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   reverse-proxy_reverse_proxy_1

コンテキストから抜け出すには、 useを使用します defaultのサブコマンド コンテキスト名の場合:

➟ docker context use default
default
Current context is now "default"
~ 
➟ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

3。一時停止と一時停止解除のサブコマンド

現在、大規模な展開(アプリケーション)は、マイクロサービスとしてよく知られている複数のコンポーネントに分割されています。 docker-composeのようなものを使用してそれらをデプロイすると、依存するコンポーネントの前に1つのコンポーネントが起動することがあります。依存関係(または複数の依存関係)がまだ開始されていないため、このコンポーネントは開始に失敗するため、これは問題です。

Dockerで再起動ポリシーを使用することでこの問題を軽減できますが、失敗した試行でログがフラッディングするのを防ぐことはできません。私が最初に行っていたのは、依存関係が完全に開始されるまでコンテナ/サービスを停止することでした。

より良い方法は、コンテナをしばらく一時停止することです。必要なサービスが正常に起動したら、コンテナの一時停止を解除すると、そこからすべてが正常に進みます。

コンテナは高速で起動しますが、これはそのような問題に対処するためのさらに高速な方法です。

pauseの構文 およびunpause とてもシンプルです。

docker pause [CONTAINER_NAME|ID]
docker unpause [CONTAINER_NAME|ID]

これで、今のところこの記事は終わりです。そのようなコマンドが有用または興味深いものであることがわかった場合は、それに応じてこの記事を更新します。

このリストに含めるべきだと思うDockerコマンドはありますか?下のコメントで知らせてください。


Docker
  1. システムをシャットダウンするための3つのLinuxコマンドとあなたはそれを簡単に行うことができます

  2. 一部のDOCKERコマンド

  3. Dockerでデータベースを実行する必要がありますか?

  1. 20OpenSSLコマンド知っておくべき例

  2. Docker(Debianベースのオペレーティングシステム)をインストールする

  3. Linux で絶対に実行してはならない 10 の致命的なコマンド

  1. あなたを笑わせることができるLinuxの12の面白いコマンド

  2. DockerコンテナにSSHで接続してコマンドを実行する方法

  3. Dockerコマンドクイックリファレンスチートシート