dockerとdocker-compose ふたつのDockerクライアントの使い分けについて

Docker公式ロゴ1b
©2023 Docker Inc. All rights reserved

 Dockerには、全体を制御する管理者的役割を果たすDockerデーモンが存在しています。

 Dockerデーモンに命令するために利用するのが、Dockerクライアントです。

 Dockerクライアントには、dockerコマンドとdocker-composeコマンドの2種類が用意されています。

 dockerコマンドは、Dockerを操作するための全ての機能が実装されています。

 一方のdocker-composeコマンドは、複数のDockerコンテナからなるサービス(たとえば3層構造のサービス)をひとつにまとめて操作する場合にとても便利です。

 本記事では、Dockerの2つのクライアントについて解説しています。

 Dockerを極めるためには、Dockerクライアントを理解することがとても重要ですので、本記事がその橋渡しになれば幸いです。

Dockerコマンドの概要説明

 Dockerコマンドは、Dockerを利用する上でもっとも重要なプログラムになります。

 冒頭で軽くふれましたが、Dockerの操作を行うには、Dockerデーモンとコミュニケーションを行う必要がありまして、Dockerコマンドはそのインターフェイスとして使用します。

 DockerはLinux版、Windows版、Mac版の3種類がリリースされてますので、それぞれの環境にdockerコマンドはあります。

 OSが異なっていてもDockerコマンドの基本的な仕様は同じですが、本記事ではLinux版のDockerクライアントを使って解説します。

 別記事「dockerデーモンに関するもう少し詳しい説明」でも書きましたが、Dockerクライアントは、Dockerデーモンとの通信に、デフォルトではunixドメインソケットを使用します。

※unixドメインソケットとは単一サーバ内でプロセス間通信を行う機能やインターフェースのこと

 また、セキュリティの配慮が必須ですが、TCP/IPを使用したプロセス間通信も可能です。

 dockerコマンドは、コマンドとオプションによって使い分けます。

 フォーマットは以下の通りです。

docker <コマンド> <オプション> <オプション> ・・・

 コマンド部分に、起動する(start)や、停止する(stop)、削除する(rm)などのコマンドを付けて実行します。

 たとえば、Dockerコンテナ「MyApp01」を起動する場合は、以下のように指定します。

$ docker run -d MyApp01

Dockerコマンドのコマンド一覧

 Dockerコマンドは、数多くの種類があります。

 Dockerイメージやコンテナの操作を行うコマンド以外にも、DockerボリュームというDockerの仮想Diskを作成したり、Docker内の仮想ネットワーク環境を構築するためのコマンドも提供されています。

 本サイト「めもたんす」では、全てではありませんが、コマンドを実例をまじえて解説しています。

 別記事「Dockerのコマンドの一覧(オリジナルな実例付き)」に、本サイトで公開してますコマンドの一覧を掲載しましたので、よろしかったらご利用ください。

 各コマンドの解説記事は、Docker公式サイト内で公開されていますドキュメントを参考にしています。

 公式のコマンド解説を参照しつつ、実際にDockerコマンドを実行した結果をまじえて解説した記事です。

docker-composeの概要説明

 冒頭でふれましたDockerのもうひとつのDockerクライアントであるdocker-composeについて解説します。

 Dockerを学び始めたころは、Webサーバなど何か1つのサービスのDockerコンテナを作ってみたりすると思います。

 しかし実際のシステムでは、Webサーバ単体構成のサービスは少なく、バックにデータベースやアプリケーションサーバや認証システム、フロントにリバースプロキシと、複数サービスを結合して構築するのではないでしょうか。

 docker-composeは、複数のサブシステムをひとつのサービスにまとめてハンドリングする場合にとても便利なツールです。

 もちろんDockerコマンドでも複数コンテナを連携させることはできますが、docker-composeを利用した方がより便利で簡単に行うことが可能です。

 Dockerコマンドの場合、いろいろな設定値やオプションなどは、コマンドの引数として実行時に指定します。

 docker-composeでは、設定値やオプションなどは基本的にdocker-compose.ymlファイルに記述します。

 下の内容は、Docker公式サイトのdocker-compose.ymlファイル解説ページに掲載されていましたサンプルです。

version: "3.8"

services:
  wordpress:
    image: wordpress
    ports:
      - "8080:80"
    networks:
      - overlay
    deploy:
      mode: replicated
      replicas: 2
      endpoint_mode: vip

  mysql:
    image: mysql
    volumes:
       - db-data:/var/lib/mysql/data
    networks:
       - overlay
    deploy:
      mode: replicated
      replicas: 2
      endpoint_mode: dnsrr

volumes:
  db-data:

networks:
  overlay:

 詳しい解説は省きますが、wordpress用のwebサーバ(サービス名:wordpress)とdbサーバ(サービス名:mysql)の設定とdb-dataというDockerボリューム、overlayネットワークの利用などが記載されています。

 このファイルをdocker-composeに読み込ませて実行するだけで、wordpress環境ができあがるのです。

 同じことをDockerコマンドで行う場合は、たくさんの引数が付いたコマンドを何個も実行しなければいけません。

 私はDockerコマンドを多用していますが、docker-composeももちろん愛用しています。

 dockerコマンドが一通り理解できた方は、ぜひdocker-composeを使用されることをオススメします。

おわりに

 今回は、Dockerクライアントについて書かせていただきました。

 Dockerクライアントのコマンドは、Dockerの操作を行うために十分な機能を提供しています。

 中には、コマンド名だけでは判断できないような、かなり使える機能もあったりします。

 本サイトの解説記事が、Dockerとあなたの距離を少しでも縮めることができましたら幸いです。

 最後までお読みいただきありがとうございました。

コメント