Docker化は、ソフトウェア業界におけるデプロイと自動化のプロセスを再定義しました。その誕生以来、Docker チームは、自動デプロイをシームレスにするために絶えず努力してきました。コンテナ化技術は、迅速なアプリケーション開発と効率化を可能にするだけでなく、時間と多大な労力を節約します。マルチコンテナアプリケーションのオーケストレーション、定義、実行を同時に行うといった比類のない機能により、Dockerは開発者にとってお気に入りの選択肢となっています。
Dockerコンテナとイメージ
Dockerをさらに深く理解するにあたり、まずは基本をおさらいしておくことが不可欠です。Dockerの実務経験がない場合、その仕組みを理解するのは少し難しいかもしれません。このセクションでは、初心者にとって不可欠ないくつかの概念を定義します。これらの概念をすでにご存知の場合は、スキップして次のセクションに進んでいただいて構いません。また、当社のDockerの基本的な概念を説明する包括的なガイド.
-
Dockerイメージ
Dockerイメージは、読み取り専用ファイルの集まりです。一度Dockerイメージを作成すると、削除は可能ですが、変更することはできません。必要に応じて、1つ以上のDockerコンテナを作成するためにDockerイメージを使用します。システムで実行されているイメージの数を確認するには、次のコマンドを使用します。
|
1 |
$docker images |
次のようなリモートレジストリからイメージをプル(取得)する場合、Docker Hub、ファイルやフォルダをダウンロードすることになります。イメージをプルするには、次のコマンドを使用します。
|
1 |
$docker pull (名前 の その イメージ) |
-
Dockerコンテナ
Dockerイメージは、Dockerコンテナの設計図です。技術的には、DockerコンテナはDockerイメージのインスタンスです。Dockerイメージが親のようなものだとすれば、Dockerコンテナは子供です。一度しか作成できないDockerイメージとは異なり、単一のイメージを使用して複数のコンテナを作成できます。システムで実行されているイメージのリストを確認するには、次のコマンドを使用します。
|
1 |
$docker ps |
コンテナをプルするには、次のコマンドを使用します。
|
1 |
$docker pull (名前 の その コンテナ) |
-
Dockerイメージとコンテナの仕組み
Dockerイメージとコンテナは密接に連携して、Dockerの可能性を最大限に引き出します。runコマンドを実行することで、Dockerイメージを使用して単一のコンテナが構築されます。Dockerコンテナを作成すると、「コンテナレイヤー」と呼ばれる新しいレイヤーが作成されます。新しく作成されたレイヤーには、アプリケーションとその依存関係が含まれます。作成するすべてのコンテナには、それぞれ異なる読み取り/書き込み可能なコンテナレイヤーがあり、Dockerコンテナに加えられた変更は自動的にコンテナレイヤーに反映されます。コンテナを削除すると、コンテナレイヤーも失われることに注意してください。
Docker Composeのご紹介
Docker Compose は、すべてのDockerコンテナを単一の YAML ファイルに設定してオーケストレーションできるコンテナ管理ツールです。このツールを使用すると、起動、停止、コンテナ間のリンクやボリュームの作成がすべて容易になります。
-
Docker Composeは何をするものですか?
簡単に言うと、Docker Composeは競合や構成上の問題を排除することで、複雑なタスクを容易にします。ユーザーはさまざまなDockerコンテナを一元管理できます。言い換えれば、1つの巨大なコンテナにすべてのサービスを詰め込むのではなく、Docker Composeがサービスを複数のサービスに分割するため、ユーザーはそれらに簡単にアクセスして管理できるようになります。
このガイドでは、CentOS 7上でマルチコンテナアプリケーションを管理するために、最新バージョンのDocker Composeをインストールする手順を説明します。また、このソフトウェアを正常に使用するために必要な基本的なコマンドについても説明します.
-
How to Use Docker Compose
Docker Composeの使用は、初心者にとっても非常に簡単です。Docker Composeに含まれる3つのステップのプロセスを見てみましょう。
1. ビルド:最初に、プロジェクトのニーズに応じてDockerfileでイメージをビルドするか、レジストリからプルします。
2. 定義:次に、すべてのコンポーネントサービスを compose.yml ファイルで定義する必要があります。
3. 実行:コンポーネントを定義したら、docker-compose コマンドを使用して実行します。
前提条件
CentOSサーバーにDocker Composeをインストールする前に、以下が準備されていることを確認してください:
- CentOS 7サーバー上でsudoアクセス権を持つ非ルートユーザー.
- マシンにDockerがインストールされていること。次のチュートリアルを参照してください:Ubuntu 18.04にDockerをインストールして操作する方法.
これで準備は完了です。次に、以下の手順に従ってCentOS 7にDocker Composeをインストールします。
ステップ 1:Docker Composeのインストール
最新バージョンのDocker Composeを入手するには、Dockerドキュメントの指示に従い、Docker’sのGitHubリポジトリからバイナリをダウンロードしてください。以下のコマンドを実行して、ソフトウェアの最新バージョンがインストールされていることを確認します:
|
1 |
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose |
バイナリを実行可能にするために、以下の権限を設定します:
|
1 |
sudo chmod +x /usr/local/bin/docker-compose |
次に、バージョンを確認してインストールが成功したかどうかをチェックします:
|
1 |
$docker-compose --version |
以下のコードは、インストールされたバージョンを出力します:
その後、インストールしたDocker Composeを使用して“Hello World”の例を実行できます。
ステップ 2:Docker Composeを使用したコンテナの実行
公開DockerレジストリであるDocker Hubには、デモンストレーションやテストに使用できる“Hello World”イメージがあります。これは、最小限の構成でDocker Composeを使用してコンテナを実行する方法を示しています。まず、YAMLファイル用のディレクトリを作成する必要があります:
|
1 |
$mkdir hello-world |
次に、このディレクトリに移動します:
|
1 |
$cd hello-world |
次に、お好みのテキストエディタを使用してYAMLファイルを生成します。このチュートリアルでは、以下を使用します:Vi:
|
1 |
$vi docker-compose.yml |
Press i を押して挿入モードに入り、ファイルに以下を入力します:
|
1 2 |
my-test: image: hello-world |
コンテナ名には、最初の行が組み込まれます。2行目は、コンテナの作成に使用するイメージをプログラムに指示します。docker-composeup は、hello-world という名前のローカルイメージを探します。挿入モードを終了するには、ESC を押します。次に、:x を入力し、ENTER を押してファイルを保存し、終了します。docker images コマンドを使用して、マシン上のイメージを手動で確認できます:
|
1 |
$ sudo docker images |
ローカルイメージがまったくない場合は、列ヘッダーのみが表示されます:
コンテナを作成するには、まだ /hello-world ディレクトリにいる状態で、このコマンドを実行します::
|
1 |
$sudo docker-compose up |
初めてコマンドを実行したときに、hello-world という名前のローカルイメージがない場合、Docker Hubリポジトリからダウンロードされます:
インストールが機能することを確認するために、Docker Composeはイメージをプルし、コンテナを構築し、アタッチして、hello プログラムを実行します:
その後、実行された内容の説明が出力されます:
When hello がその役割を終えると、コンテナはシャットダウンされ、コマンドはコンテナ内で実行されなくなります。アクティブなプロセスを確認すると、列ヘッダーが表示されます。ただし、hello-world コンテナは現在動作していないため、リストには表示されません:
|
1 |
$sudo docker ps |
現在のコンテナだけでなく、すべてのコンテナを表示するには、-a フラグを使用します:
|
1 |
$sudo docker ps -a |
コンテナの実行を試したところで、Docker Composeの基本的なコマンドのいくつかを学習しましょう。
ステップ 3:Docker Composeコマンド
Docker Composeを使い始めるために、このセクションではdocker-compose ツールが提供する基本的なコマンドについて説明します。docker-compose は、ディレクトリ単位で動作するコマンドです。コンテナごとに1つのディレクトリを作成し、ディレクトリごとに1つのdocker-compose.yml ファイルを生成することで、同じコンピュータ上で多くのDockerコンテナグループを実行できます。
これまでは、ご自身でDocker Composeを実行してきました。これを停止するには、次を押します:Ctrl-C。これにより、ターミナルウィンドウにデバッグメッセージが表示されます。ただし、本番環境で運用する場合は、docker-composeをサービスとして実行することをお勧めします。-dオプションを使用すると、これを簡単に実現できます:
|
1 |
docker-compose up -d |
これで、docker-composeがバックグラウンドにフォークされます。Dockerコンテナのグループ(停止中または実行中)は、次のコマンドで管理できます:
|
1 |
$sudo docker-compose ps -a |
コンテナのStateは、停止している場合、次のようにExitedと報告されます。以下の例を参照してください:
現在実行中のコンテナは次のように表示されます:
|
1 2 3 4 |
Name Command State Ports --------------------------------------------------------------- nginx_nginx_1 nginx -g daemon off; Up 443/tcp, 80/tcp |
Dockerグループの起動に使用したdocker-compose.ymlファイルと同じディレクトリ内にある、実行中のすべてのDockerコンテナを停止できます:
|
1 |
$docker-compose stop |
注意:より強制的にシャットダウンする必要がある場合は、docker-compose killも使用できます。
場合によっては、Dockerコンテナが内部に古いデータを保存していることがあります。最初からやり直したい場合は、rmコマンドを使用して、コンテナグループからすべてのコンテナを削除します:
|
1 |
$docker-compose rm |
Dockerコンテナと.ymlファイルが配置されているディレクトリ以外のディレクトリからこれらのコマンドを実行すると、エラーメッセージが表示されます:
|
1 2 3 4 5 6 |
ERROR: Can't find a suitable configuration file in this directory または any parent. Are you in the right directory? Supported filenames: docker-compose.yml, docker-compose.yaml |
このセクションでは、Docker Composeを使用したコンテナ操作の基本について説明しました。前述のように、コンテナをさらに制御する必要がある場合は、次のセクションでDockerファイルシステムにアクセスし、コンテナ内のコマンドプロンプトからコマンドを実行できます。
ステップ 4: Dockerコンテナのファイルシステムへのアクセス
コマンドラインツールであるdocker execを使用して、コンテナ内でコマンドプロンプトを実行し、コンテナのファイルシステムにアクセスできます。例として、“Hello World”を実行し、docker execコマンドが完了するまでにどれくらいの時間がかかるかを確認してください。このチュートリアルでは、Docker Hub image of Nginxを使用できます。nginxという名前の新しいディレクトリを作成し、その中に移動します:
|
1 2 |
mkdir ~/nginx cd ~/nginx |
これでdocker-compose.ymlファイルが作成されたはずです。これをテキストエディタで開きます:
|
1 |
vi docker-compose.yml |
次に、ファイルに以下を追加します:
|
1 2 |
nginx: image: nginx |
アプリケーションを終了します。Nginxコンテナをバックグラウンドで起動するには、次のコマンドを使用します:
|
1 |
$sudo docker-compose up -d |
Docker ComposeがNginxイメージをダウンロードし、バックグラウンドでコンテナを実行します。続行するには、コンテナのCONTAINER IDを入力する必要があります。現在実行中のすべてのコンテナは、次のコマンドで表示できます:
|
1 |
$sudo docker ps |
以下のように表示されます:
このコンテナ内のファイルシステムを変更したい場合は、docker execを使用し、コンテナの一意のID(この場合はf139d0d78ca7)を使用してコンテナ内にシェルを構築します:
|
1 |
$sudo docker exec -it f139d0d78ca7 /bin/bash |
インタラクティブなターミナルは、-tオプションを使用して開くことができます。一方、/bin/bashはコンテナにbashシェルを提供します。その後、コンテナに対して表示されるbashプロンプトは次のようになります:
|
1 |
root@b86b6699714c:/# |
コンテナ内にはコマンドプロンプトが表示されます。データボリュームの一部として保存されているディレクトリ内で作業していない限り、コンテナを再起動すると行った変更はすべて上書きされます。Linuxのコマンドライン機能の操作に慣れている場合は、ほとんどのDockerイメージが最も基本的なLinuxインストールを使用して作成されていることを知っておく必要があります。
まとめ
CentOS 7上でマルチコンテナアプリケーションを管理するための最新バージョンのDocker Composeをインストールする手順を説明しました。多数のコンテナを同時に起動および停止できるDocker Composeの機能は素晴らしいものです。テンプレートからアプリケーションへの移行は数分で完了します。したがって、複数のコンテナを同時に実行する作業を行う場合、Docker Composeを使い続けることは優れた選択肢です。ただし、これが万能なソリューションというわけではありません。特定のニーズに応じて、より適したオプションを見つけることもできます。例えば、Kubernetes.
Docker Composeの機能をさらに探索するには、次のチュートリアルを参照してください:当社のブログ:
快適なコンピューティングを!






コメント
コメントはまだありません。最初のコメントを投稿しましょう。