Docker Cmposeで複数コンテナ管理②(ハンズオン)


この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

戻るリンク

Docker Cmposeで複数コンテナ管理①(ハンズオン)
https://cloud5.jp/docker-cmpose-1/

docker compose用ファイル

①環境変数ファイル

 ./docker/.env

# DB用環境変数(MySQL)
DB_HOST_NAME=mydb
DB_NAME=testdb
DB_USER=test
DB_PASS=test1234
DB_TZ=Asia/Tokyo
DB_PORT=3306

# app用環境変数(nodejs)
APP_NODE_ENV=development

②DockerCmoposeファイル

./docker/docker-compose

version: "3"
services:
  db:
    env_file: .env
    restart: always
    image: mysql:5.7
    container_name: ${DB_HOST_NAME}
    volumes:
        # 初期データを投入するSQLが格納されているdir
        - ./mysql/initdb:/docker-entrypoint-initdb.d
        # 永続化するときにマウントするdir
        - ./mysql/datadir:/var/lib/mysql
        # db設定
        - ./mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf
        # ログ
        - ./mysql/logs:/var/log/mysql
    ports:
       - ${DB_PORT}:3306
    environment:
      - MYSQL_USER=${DB_USER}
      - MYSQL_PASSWORD=${DB_PASS}
      - MYSQL_ROOT_PASSWORD=${DB_PASS}
      - TZ=${DB_TZ}

  app:
    build: 
      context: ./node
      dockerfile: Dockerfile
    container_name: myapp
    environment:
      - MYSQL_HOST=${DB_HOST_NAME}
      - MYSQL_USER=${DB_USER}
      - MYSQL_PASS=${DB_PASS}
      - MYSQL_DB=${DB_NAME}
    volumes:
      - ./node/myapp/src:/usr/src/app/src
    ports:
      - "30001:8005"

Dockercomposeファイル説明

1:全体

1 :vesion:
docker-composeで使用するバージョンを定義しています。
2~4 :services:
Docker-Composeでは、アプリケーションを動かすための各要素をServiceと読んでいます。そのため、ComposeFileにも、serviceとして、それぞれのServicesの内容をネストさせて記述していきます。

2:DB部分


1:service名
2:システム的な環境変数定義ファイル(./docker/.envへ参照)
3:コンテナを自動起動オプション
4:イメージファイル
5:コンテナID(サンプルではnodejsからMySQLへアクセスする際にコンテナIDがホスト名として使用するために、環境変数にしました)
6~10:コンテナにホストボリュームをマウントする設定。
11:ポート指定
12:環境変数の定義

3:App部分


1:service名
2~4:構築時に適用するオプションを指定します。build で指定できるのは、構築用コンテクストのパスを含む文字列だけでなく、 context の配下にある特定の物(オブジェクト)や、 dockerfile のオプションと 引数 を指定できます。
5:コンテナID
6:環境変数の定義
7:コンテナにホストボリュームをマウントする設定。
8:ポート指定

docker-compose起動確認

1.事前確認

# dockerフォルダに移動
cd docker
# フォルダ階層確認
tree ./ -a
# docker イメージとコンテナ確認
docker ps -a 
docker images

2.docker-compose起動

# 
#起動コマンド
![](https://cloud5.jp/wp-content/uploads/2021/03/CleanShot-2021-03-31-at-22.12.06@2x-640x293.jpg)
##起動したコンテナの停止と削除
#docker-compose down



3.起動後の確認

# データ永続化確認
ls -l ./mysql/datadir
# 初期データ確認
docker exec -it mydb bsha -p
mysql -utest -ptest1234
select * from testdb.user;

# docker イメージとコンテナ確認
docker images
docker ps -a

nodejs画面確認

注意点

  1. docker-compose コマンド自動する前に、docker-composeファイルの格納フォルダに移動するのは前提条件となります。
     docker-composeファイルフォルダに移動しない場合は"-f" オプションを付けてください。
    例:docker-compose -f docker/docker-compose.yml up -d –build
  2. docker-composeファイルを変更した場合、docker-compose up の"–build" オプションを付けないと、変更内容が反映されない。

参考資料

docker-compose.ymlの書き方
https://knowledge.sakura.ad.jp/16862/
docker-compose downとstopの違い
https://qiita.com/yusuke_mrmt/items/e05d7914065824384a6b

Last modified: 2024-02-05

Author