docker-compose

 

はじめに

今回は、Docker Composeについて話そうと思います。

Dockerについてはすでに一度記事にしましたので、

そもそもDockerってという方はそちらを読んでいただければとおもいます。

 

https://ds-ricekun.hatenablog.com/entry/2020/05/05/173047

 

Docker Composeとは?

複数のコンテナから構成される環境について、Dockerイメージのビルドや

各コンテナの起動、停止を簡単に行えるようにするツールです。

 

今回の私が用意した環境で説明するならば、

 フロントコンテナ、APIコンテナ、DBコンテナ

の3つはセットで扱うべきものです。

これらをバラバラに起動しても互いに関係しているものなので

コンテナが起動したとしても、提供すべきアプリケーションとしてはNGです。

 

アプリケーションとして環境をつくるためのようなものだと思っていただいて問題ないと思います。

 

Docker Composeを使う

Docker Desktop on Windowsではdocker-composeがインストール済みになるので

インストールしていませんが、Dockerとは別なのでインストールが必要になる

ケースもあると思います。

 

ツールがインストール済みならば、

次にdocker-compose.ymlを用意する必要があります。

docker-compose.ymlは、Dockerビルドやコンテナ起動のオプションなどを含め、

複数のコンテナの定義をかきます。

それを利用してDockerビルドやコンテナ起動をすることができます。一つの簡単なコマンドで複数のコンテナを管理できるようになります。

 

docker-compose.ymlの書き方

今回利用した書き方に関して記述します。

ここで記載した内容以外にも書き方はあります。

興味がありましたら調べてみてください。

説明用にAPIコンテナのところのみにします。

背景が黒がymlファイル内の記述です。

説明を挟んでいきます。

version'3'
利用するDocker ComposeのVersionになります。
現在は、3系が最新です。下げることも可能ですが、
書き方が変わってきますので注意してください。
services:
以下はコンテナ情報になります。
 
  django:
  Dockerのイメージ名になります。
 
    build./contents/api
    Dockerイメージをビルドするときのパスになります。 
 
    container_namebase-api
 
    Dockerコンテナ名になります。
    この記述がない場合は、ビルドした際に自動で名称がつきます。
 
    restartalways
    コンテナの再起動設定になります。
    異常終了した際などにコンテナが落ちた時に記述があると自動で再起動します。
 
    ports:
      - "8000:8000"
    ホストOSとのポート転送設定になります。ホストOS:ゲストOSの順番に記述します。
    この記述がないとホストOSとゲストOS間の通信ができません。
    Webアプリとかの開発のときは必要になるので注意しましょう。
 
    commandsh -c "sleep 10; python manage.py runserver 0.0.0.0:8000"
    コンテナ起動時に実行するコマンド設定になります。
    もちろん不要の場合は、記述する必要がありません。
 
    volumes:
      - "../base-django :/code/base-api"
      - "./contents/server :/code" 
    ホストOSとの共有ディレクトリの設定になります。
    不要の場合は記述する必要はありません。
 
    depends_on:
      - db
    依存性の注入設定になります。
    この記述があるとDBコンテナ起動後にAPIコンテナが
               起動することになります。
    ただし、DBコンテナの起動 = MySQLの起動後ではありません。
    DBコンテナが起動後にMySQLの起動になります。
    このため、APIコンテナが起動してコマンドが実行されたときに
              MySQLが立ち上がり途中があるのはそのためです。
 
    ttytrue
    起動したコンテナを起動したままにする宣言になります。
    ないと起動後にコンテナが終了しますので注意してください。
 

 今回、開発環境に使用したdocker-compose.ymlの内容説明としてはこんな内容です。

ネットワークの設定があったりします。

ネットワークを設定するとIPアドレスを指定できたりします。