🤖

compose.yaml を用いて、多人数・複数環境で同一の環境を構築できるようにする

2024/03/19に公開

compose.yaml を使って環境を構築する

  1. 今回の環境
  • MacOS 14.3.1
  • Lima 0.21.0
  1. 以下のような作業用のディレクトリ、及びファイルを作成する。
    ./sample1
    ├── compose.yaml
    └── web
        └── index.html
    
  2. compose.yaml に以下の内容をコピー、保存する。
    ※dockerイメージのタグに「latest」を指定すると、その時点での最新バージョンを取得してしまうため、必ずタグを指定する。
    compose.yaml
    services:
      web:
        image: httpd:2.4.58
        ports:
          - "8081:80"
        volumes:
          - ./web:/usr/local/apache2/htdocs
    
  3. 仮想Linux環境にsshで接続し、sample1 ディレクトリで以下のコマンドを実行する。
    command
    docker compose up -d
    
  4. Apacheが起動するので、ブラウザから表示を確認する。
    http://127.0.0.1:8081
    
  5. コンテナを停止する。
    command
    docker compose down
    

ポート番号の設定を外に出す

先の compose.yaml を利用することで共通の環境を構築出来るようにはなったが、環境によっては「8081」ポートが別プロジェクトで利用されてしまっている、といった場合が考えられるので、共通化したくない部分を外部化する。

  1. 以下の作業用のディレクトリ、及びファイルを作成する。
    ※「.env」ファイルを追加しただけ。
    ./sample1
    ├── .env
    ├── compose.yaml
    └── web
        └── index.html
    
  2. .env に以下の内容をコピー、保存する。
    .env
    ports="8081:80"
    
  3. compose.yaml を以下のように書き換える。
    ※.envファイルの読み込み、及び.envファイルに記述した変数portsを値として設定しただけ。
    compose.yaml
    services:
      web:
        env_file:
          - ./.env
        image: httpd:2.4.58
        ports:
          - ${ports}
        volumes:
          - ./web:/usr/local/apache2/htdocs
    
  4. あとは先と同様に仮想Linux環境から起動する。
    command
    docker compose up -d
    

おまけ(複数のコンテナを起動する場合)

  1. 今回は以下のような構成を想定。
    ※別にこのようなディレクトリ階層でなくてもOK。
    .
    ├── sample1
    │   ├── .env
    │   ├── compose.yaml
    │   └── web
    │       └── index.html
    └── sample2
        ├── .env
        ├── compose.yaml
        └── web
            └── index.html
    
  2. sample1、sample2の.envはそれぞれ以下のようにポート番号を記述する。
    compose.yaml はどちらも前のものと同一でOK。
    .env sampel1
    ports="8081:80"
    
    .env sample2
    ports="8082:80"
    
  3. 先と同様に仮想Linux環境にsshで接続し、sample1、sample2ディレクトリで以下のコマンドを実行する。
    command
    docker compose up -d
    
  4. コンテナを停止する場合も、それぞれのディレクトリでdownコマンドを実行する。
    command
    docker compose down
    

Discussion