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

これらのDocker実行例を使用してDevOpsゲームを強化する

docker run commandは、Dockerのインストール後に学習する必要がある最初のコマンドの1つです。しかし、他にどのようにdocker runを使用できるのか疑問に思ったことはありませんか。 アプリケーションを効果的に展開および管理するためのコマンド? Dockerの実行例(docker run)を1つ見ていきます。 素晴らしいことだ。しかし、何を推測してください、あなたはこのチュートリアルでより多くを得るでしょう!

この記事では、ワークフローを改善するために使用できるDockerの実行例を使用してDevOpsゲームをアップする方法を学習します。

読み進めて、Dockerコマンドを再度実行しても失われることはありません!

前提条件

このチュートリアルは、実践的なデモンストレーションになります。フォローする場合は、次のものがあることを確認してください。

  • Linuxマシン–このデモはUbuntu 20.04を使用していますが、どのLinuxディストリビューションでも機能します。 Ubuntuをインストールする方法は次のとおりです。
  • Dockerがマシンにインストールされています。
  • root /sudo権限を持つユーザーアカウント。

Docker実行の例1:コンテナをインタラクティブに実行する

しばらくの間コンテナを実行している可能性がありますが、Dockerコンテナをインタラクティブモードで実行するための好ましい状況がいくつかあることをご存知ですか?

Dockerを使用すると、次の場合にインタラクティブモードでコンテナーを実行できます。

  • 問題のトラブルシューティングを行っているため、コンテナ内で実行されたコマンドの出力を確認する必要があります。
  • 新しいDockerコマンドを試していて、コマンドの結果をリアルタイムで確認したい。
  • コンテナ内で、手動入力が必要なプロセスを実行しています。

Dockerの実行例を実行する場合(docker run )オプションのないコマンドの場合、デフォルトの動作は、コンテナをインタラクティブモードで実行することです。コンテナをインタラクティブモードで実行すると、端末のコンテナで実行されたコマンドの出力を確認できます。

1.次のコマンドを実行して、コンテナーを実行します(my_nginx )インタラクティブモードで公開(-p )ポート80 コンテナのポート8080への あなたのホストマシンの。コンテナの名前は好きなように変更できます。

このコマンドはnginxを使用します Dockerハブからのイメージを使用してコンテナーを作成し、自動的に削除します(--rm )コンテナが停止したときのコンテナ。

docker container run --rm --name my_nginx -p 8080:80 nginx

root以外のユーザーを使用しているため sudo特権 、Dockerコマンドを実行するときにsudoを付加する必要はありません

以下に示すように、ターミナルにnginxウェブサーバーのログ出力が直接表示されます。

インタラクティブコンテナを実行すると多くの情報が提供されますが、必要な情報だけを除外したい場合もあります。その場合は、以下に示すように、-aフラグを追加し、コンテナーの標準ストリーム(-a)を指定します。

標準ストリームを指定すると、My_nginxコンテナのstdout出力のみを表示するようにDockerに指示されます。

docker container run -a stdout --rm --name my_nginx -p 8080:80 nginx

デフォルトでは、-aフラグを指定しない場合、stdin、stdout、およびstderrはすべて端末に接続されます。 -aフラグは次の引数を取り、出力を整理して関連情報のみを表示するのに役立ちます。

  • -a stdinstdinを添付します コンテナに送信し、端末のすべての入力をコンテナに送信します。
  • -a stdoutstdoutを添付します コンテナに、コンテナによって生成されたすべての出力を端末に表示します。
  • -a stderrstderrを添付します コンテナに送信され、コンテナによって生成されたすべてのエラーメッセージが端末に表示されます。

以下から、出力がすっきりしていることがわかります。

2.次に、別のターミナルを開き、docker ps を実行します コマンドを実行して、ホストマシンで実行されているコンテナのリストを表示します。

docker ps

以下に、出力にリストされているmy_nginxコンテナーを示します。

3.最後に、curlを実行します 以下のコマンドを使用して、nginxWebサーバーをテストします。

curl http://localhost:8080

以下に、出力が生成されるとすぐに、nginx Webサーバーのログ出力がターミナル(左側)に表示されることがわかります。

Dockerの実行例2:コンテナをデタッチモードで実行する

コンテナをインタラクティブモードで実行し、実行時にターミナルで出力を確認する方法を学びました。ただし、ターミナルでコンテナの出力を監視していない場合は、コンテナをデタッチモードで実行できます。

デタッチモードでは、コンテナはバックグラウンドで実行され、ターミナルのコンテナで実行したコマンドの出力は表示されません。

次のコマンドを実行して、コンテナーを実行します(my_nginx )デタッチモード(-d

docker container run --rm --name my_nginx -d -p 8080:80 nginx

コンテナがデタッチモードで実行されると、Dockerは出力をコンテナのログにリダイレクトします。この時点で、my_nginxコンテナは、以下に示すように、バックグラウンドコマンド出力で実行されています。

また、出力に一意のコンテナIDが表示されます。このIDを使用して、コンテナーを接続したり、コンテナーを開始/停止/削除したりできます。

次に、docker ps を実行します コマンドを実行して、ホストマシンで実行されているコンテナのリストを表示します。

コンテナ(my_nginx)はバックグラウンドで実行されているため、新しいターミナルを開かなくても任意のコマンドを実行できます。

docker ps

次の出力が表示されます。これは、 my_nginxを示しています。 コンテナは現在、デタッチモードで実行されています。

何らかの理由で、コンテナがデタッチモードで実行されているときにNGINXウェブサーバーが正しく機能しない場合は、実行中のコンテナに端末を接続する必要があります。 docker attachを実行すると、実行中のコンテナにアタッチできます コマンドの後にコンテナのIDまたは名前(my_nginx )、以下に示すように。

docker container attach my_nginx

以下に示すように、 my_nginxへの接続に成功しました 容器。これで、問題の根本的な原因を特定して修正できます。

ブリッジネットワークの作成

Dockerを使用する利点の1つは、コンテナーネットワークを管理することです。 Dockerを使用すると、ネットワークの構成について心配する必要はありません。 Dockerはネットワークを自動的にセットアップします。ネットワークの作成、コンテナのネットワークへの接続、IPアドレスの管理などが含まれます。

Dockerがコンテナのネットワークを設定し、ブリッジネットワークを作成する方法をご覧ください。

1. dockerを実行します 以下のコマンドを実行して、ホストマシン(--net=host)上のネットワークリソースに完全にアクセスできるUbuntuコンテナを実行します。 )、これはデバッグに便利です。

-tiオプションは、コンテナーをインタラクティブモードに保つようにDockerに指示します。 Bashシェルを使用している場合は、このオプションを指定する必要があります。 「コンテナのインタラクティブな実行」セクションのようにこのコマンドを実行しても機能しません。

docker run -ti --rm --net=host ubuntu bash

2.次に、apt updateを実行します コンテナ内のコマンドを使用して、パッケージリストを更新します。

apt update -y

3.以下のコマンドを実行して、installを実行します bridge-utils パッケージ。このパッケージは、ブリッジデバイスを作成および管理するために必要です。

apt install bridge-utils

4.次に、次のbrctl showを実行します。 システム上のブリッジネットワークを一覧表示するコマンド。

brctl show

次の出力のようなブリッジネットワークのリストが表示されます。 docker0という名前のブリッジデバイスがあることに注意してください。このネットワークは、カスタムブリッジ仮想ネットワークを指定しない場合にDockerがコンテナーの仮想ネットワークを作成するために使用する仮想ネットワークです。

5.別の端末を開き、docker networkを実行します 以下のコマンドを使用して、新しいネットワークを作成します。ネットワークには別の名前を付けることができますが、このチュートリアルでは、ネットワークの名前はmy-ata-networkです。 。

docker network create my-ata-network

以下に示すように、一意のネットワークIDが返されます。後で新しいブリッジネットワークIDと照合するため、ネットワークIDを書き留めておきます(ステップ6)。

6. Ubuntuコンテナターミナルに戻り、次のコマンドを実行してブリッジネットワークを一覧表示します(show )システム上で再び。

brctl show

以下に示すように、br-d9ba7f94ac73という名前の出力にリストされた新しいブリッジネットワークが表示されます。 d9ba7f94ac73の部分が、手順5で返されたネットワークIDと一致していることがわかります。

この出力は、Dockerがmy-ata-networkという名前の新しいブリッジネットワークを作成し、そのブリッジネットワークにUbuntuコンテナを追加したことを確認します。

Dockerの実行例3:ポートフォワーディングを使用したコンテナーの実行

Dockerは、Linuxカーネルに組み込まれているファイアウォール機能、つまりiptablesを使用します。 コマンド、ファイアウォールルールを作成します。これらのファイアウォールルールは、パケットがブリッジ間で送信されるタイミングを制御し、したがって、それらのブリッジに接続されたコンテナで使用できるようになります。

Dockerがiptablesを使用して内部でポート転送をどのように実現するかを見てみましょう。 。

1.次のコマンドを実行して、特権Ubuntuコンテナを起動します(--privileged=true )ポート転送を含む、ホスト上のすべてのネットワークリソースへのフルアクセス。

docker run -ti --rm --net=host --privileged=true ubuntu bash

2.次に、以下のコマンドを実行してupdate パッケージリストとinstall iptables

apt update && apt install iptables

3. iptablesを実行します リストする特権Ubuntuコンテナで以下のコマンド(-Lnat テーブルルール。

iptables -n -L -t nat

以下に表示されているのは、Ubuntuに付属しているデフォルトのルールです。

4.次に、以下のコマンドを実行して、Ubuntuを実行します。 ポート8080でホストにポート転送するコンテナ 。

docker run -ti --rm -p 8080:8080 ubuntu bash

5.最後に、iptablesを再実行します 以下のコマンドでnatを一覧表示します テーブルルール。

iptables -n -L -t nat

以下に、新しいルールが追加され、すべてのパケットがホストのポート(8080)からコンテナのポート(8080)に転送されることに注意してください。 Dockerでポートを公開することは、ネットワーク層でのポート転送にすぎないことがわかります。

ユーザー定義ネットワークの作成

Docker DCA試験では、開発者向けのブリッジネットワークを作成するように求められる場合があります。どのように? docker networkを使用する コマンドを使用すると、ブリッジネットワーク(ユーザー定義の仮想ネットワーク)を作成できます。 docker network さまざまなネットワーク上のコンテナが通信する方法を提供します。

1. docker networkを実行します 以下のコマンドを使用して、ata-app-netという名前の新しいブリッジネットワークを作成します。 bridgeを使用する 運転者。

docker network create --driver bridge ata-app-net

2.次に、次のコマンドを実行してリストします(ls )ホスト上のブリッジネットワーク。

docker network ls

以下で、ata-app-netという名前の新しいユーザー定義のブリッジネットワークが作成されていることに注意してください。

3.以下のコマンドを実行して表示します(inspectata-app-netの詳細 ブリッジネットワーク。

docker network inspect ata-app-net

以下では、ata-app-netブリッジネットワークに単一のサブネット(172.21.0.0/16)があることに注意してください。このサブネットは、ブリッジネットワークを作成するときに自動的に割り当てられます。ブリッジネットワークに関連付けられているドライバー(ブリッジ)も表示されます。

4.次に、このDocker実行例を実行します(docker run )以下のコマンドを使用して、ユーザー定義のブリッジネットワークでいくつかの高山コンテナを実行し、相互にpingを試行します。

docker run -dit --name ata-app1 --network ata-app-net alpine ash

5. docker ps を実行します 実行中のコンテナを一覧表示するコマンド。

docker ps

以下に示すように、両方のコンテナが実行されています。

6.以下のdockernetworkコマンドを再実行して、inspectを実行します。 あなたのata-app-net ブリッジネットワーク。

docker network inspect ata-app-net

以下に、2つのコンテナがIPアドレスと名前とともにata-app-netブリッジネットワークに接続されていることを確認できます。

7.次に、docker container attachを実行します 以下でata-app1に接続します 容器。

docker container attach ata-app1

8. ata-app2にpingを実行します コンテナが相互に通信できることを確認します。

ping ata-app2

9.次に、google.comにpingを実行します ata-app1 インターネットと通信できます。

ping google.com

10.最後に、手順7〜9を繰り返して、ata-app2に接続します。 ata-app1にpingを実行します 。

必ずCTRL+PQを押して、ata-app1コンテナーから切り離し、実行を続けてください。そうしないと、コンテナが停止し、ata-app2からata-app1にpingを実行すると、pingコマンドが失敗します。

docker container attach ata-app2
ping ata-app1
ping google.com

以下に、すべてのパケットが送受信されていることを確認します。これにより、両方のコンテナが相互に通信でき、インターネットと通信できることが確認されます。

結論

このチュートリアルでは、Dockerの実行例(docker run)を数多く学びました。 )アプリケーションのデプロイと管理を容易にするために使用できます。 docker runを理解することで、Dockerをより効果的に使用できるようになりました。 ■Dockerがコンテナのネットワークを設定する方法。

この時点で、Dockerの実行例(docker run)を利用する方法をすでに知っています。 )DevOpsゲームを強化するためのコマンド。

この知識があれば、アプリケーションをより効率的かつスケーラブルな方法でデプロイしてみませんか?


Docker
  1. DockerコンテナでNginxを実行する方法:ステップバイステップガイド

  2. LinodeにDockerを使用してnginxコンテナをデプロイする方法

  3. DockerコンテナでMySQLを実行する方法

  1. Dockerコンテナ内でプログラムを実行する方法は?

  2. 最初のDockerWindowsServerコンテナの作成

  3. Dockerの実行と開始と作成:違いの説明

  1. 例を使用してDockerRunコマンドを使用する方法

  2. DockerコンテナにApacheを使用してModSecurityをインストールする

  3. 実行中のDockerコンテナでコマンドを実行する方法