Dockerは、2013年の創業以来、世界を席巻してきました。現代のスタックを使用してイノベーションを生み出す経験豊富なプログラマーであれば、Dockerを使用したことがあるか、少なくとも聞いたことがある可能性があります。初心者で、Dockerを理解するのが難しい場合でも、心配する必要はありません。 Dockerを初心者に紹介するためにこのガイドを用意し、最も役立つ40のDockerコマンドの概要を説明しました。 dockerはコマンドとインターフェースがすべてではありませんが、基本的なコマンドを熟知すると、その動作をほとんど簡単に視覚化するのに役立ちます。
Dockerの基礎
6年前、dockerは、開発者が製品をコンテナー内にデプロイできるようにするOSレベルの仮想化プロバイダーとしてスタートしました。コンテナはミニ仮想マシンと考えることができます。 Linux VMwareツールと同様の機能を提供しますが、必要なCPUリソースは非常に少なくなります。その結果、企業は1つのプラットフォームに数千の製品を導入できます。
Dockerは、その設計によってこの低レベルのリソース消費を実現します。スタンドアロンのVMwareゲストマシンよりも分離が少なく、サーバーで実行されているアプリケーションに必要のない多くの不要な機能を取り除きます。そのため、DockerとVMwareのような本格的なハイパーバイザーから1つを選択するかどうかは、プロジェクトの要件のみに依存します。
Dockerのもう1つの便利な機能は、製品に正確な環境を提供することです。モバイルアプリを作成していて、プロジェクトを他の共同編集者と共有したいとします。通常、アプリに必要なバージョンと同じバージョンのライブラリとフレームワークを正確にダウンロードする必要があります。さまざまな構成の問題が発生し、開発作業が大幅に削減されます。
dockerは製品環境のイメージを作成するため、すべての共同作業者はこのイメージをダウンロードして、システム構成に関係なく使用できます。 Dockerは、環境をすべて単独でフェッチして構築します。このほとんどは、例から学ぶことができます。
Dockerfileについて
Dockerでは、Dockerfileは、ツールの環境を定義できるようにするコンポーネントです。これは、Dockerランタイムが理解できる形式で記述された命令を含むテキストファイルに他なりません。 Dockerfileの作成と管理は簡単です。したがって、Dockerfilesの構文研究は別の日に残しておきます。
---
実際には、Dockerfileを使用して、アプリケーションで使用されるパッケージを定義し、それらをフェッチしてビルドします。このDockerfileを共同編集者と共有すると、Dockerを使用してこのイメージを構築することで、共同作業者が環境を簡単にセットアップできます。うまくいけば、このシンプルでありながら不可欠な知識が、今日説明するコマンドを理解するのに十分になるでしょう。
マスターするのに便利なDockerコマンド
Dockerは、初期の頃から大きく成長しました。今日では、さまざまな仮想化のニーズにまたがる複数のサービスを提供しています。そのため、dockercliで使用できるコマンドは多数あります。コアコンセプトをよりよく理解するのに役立つため、編集者は最もよく使用されるコマンドを選択しました。
初心者向けの基本的なDockerコマンド
次のセクションでは、dockerの基本的なコマンドについて説明します。彼らはあなた自身のコンテナをスピンアップするのを助け、Dockerへのいくつかの切望された洞察を提供します。
1。 DockerHubのイメージを使用してコンテナを作成する
Docker Hubは、Dockerイメージの公式Dockerリポジトリです。これには、オープンソースの開発者や企業によって作成された何千ものビルド済みイメージが含まれています。このリポジトリの画像を使用して、動作中のDockerコンテナを簡単に起動できます。
$ docker create -it ubuntu:xenial bash
上記のコマンドは、DockerHubからUbuntuXenialイメージをプルし、このイメージを使用してコンテナーを作成します。 -itフラグは、統合ターミナルをこのコンテナーに追加するようにdockerに指示するために使用されます。さらに、bash部分はdockerにbashコマンドを実行するように指示します。
2。 Dockerコンテナを一覧表示する
作成したら、コンテナが正常に作成されたかどうかを確認する必要があります。 psコマンドは、現在のコンテナーを一覧表示するようにdockerに指示します。
$ docker ps
このコマンドは実行中のコンテナを表示しない可能性があります。 Dockerコンテナをまだ起動していないために発生します。ただし、 -aは使用できます Dockerにすべてのコンテナーをリストするように指示するためのフラグ。
$ docker ps -a
このコマンドは、前のコマンドで作成したコンテナを表示するはずです。
3。コンテナを起動します
Dockerでコンテナを使用するには、最初にコンテナを起動する必要があります。次の例に示すように、dockerstartコマンドを使用するとこれを非常に迅速に実行できます。
$ docker start CONTAINER_ID
ここでは、 CONTAINER_ID コンテナのIDです。 dockerps-aコマンドを実行するとこれが表示されます。そこからコピーして、この例で使用します。数秒以内にコンテナが起動します。
4。コンテナに接続する
正常に起動したら、このコンテナを使用できるようにするには、このコンテナに接続する必要があります。 dockerattachコマンドはこの目的のためにここにあります。次のコマンドは、前に作成したコンテナに接続する方法を示しています。
$ docker attach CONTAINER_ID
これにより、プロンプトが変更されます。そして、UbuntuXenialベースのコンテナの中にいます。このコンテナ内で行うことは、その中に残ります。 cat / etc/issueを実行してコンテナを確認できます。
5。コンテナの終了
docker stopコマンドを使用して、アクティブなコンテナーを簡単に終了できます。実行中のコンテナから簡単に終了できるため、初心者にとって最も役立つDockerコマンドの1つです。次のコマンドは、これがどのように機能するかを示しています。
$ docker stop CONTAINER_ID
以前のターミナルではコンテナを実行しており、内部にDockerがないため、これは別のターミナルから実行する必要があります。もう1つの簡単な回避策は、Ctrl + Dを使用するか、コンテナー内でexitと入力するだけで、コンテナーを終了することです。
6。コンテナの削除
コンテナは仮想マシンの小さな断片のようなものであるため、ホストマシンでの影響に直面することなく、コンテナを簡単に削除できます。次のコマンドを使用して、前に作成したコンテナを削除します。
$ docker rm CONTAINER_ID
コンテナを即座に削除します。ただし、このコンテナ内で作成されたすべてのファイルと構成も削除されます。したがって、今後必要になった場合は、必ず別の場所に移動してください。
7。コンテナを殺す
Dockerを使用すると、ユーザーは実行中のコンテナーを強制終了することもできます。少なくともdockerでは、コンテナーを停止することとコンテナーを強制終了することの違いは非常に微妙です。 docker stopを使用すると、最初にコンテナー内で実行されているプロセスが終了し、次にコンテナーが終了します。
$ docker kill CONTAINER_ID
ただし、docker killコマンドは、ホストマシンで実行されているコンテナプロセス全体を強制終了します。これにより、不要な設定ミスが発生したり、コンテナプロセスが破損したりする可能性があります。したがって、UbuntuでこのようなDockerコマンドを使用する場合は注意が必要です。
8。コンテナからの切り離し
開始してコンテナに接続したとします。ここで、このコンテナを実行したままにしておきたいが、ターミナルセッションを使用したいとします。 dockerコマンドは停止してコンテナーを終了するため、目的に使用することはできません。
Ctrl+P Ctrl+Q
実行中のコンテナ内で上記のキーの組み合わせを押し続けると、そのコンテナから切り離されます。たとえば、 Ctrlを押したままにします Pを押します およびQ 次々と。
9。コンテナとファイルシステム間でのコンテンツのコピー
多くの場合、現在の製品の構成ファイルをコンテナーからファイルシステムまたは他のコンテナーにコピーしたい場合があります。 docker cpコマンドを使用すると、これを実行できます。 Unix cp -aコマンドのように機能し、内容を再帰的にコピーします。
$ docker cp CONTAINER_ID:/test_file test_file
このコマンドは、 test_fileをコピーします CONTAINER_IDのコンテナから ホストマシンに。次は、ドキュメントをホストからコンテナにコピーする方法を示しています。
$ docker cp test_file CONTAINER_ID:/test_file
10。コンテナ内でのコマンドの実行
実行中のコンテナから直接コマンドを実行できますが、特に数百のコンテナがある場合は、常にコンテナをアタッチしたくない場合があります。これは一般的なシナリオであるため、Dockerランタイムは、管理者のターミナルインスタンスからコンテナ固有のコマンドを実行するための堅牢なコマンドを提供します。
$ docker exec CONTAINER_ID command
これにより、 CONTAINER_ID内でコマンドを実行できるようになります コンテナ。
11。すべてのDockerイメージを一覧表示する
Dockerイメージは、コンテナーの構成要素です。覚えておくべきことですが、コンテナはイメージをベースとして使用して作成されます。開発者がシステム全体に複数のDockerイメージを持っているのは普通のことです。次のコマンドは、マシン内のすべての画像を一覧表示する方法を示しています。
$ docker images
このコマンドを呼び出すだけで、すべてのトップレベルのDockerイメージが、サイズ、タグ、およびリポジトリとともに表示されます。 -q オプションは、 IMAGE_IDの取得にのみ使用できます 。
12。 Dockerイメージの削除
不要になった1つ以上のDockerイメージを削除したい場合があります。次のコマンドは、これを行う方法を示しています。
$ docker rmi <IMAGE_ID>
ただし、画像が複数のリポジトリでタグ付けされている場合は、次の方法で画像を削除する必要があります。
$ docker rmi REPOSITORY:TAG
この情報は、コマンドdockerimagesを実行すると見つかります。
中級開発者向けの生産的なDockerコマンド
Dockerとコンテナーの概念をすでに理解している場合は、いくつかの高度な機能を確認することをお勧めします。次のセクションでは、開発者の生産性を向上させることを目的としたさまざまな便利なDockerコマンドについて説明します。
13。コンテナの永続ボリュームの追加
したがって、コンテナを削除すると、それに関連付けられているすべてのデータが失われます。 Dockerを使用すると、開発者は「ボリューム」を作成できます。 」は、これらのデータの永続的なストレージを提供します。ボリュームは、コンテナをファイルシステム上の事前定義されたスペースにバインドするメカニズムにすぎません。
$ docker create -it -v $(pwd):/var/www ubuntu:xenial bash
上記のコマンドを実行すると、現在の作業ディレクトリが / var / wwwにバインドされます。 コンテナの場所。これで、現在のディレクトリ内のファイルを変更でき、変更はdocker内に反映されます。
14。 DockerRunを使用したコンテナの作成と実行
これまでのところ、最初にDockerコンテナを作成してから、開始しました。ただし、dockerを使用すると、1つのコマンドを使用してこれらの両方を実行できます。以下の例をチェックして、これがどのように機能するかを確認してください。
$ docker run -it -d ubuntu:xenial bash
このコマンドを実行すると、Xenialイメージがフェッチされ、コンテナが作成され、bashで開始されます。ただし、端末に直接効果が表示されることはありません。これは、 -dを使用してこのコンテナをバックグラウンドで実行するようにDockerに指示したためです。 国旗。これを削除すると、コンテナが作成されるとすぐにコンテナに移動します。
15。名前付きコンテナの作成
–名前 オプションを使用して、特定の名前を持つコンテナーを作成できます。 CONTAINER_IDの代わりに使用できます ほとんどのDockerコマンド。次のコマンドは、これが実際に動作していることを示しています。
$ docker create --name TEST nginx
このコマンドは、Docker HubからNginxイメージをプルし、 TESTというコンテナーを作成します。 この場合。これで、コンテナを開始してセッションをアタッチし、コンテナを使用できます。 dockerrunコマンドでも同じように機能します。
16。コンテナのポートの公開
Dockerランタイムをまったく使用せずに、ホストから直接コンテナーと通信できます。これは、管理者によって定義されたある種のネットワーキングスキームを使用することによって機能します。コンテナ用にいくつかのポートを公開することは、そのような広く行われている手法の1つです。
$ docker run --name NEW nginx -p 8080:80
上記のコマンドは、 NEWという名前のコンテナを作成します ポートをバインドします80 ポート8080 ホストシステムの。これで、このポートを使用してコンテナにリクエスト/レスポンスを送信できるようになります。
17。コンテナ内の変更を探す
多くの場合、わずかな設定ミスが望ましくない問題を引き起こし、デバッグに数時間かかる場合があります。 docker diffコマンドは、このような多くの場合に便利です。これを使用して、コンテナのファイルシステムの変更を検査できます。
$ docker diff CONTAINER_ID
したがって、特定のコンテナが完全に正常であることが確実にわかっている場合は、このコマンドを時々使用して、このコンテナのファイルシステムの変更を表示できます。
18。変更されたコンテナから新しいイメージを作成する
Dockerを使用すると、開発者は既存のコンテナーの変更に基づいてまったく新しいイメージを作成できます。これは、アプリケーションのさまざまなフェーズ用に複数のコンテナを作成する場合に使用されます。
$ docker commit CONTAINER_ID REPOSITORY:TAG
上記のコマンドは、 CONTAINER_IDを使用して新しいイメージを作成します コンテナ。
19。 Dockerコンテナの監視サーバー
docker eventsコマンドを使用すると、開発者はサーバーを監視して、コンテナー、イメージ、プラグインなどに関するリアルタイムの情報を確認できます。 2つのコマンドラインシェルを使用して、システムでこれを試すことができます。
$ docker events
最初のシェルで上記のコマンドを入力します。次に、Dockerコンテナを別のシェルにスポーンします。そのコンテナ内でいくつかのdockerコマンドを実行すると、最初のターミナルでリアルタイムの通知が届きます。
20。画像履歴を調べる
前に説明したように、イメージはDockerコンテナーの構成要素です。そのため、コンテナ内の突然の問題を検出するための画像履歴を簡単に表示できます。このコマンドを使用するのは簡単です。
$ docker history IMAGE_ID
docker psを使用してコンテナのイメージIDを取得し、上記のように使用するだけです。現在の画像がどのように作成されたかが表示されます。
21。 TarsからのDockerイメージの読み込み
Dockerのもう1つの優れた機能は、tarから画像を読み込む機能です。また、ユーザーは標準入力から画像を読み込むことができます。 loadコマンドの構文を以下に示します。
$ docker load < IMAGE.tar.gz
次のコマンドを使用することもできます。
$ docker load --input IMAGE.tar
次に、Dockerイメージを一覧表示して、これらのコマンドの効果を確認します。
22。 Dockerに関するシステム全体の情報を表示する
Dockerランタイムに関するシステム全体の情報を表示すると、コンテナーを監視するのに役立ちます。さらに、その性質が明らかになるため、デバッガーに役立つ重要な情報を提供します。以下のコマンドを使用して、これをホストシステムに表示します。
$ docker info
一見単純そうに見えますが、このコマンドは、ホストマシンとDockerコンテナの両方に関する大量の情報を提供します。
23。 Dockerコンテナの名前を変更する
開発者を始めるための最も便利なdockerコマンドの1つは、dockerrenameコマンドです。これは、コンテナの名前を変更するだけの単純なコマンドですが、初心者にとっては非常に重要です。
$ docker rename CONTAINER NEW_NAME
CONTAINER_IDのいずれかを使用できます または、コンテナを表すためのNameパラメータ。 NEW_NAME フィールドは新しいコンテナ名用です。 docker ps -aコマンドを使用して、コンテナーの名前とIDの両方を取得できます。
24。 Dockerコンテナの再起動
多くの場合、ぶら下がっている、または新しい問題があるコンテナを処理する必要があります。これの多くの理由の1つは、余分なリソースの消費である可能性があります。このような場合、コンピューターの場合と同様に、コンテナーの再起動を最初に行う必要があります。
$ docker restart CONTAINER[S]
デフォルトでは、上記のコマンドは10秒後にコンテナを再起動します。ただし、 -tを使用してこの値を指定できます 国旗。値は整数である必要があります。
ネットワーキング用のDockerコマンド
コンテナ間で手間のかからない通信を行うことが不可欠です。ありがたいことに、Dockerネットワークコマンドを使用すると簡単にできます。次のセクションでは、基本的なネットワーキングコマンドについてのみ説明しました。
25。すべてのネットワークを一覧表示する
ネットワークユーティリティは、dockercliの最高のツールの1つです。これを使用して、Dockerデーモンで使用可能なすべてのネットワークを次の方法で一覧表示できます。
$ docker network ls
コンテナで接続できるすべてのネットワークが印刷されます。
26。ネットワークに接続する
1つ以上の実行中のDockerコンテナをマルチホストネットワークにすばやく接続できます。次のコマンドはこれを示しています。
$ docker network connect NET CONTAINER_ID
ここでは、 NET 接続するネットワークを表し、 CONTAINER_ID コンテナを表します。代わりにコンテナ名を使用することもできます。
27。ネットワークから切断する
ネットワークをネットワークから切断することも、接続するのと同じくらい簡単です。これがどのように機能するかについては、以下の例を確認してください。
$ docker network disconnect NET CONTAINER_ID
このコマンドを実行すると、コンテナが NETから切断されます。 通信網。 -fを追加することもできます フラグを立てて強制的に切断します。
28。ネットワークを作成する
docker networkコマンドを利用して、コンテナー間にパーソナライズされたネットワークを作成することもできます。これは、本番環境で定期的に使用されます。次のコマンドは、コンテナネットワークを作成する方法を示しています。
$ docker network create NET
このコマンドは、ネットワークパラメータの指定など、拡張機能を提供するためのいくつかの追加オプションを使用できます。詳細については、こちらをご覧ください。
29。ネットワークに関する詳細情報を表示する
docker networkコマンドを使用すると、開発者はネットワーク情報を非常に詳細に監視できます。これにより、デバッグがはるかに簡単になり、構成がほとんど簡単になります。次のコマンドは、この簡単な例を示しています。
$ docker network inspect NET
このコマンドは、ネットワーク NETで利用可能なすべての種類の情報を提供します 。 -vを使用できます 出力をより人間が読めるようにするためのフラグ。さらに、 -fを使用できます テンプレートに基づいて出力をフォーマットします。
30。ネットワークを削除する
docker network rmコマンドを使用すると、1つ以上のコンテナーネットワークを非常に迅速に削除できます。以下のコマンドは、これを示しています。
$ docker network rm NET
このコマンドはエイリアスであるため、rmの代わりにremoveを実行することもできます。
31。未使用のネットワークをすべて削除する
Dockerを使用すると、管理者は未使用のネットワークをすべて削除できます。これは、Dockerの用語では剪定と呼ばれます。以下のコマンドは、これがどのように機能するかを示しています。
$ docker network prune
これはインタラクティブなコマンドであり、削除するたびに確認を求められます。 -fを追加できます これをオフにするフラグ。このコマンドはユーザーに依存しないため、安全です。
その他のDockerコマンド
dockerデーモンで使用できる追加のコマンドはたくさんあります。ただし、このような1つのガイドですべてを簡単に説明することはできません。したがって、リストに特定のコマンドが見つからなくても心配しないでください。 Ubuntuのようなシステム用の追加のdockerコマンドを次に示します。
32。 Dockerfileからイメージをビルドする
Dockerfileは、Dockerコンテナーの主要なビルド構成ツールです。ここでそれらを作成する方法を学ぶことができます。この例では、Dockerfileからコンテナイメージを構築する方法を示します。
$ docker build . -t APP:v1
このコマンドは、現在の作業ディレクトリにあるDockerfileを使用してイメージを作成します。 APPを設定します リポジトリ名およびv1 タグとして。 Dockerfileが他のディレクトリに存在する場合は、パスを指定する必要があります。
33。未使用のリソースをすべて削除する
ホストシステムは通常数百のコンテナを保持しているため、ぶら下がっているリソースが頻繁に発生します。非生産的であり、サーバーのワークロードに影響を与える可能性があります。次のコマンドを使用して、そのようなリソースをすべて削除できます。
$ docker system prune
未使用のコンテナ、ボリューム、およびネットワークがすべて削除されます。さらに、 -aを追加できます Dockerランタイムからすべての未使用のコンテナーとイメージを削除するフラグ。
34。特定のボリュームの削除
コンテナで不要になった特定のボリュームを簡単に削除できます。これは、制作中の一般的な方法です。次の例に示すように、dockervolumeコマンドをこの目的に使用できます。
$ docker volume rm VOLUME_NAME
指定したボリュームが削除されます。 -fを渡すことができます 確認をスキップするオプション。
35。 DockerHubでの画像の検索
docker cliを使用すると、開発者はDockerハブで指定されたイメージをターミナルから直接検索することもできます。この目的でdockersearchコマンドを使用できます。
$ docker search nginx
実行されると、公式リポジトリで公式のNginxイメージが検索されます。複数のフィルターを追加して、検索を絞り込んだり指定したりできます。
36。終了時にコンテナを削除する
ジョブが終了して終了すると削除されるコンテナを作成できます。トラブルシューティングなど、さまざまな状況で役立ちます。次のコマンドは、これが実際に動作していることを示しています。
$ docker run --rm --it xenial /bin/bash
このコマンドは、bashが内部で実行されているXenialベースのコンテナーを作成して開始します。ここでスタッフを行うことができます。コンテナを終了するとすぐに、Dockerエンジンがこのコンテナを自動的に削除します。
37。ホストでネットワーキングログを取得する
コンテナネットワークのログを手元に用意しておくと非常に便利です。次のコマンドを使用して、ホストマシンでコンテナログを取得できます。
$ journalctl -u docker.service
このコマンドの出力を調べることで、トラブルシューティングの解決策のほとんどを見つけることができます。
38。コンテナファイルシステムをタールとしてエクスポート
docker cliは、コンテナーのファイルシステムをtarアーカイブとしてエクスポートするために使用できるexportコマンドを提供します。これがどのように機能するかを理解するには、以下のコマンドを確認してください。
$ docker export giant_panda > new.tar
このコマンドは、次のコマンドと同等です。
$ docker export --output="new.tar" giant_panda
39。バージョン情報を表示
以下のコマンドで、Dockerクライアントと対応するサーバーのバージョン情報を簡単に表示できます。
$ docker version
次のバージョンを使用して、ビルド情報と一緒にDockerデーモンのバージョンを取得することもできます。
$ docker -v
40。ヘルプ情報を表示
Dockerのドキュメントは単に刺激的です。コマンドdockerを使用するだけで、デーモン全体のヘルプを取得できます。
$ docker
子コマンドに関する追加データを取得するには、次の構文を使用します。
$ docker command[S] --help $ docker network --help
したがって、CLIドキュメントの深さを簡単に拡張できます。
終わりの考え
Dockerコマンドは、最新のシステムメンテナーと開発者にとって不可欠です。 Dockerが最新のアプリケーション展開に与える影響を正確に説明するのは困難です。ほとんどすべての主流企業がdockerを採用しています。そのため、世界中のCS卒業生は、高給の仕事の機会も利用できます。したがって、これらのコマンドのいくつかを学ぶことは、将来のエンジニアにとって大きな投資になるでしょう。うまくいけば、私たちはあなたが求めている知識をあなたに提供することができました。 Dockerについて他にご不明な点がありましたら、ご意見をお聞かせください。