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については、データ型と操作テーブルを知る必要があります

データ型と操作データテーブル1.1 MySQL 型: 整数 1.2 MySQL データ型: 浮動小数...

WeChatミニプログラムは同時通訳を利用して音声認識を実装します

私は同時通訳音声認識機能を使用して、WeChatアプレットのホームページの音声検索機能を実現しました...

Vue-Routerのインストールプロセスと原理の詳細

目次1. フロントエンドルーティングの実装原則2. vue-Routerの基本的な使い方2.1. イ...

MySQL 8.0 に移行する際の注意点 (要約)

パスワードモードPDO::__construct(): サーバーがクライアントに不明な認証方法を要求...

MySQL バッチ挿入ループの詳細なサンプルコード

背景数日前、MySql でページングを行っていたときに、ページングに制限 0,10 を使用するとデー...

docker+gitlab+gitlab-runnerの詳細なデプロイメント

環境サーバー: centos7クライアント: ウィンドウCentos7 に docker+gitla...

Linux でパスワードの有効期限を表示および設定する方法

適切な設定を行うことで、Linux ユーザーにパスワードを定期的に変更させることができます。パスワー...

Vue2は応答性を提供するためにprovide injectを実装しています

1. vue2 での従来の書き方 // 親コンポーネントは 'foo' を提供します...

Webフロントエンド開発エンジニアが習得すべきコアスキル

Web フロントエンド開発に含まれる内容は、主に W3C 標準の構造、動作、パフォーマンスです。では...

Vueはシンプルなコメント機能を実装します

この記事では、Vueの簡単なコメント機能を実装するための具体的なコードを参考までに共有します。具体的...

データベースマルチテーブル接続クエリの実装方法の詳細説明

データベースマルチテーブル接続クエリの実装方法の詳細説明結合演算子を使用して複数のテーブルクエリを実...

MySQL コマンドを使用してインデックスを作成、削除、およびクエリする方法の紹介

MySQL データベース テーブルでは、インデックスを作成、表示、再構築、削除できるため、クエリ速度...

さまざまなReact状態マネージャーの解釈と使用方法

まず、状態マネージャーとは何か、そしてそれが何をするのかを知る必要があります。複数のページで同じプロ...

テキストエリアタグはサイズ変更できず、マウスでドラッグすることもできません

テキストエリアタグのサイズは不変ですコードをコピーコードは次のとおりです。 <textarea...

CSS スタイルをプログラムで処理するためのサンプル コード

プログラム的アプローチの利点1. スタイルの分散を避けるためのグローバルコントロール2. シンプルな...