Docker チュートリアル: コンテナの使用 (簡単な例)

Docker チュートリアル: コンテナの使用 (簡単な例)

Docker を初めて使用する場合は、コンテナの管理を始めるために習得する必要がある基本的なコマンドをいくつか確認してください。

Docker はソフトウェア開発ライフサイクルに大きな影響を与え、大規模なソフトウェアの展開をシンプルかつ安全なものにしました。このチュートリアルでは、Docker コンテナの実行、起動、停止、削除の基本について説明します。

Docker を使用すると、同じホスト上の異なるオペレーティング システムで異なるプログラミング言語を簡単に使用できるようになります。

Docker の背後でソフトウェアを展開することがはるかに簡単になり、システム構成や前提条件を見落とす心配がなくなります。

Docker と仮想マシン

仮想化を使用してソフトウェアを実行している場合、代わりに Docker が必要になるのはなぜですか?

両者の主な違いは、Docker はネイティブ オペレーティング システム内で実行される別のプロセスであるのに対し、VM はホスト オペレーティング システム上で実行される完全に分離されたオペレーティング システムであり、読み込みに時間がかかることです。そのため、Docker には仮想マシンよりも次のような利点があります。

  • 読み込み速度は仮想マシンとは異なり、必要なハードウェア リソースはごくわずかです。
  • 同じオペレーティング システム上で複数の Docker コンテナを同時に実行します。
  • コンテナを変更してデプロイしたり、Docker ファイルの定義を友人に渡して同じ環境で作業させたりすることができます。

実際、Docker は仮想マシンの代替ではなく、特定の問題を解決します。

アプリケーションが異なるオペレーティング システムで実行される 3 つ以上のサービスを必要とする場合、同じホスト上で 3 つの仮想マシンを実行する代わりに、同じホスト上で 3 つのコンテナーをスムーズに実行できます。素晴らしいですね!

コンテナを実行する

始める前に、Docker が適切にインストールされ、コマンドを受け入れる準備ができていることを確認してください。新しいターミナル ウィンドウに次のコマンドを入力します。

$ docker -v

上記のコマンドは、PC にインストールされている Docker のバージョンを出力します。

Docker version 17.12.0-ce-rc2, build f9cde63

コンテナの実行を開始します。

$ docker container run alpine echo "Hello World"

上記のコマンドを初めて実行すると、ターミナル ウィンドウに次のような出力が表示されます。

それは簡単ですよね?同じコマンドをもう一度実行してみてください:

$ docker container run alpine echo "Hello World"

上記のコマンドを 2 回目、3 回目、または n 回目に実行すると、ターミナルに次の出力が表示されます。

Hello World

コンテナを正常に実行できたので、次は何が起こったのかを分析します。次のコマンドを参照してください。

$ docker container run alpine echo "Hello World"

このコマンドはいくつかの部分で構成されています。まず、「docker」という言葉があります。これは、コンテナの実行を担当する Docker エンジンと対話するために使用される Docker コマンドライン インターフェイス (CLI) の名前です。

次に、「コンテナ」という単語があります。これは、作業しているコンテキストを示します。

次のステップは、実際にコマンド run を実行することです。

ここで、どのコンテナを実行するかを Docker に伝える必要があります。ここでは、アルパインコンテナが動作しています。

最後に、コンテナの実行時にコンテナ内で実行されるプロセスまたはタスクのタイプを定義する必要があります。これはコマンドの最後の部分で、echo "Hello World" です。

コンテナ内でプロセスを実行する

コンテナを実行するコマンドの各部分を理解できたので、別のコンテナで別のプロセスを実行してみましょう。
$ docker container run centos ping -c 5 127.0.0.1

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

上記の例では、使用されているコンテナ イメージは CentOS であり、CentOS コンテナ内で実行されるプロセスは ping -c 5 127.0.0.1 であり、ループバック アドレスが停止するまで 5 回 ping を実行します。

最初の行は次のとおりです。

Unable to find image 'centos:latest' locally

これは、Docker がシステムのローカル キャッシュ内に centos:latest というイメージを見つけられなかったことを示しています。したがって、Docker は、コンテナが保存されているイメージ リポジトリからイメージをプルする必要があることを認識します。

デフォルトでは、Docker 環境は hub.docker.com の Docker Hub からイメージをプルするように構成されています。これは 2 行目で次のように表されます。

latest: Pulling from library/centos

次の 3 行の出力は次のとおりです。

85432449fd0f: Pull completeDigest: sha256:3b1a65e9a05...Status:

これは、Docker が Docker Hub からイメージ centos:latest を正常にプルしたことを示しています。

後続の出力は、コンテナ内で実行されているプロセス (この場合は ping ツール) によって生成されます。

また、「latest」というキーワードが数回出現していることに気付くかもしれません。各イメージにはバージョン (タグとも呼ばれます) があり、バージョンが明示的に指定されていない場合、Docker は自動的に最新バージョンであると想定します。

システム上でこのコンテナを再度実行すると、Docker がコンテナ イメージをローカルにキャッシュしているため、最初にダウンロードする必要がないため、前の 5 行は出力されません。これが事実かどうか確認してみてください。

ランダム参照コンテナを実行する

ランダム ステートメント コンテナーを実行するには、ランダム ステートメントを生成するアルゴリズムが必要です。これらのランダムなステートメントを生成するためのAPIはここにあります[1]。
ここでの目標は、コンテナ内で 5 秒ごとにランダムなステートメントを生成し、それを STDOUT に出力するプロセスを実行することです。


スクリプトを停止するには、Ctrl+C を押します。出力は次のようになります。


各応答は、引用、著者、およびそのカテゴリを含む JSON 形式の文字列です。
それでは、このコンテナをバックグラウンドで実行してみましょう。これを行うには、前のスクリプトを 1 行に縮小し、/bin/sh -c "..." を使用して実行する必要があります。 Docker の表現は次のとおりです。

$ docker コンテナ実行 -d --name quotes alpine \ /bin/sh -c "while :; do wget -qO- https://talaikis.com/api/quotes/random; printf '\n'; sleep 5; done"

上記の式では、-d と --name という 2 つのコマンド ライン パラメータを使用しました。 -d は、コンテナを Linux デーモンとして実行するように Docker に指示します。 -name パラメータは、コンテナの明示的な名前を指定するために使用されます。

明示的なコンテナ名を指定しない場合、Docker はコンテナにランダムかつ一意の名前を自動的に割り当てます。名前は有名な科学者の名前と形容詞で構成されます。

たとえば、「boring_borg」や「angry_goldberg」などです。かなり面白いですね。

重要な点は、コンテナ名が一意である必要があることです。引用コンテナが起動して実行されていることを確認します。

$ docker container ls -l

前の出力の重要な部分は STATUS 列で、この場合は UP 16 秒と表示されています。これは、コンテナが 16 秒間稼働していることを意味します。

リストコンテナ

時間の経過とともにコンテナを実行し続けていると、システムには多くのコンテナが存在するようになる場合があります。ホスト上で現在実行中のコンテナを見つけるには、次のように container ls コマンドを使用します。

$ docker container ls

これにより、現在実行中のすべてのコンテナが一覧表示されます。
デフォルトでは、Docker は次の意味を持つ 7 つの列を出力します。

システムで定義されているすべてのコンテナを一覧表示する場合は、次のようにコマンドライン パラメータ -a または -all を使用できます。

$ docker container ls -a

これにより、作成済み、実行中、終了済みなど、あらゆる状態のコンテナが一覧表示されます。

場合によっては、すべてのコンテナの ID を一覧表示したいこともあります。これには -q パラメータがあります:

$ docker container ls -q

これが何の役に立つのか疑問に思うかもしれません。次に例を示します。

$ docker container rm -f $(docker container ls -a -q)

上記のコマンドは、停止されたコンテナも含め、システム上で現在定義されているすべてのコンテナを削除します。 rm コマンドは削除を意味し、このチュートリアルでさらに詳しく説明します。
前のセクションでは、list コマンドで -l パラメータを使用しました。 -l パラメータの意味を確認するには、Docker ヘルプを使用してください。次のようにして、list コマンドのヘルプを呼び出すことができます。
$ dockerコンテナls -h

コンテナの停止と起動

場合によっては、実行中のコンテナを一時的に停止する必要があることがあります。このコンテナを試してください:

$ docker コンテナ実行 -d --name quotes alpine \ /bin/sh -c "while :; do wget -qO- https://talaikis.com/api/quotes/random; printf '\n'; sleep 5; done"

次のコマンドでこのコンテナを停止できます。

$ docker container stop quotes

コンテナを一時停止しようとすると、完了するまでにしばらく (約 10 秒) かかることがあります。なぜこのようなことが起こるのでしょうか? Docker は、コンテナ内で実行されているメイン プロセスに Linux SIGTERM シグナルを送信します。

上記のコマンドでは、コンテナの名前を使用して、停止するコンテナを指定します。コンテナIDも使用できます。

コンテナ ID を取得するにはどうすればよいですか?

これを行うにはいくつかの方法があります。手動の方法は、実行中のすべてのコンテナを一覧表示し、リストから探しているコンテナを見つけることです。そこからIDをコピーするだけです。
より自動化されたアプローチとしては、シェル スクリプトと環境変数を使用することです。たとえば、引用コンテナの ID を取得する場合の例を次に示します。

$ export CONTAINER_ID = $(docker container ls | grep quotes | awk '{print $1}')

ここでは、AWK を使用して最初のフィールド (コンテナ ID) を取得します。これで、コンテナ名を使用する代わりに、式で $CONTAINER_ID 変数を使用できるようになりました。

$ docker コンテナを停止 $CONTAINER_ID

コンテナが停止されると、そのステータスは「終了」に変わります。

停止したコンテナは、docker container start コマンドを使用して再起動できます。

コンテナの削除

docker container ls -a コマンドを実行すると、多数のコンテナが「Exited」状態になっていることがわかります。

これらのコンテナーが不要になった場合は、メモリから削除することをお勧めします。そうしないと、貴重なリソースが消費されてしまいます。コンテナを削除するコマンドは次のとおりです。

$ docker container rm <container ID>

あるいは、次のコマンドを使用することもできます。

$ docker container rm <container name>

実行中のコンテナを削除できない場合があります。強制的に削除する場合は、コマンドライン パラメータ -f または --force を使用できます。
コンテナ化により業界の運営方法が変わり、メンテナンスコストが 50% 以上削減され、市場投入までの時間が約 90% 短縮されました。さらに、コンテナを使用すると、コンテナ外で実行するよりもアプリケーションが安全になります。

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。

以下もご興味があるかもしれません:
  • Dockerイメージ送信コマンドcommitの動作原理と使い方の詳細な説明
  • Dockerネットワークの仕組み
  • Dockerコンテナが使用するリソースを表示する方法の詳細な説明
  • Dockerの動作モードと原理の詳細な説明

<<:  Vue で変数式セレクターを実装する方法

>>:  MySQL サービスを起動できない問題の解決策を含む MySQL 5.7.17 インストール チュートリアル

推薦する

MySQLグループリンクの使用に関する詳細な説明

MYSQL におけるグループ化とリンクは、データベースの操作やデータのやり取りで最もよく使用される ...

js キャンバスで円形の水のアニメーションを実現

この記事の例では、円形の水のアニメーションを実現するためのキャンバスの具体的なコードを参考までに共有...

Reactでコンポーネントがどのように通信するかの詳細な説明

1. 何ですかコンポーネント間の通信は、次の 2 つの単語に分けることができます。コンポーネントコ...

MySQL でパーセンテージと最初の数パーセントを表示する方法

目次必要とする実装コードデータベース数日前、友人からこれを書くのを手伝ってほしいと頼まれました。ただ...

Dockerコンテナの個別展開のためのLNMPの実装

1. 環境整備各コンテナの IP アドレス: nginx: 172.16.10.10マイSQL: 1...

MySQL の大きなデータ テーブルにフィールドを追加する方法

序文フィールドの追加は誰でもよく知っていると思います。簡単に記述できます。MySQL テーブルにフィ...

vue-router 履歴モード サーバー側設定プロセス記録

歴史ルート履歴モードとは、HTML5 の履歴 API を使用してクライアント側ルーティングを実装する...

CSS で平均レイアウトを実現するために負のマージンを使用する例

均等に分散されたレイアウトの場合、通常はネガティブ マージン方式を使用します。次の図は平均的なレイア...

HTML <!--...--> コメントタグの役割の詳細な分析

多くのウェブサイトのソースコードを確認すると、多くのコメントが見つかります。特に、ソース文書にコメン...

Linux で推奨される 9 つの優れたコード比較ツールの概要

コードを書くとき、2 つのファイル間の違い、または同じファイルの異なるバージョン間の違いを知る必要が...

Flex プログラム Firefox で中国語を入力すると文字化けするバグ

Firefox の下位バージョンでは中国語の文字を入力できず、上位バージョンでは文字化けした文字が表...

Linuxの一般ユーザー向けスケジュールタスクの詳細な説明

序文通常のユーザーはcrontabスケジュールタスクを定義します。たとえば、Oracleユーザーはス...

mysql-8.0.16 winx64 最新インストール チュートリアル (画像とテキスト付き)

最近、データベースについて学び始めました。最初にやったことは、データベースとは何か、データベースとデ...

docker を使用して kafka プロジェクトをデプロイする Centos6 方法の分析

この記事では、Docker を使用して Centos6 に Kafka プロジェクトをデプロイする方...

HTML 挿入画像の例 (HTML 追加画像)

HTML に画像を挿入するには、画像を表示するための HTML タグが必要です。これは、img タ...