Docker

docker-composeとは?dockerコマンドとの違いを理解しよう【Docker入門⑥】

こんにちは、インフラエンジニアのryuです。

今回は、docker-composeとは?ということで、”docker-compose”コマンドについて解説します。docker-composeを使うことで、一度に複数のコンテナを操作することが可能となります。dockerコマンドとの違いを理解することで、どのようなコマンドなのか理解することができます。

関連【おすすめ】コマンドを打ちながらLinuxが学べるサイトInfraAcademy

サーバー構築を実践で身につけるInfraAcademy

※本ページには、プロモーション・アフィリエイトリンクが含まれています

docker-composeとは?dockerコマンドとの違いを理解しよう

今回の記事では、”docker-compose”コマンドの概要を分かりやすく説明します!

今回の記事はDocker入門⑥ということで、”docker-compose”コマンドについて解説したいと思います。”docker-compose”コマンドを使えるようになると複数のコンテナを一度に操作できるのでとても便利です。

まず、”docker-compose”を理解するためにDockerでコンテナを起動する流れをおさらいしましょう。

docker-composeを理解するために

docker-composeを理解するためには、Dockerの流れを抑えておきましょう。

まず、Dockerはアプリケーションの動作するために必要な設定をコンテナにまとめて実行する環境のことでした。

コンテナを起動するために必要な手順は以下の通りです。

  1. コンテナを構成するためのDockerfileを作成する
  2. DockerfileをビルドしてDockerイメージを作成する
  3. Dockerイメージをコンテナとして起動させる

イメージは以下の通りです。

docker-composeを理解するために

Dockerイメージを起動させるためには“docker run”コマンドを使用しました。

ここまでの流れは、今までの記事に詳細を記載しております。良く分からないという方は、こちらをご覧ください。

“docker-run”コマンドでは、1つのイメージしか起動できませんでした。複数のイメージがある場合はどのようにしたらよいでしょうか?

例えば、Webサーバー、データベース、キャッシュなど複数のコンテナが必要なシステムの場合、1つ1つ起動させなければならないのでしょうか?そのような時に”docker-compose“を使用します。

docker-composeとはコンテナを一度に操作するコマンド

ここから本題です。

先ほどは、”docker run”コマンドを使用して1つのコンテナを起動する方法をお伝えしました。では、複数のコンテナの環境の場合はどうすればよいのでしょうか?

例えば、簡単なWebアプリの構成を考えてみましょう。WebサーバーとSQLデーターベースで以下のように2つのDockerコンテナを起動させます。

docker-composeとはコンテナを一度に操作するコマンド

“docker run”コマンドを何回も打つのめんどくさい!

今回の例では、2つのコンテナですが、これが数十個や数百個になった場合、コマンドを打つのめんどくさいですよね。

そのような時に使うのが“docker-compose”コマンドです。”docker-compose”コマンドを使って、複数のDockerfileから、コンテナを起動させます。

このようなイメージです。タコのイラストが”docker-compose”コマンドです。

docker-composeのイメージ

docker-composeを使うメリット

“docker-compose”は一度に複数のコンテナを起動させることができます。”docker run”コマンドで1つずつ起動させるよりも便利ですよね。

また、”docker-compose”コマンドを使用することで、同じ構成の環境を別の環境に構築することが可能です。

それにより、以下のメリットがあります。

  • 環境の違いによる、アプリ動作不良が無くなる
  • 環境を構築する時間が無くなる

「docker-compose.yml」という構成ファイルを作成するだけで、同じ設定のコンテナを起動させることができます。

では、どのように”docker-compose”コマンドを使えばよいのでしょうか?これからコマンドの使い方を解説していきます!

“docker-compose”コマンドを使ってみよう

では、”docker-compose”コマンドを実際に使ってみましょう。

dockerのドキュメントの内容を簡単に説明しております。

ドキュメントはこちら↓

http://docs.docker.jp/compose/gettingstarted.html#dockerfile

docker-composeの手順は以下の3つです。

  1. アプリを動作させるための準備
  2. Dockerfileの準備
  3. 「docker-compose.yml」の準備
  4. “docker-compose up”でコンテナを起動

では、やってみましょう。

アプリを動作させるための準備

まずは準備です。

今回はPythonのWebフレームワークflaskとredisを作ります。そのための準備です。

Dockerを動かすディレクトリに”app.py”と”require.txt”を作成します。ファイルの内容は以下の通りです。

・app.py

from flask import Flask
from redis import Redis

app = Flask(__name__)
redis = Redis(host='redis', port=6379)

@app.route('/')
def hello():
    count = redis.incr('hits')
    return 'Hello World! I have been seen {} times.\n'.format(count)

if __name__ == "__main__":
    app.run(host="0.0.0.0", debug=True)

・require.txt

flask
redis

以下のような感じでファイルを作りましょう。

Dockerfileの作成

次に、Dockerfileの作成をします。内容は以下の通りです。

FROM python:3.4-alpine
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD ["python", "app.py"]

「docker-compose.yml」の準備

次に、「docker-compose.yml」の準備です。このファイルには”docker run”コマンドで指定するオプションと同じ内容を記述します。

ファイルの内容は以下の通りです。

version: '3'
services:
  web:
    build: .
    ports:
     - "5000:5000"
  redis:
    image: "redis:alpine"

“docker-compose”でコンテナを起動

最後にコマンドを入力してコンテナを起動させましょう

コマンドは以下の通りです。

docker-compose up

コマンドを起動すると、Dockerfileからイメージを作成し、コンテナを起動させます。

"docker-compose up"でコンテナを起動

完了したら、ブラウザでhttp://127.0.0.1:5000/と入力してWebページがみれたら成功です。

以上で”docker-compose”コマンドについての解説を終わります。

docker-composeについてさらに勉強したい方はUdemyがおすすめ

docker-composeについてさらに勉強したい方はUdemyがおすすめです。UdemyはITの講座が豊富にあるサイトです。参考書での勉強が苦手な方にはおすすめです。

以下のように、Dockerに関する講座が豊富にあります!

Udemyがおすすめな理由
  1. セールだと1500円前後!
  2. 無料サンプル講義動画・無料講義動画あり!
  3. 気に入らなければ30日間返金保証!

UdemyでDockerの講座を探す

docker-composeとは?まとめ

今回の記事では、docker-composeとは?について解説しました。docker-composeコマンドは開発現場では、必ずと言っていいほど使われているので覚えておきましょう。

当ブログでは、このようなITに関する記事を発信しているので京見のある方は引き続きご覧ください。

こちらの参考書もおすすめです。

・たった1日で基本が身に付く!Docker/Kubernetes超入門

・プログラマのためのDocker教科書

ABOUT ME
ryu@InfraAcademyというインフラ学習サービス運営
InfraAcademyというインフラエンジニア向けの学習サービスを運営しております。 インフラエンジニアからフルスタックエンジニア、PdM サーバ、ネットワーク、セキュリティ、クラウドについて投稿します。
RELATED POST