勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

docker-compose.ymlでまとめてコンテナ作成・起動・ネットワーク接続する方法

  サーバー

Podmanでコンテナを作成してネットワーク接続する際、Cockpit上やCUIで色々対応していたがこれが面倒くさい。調べたところ「docker-compose.yml」という設定ファイルを作成の上、コマンドを打てばその辺りをまとめて一括で対応してくれるらしい。以下に詳細をメモ。

 

環境について

VPS

今回はKAGOYA CLOUD VPSのCPU1コア / メモリ1GBプランで作業した。SSH接続は公式案内の通り以下でログインできる。

  • 接続ポート -> 22
  • ユーザ名 -> root
  • パスワード or 秘密鍵 -> インスタンス作成時に選択したもの

ホスト(VPS)側 AlmaLinux

詳細なバージョンは以下の通り。

# AlmaLinuxのバージョン確認
cat /etc/redhat-release

# 実行結果
AlmaLinux release 8.10 (Cerulean Leopard)

 

対応方法

設定ファイル(docker-compose.yml)の作成

コメントを参考に以下内容のファイルを適当なディレクトリにアップロードする。尚、今回は「web-db-net」というネットワークを事前に作成していたが、事前に作成していない場合「external: true」は不要なので削除すること。

version: '3.8'

services:

    # Webコンテナ用設定
    web:
        # コンテナ名
        container_name: apache-php8.4-plus-1.4-container

        # 使用するイメージ
        image: apache-php8.4-plus-1.4

        # ホスト再起動時にコンテナを自動起動
        restart: always
 
        # ポートマッピング
        ports:
            - "8080:80"

        # ボリューム設定
        volumes:
            # マウントするディレクトリ
            - ../podman_test_1:/var/www/html
            # PHPとApacheの設定ファイル
            - ./ymlファイルの設置ディレクトリを相対パス指定/custom-php.ini:/usr/local/etc/php/conf.d/custom-php.ini:ro
            - ./ymlファイルの設置ディレクトリを相対パス指定/mpm_prefork.conf:/etc/apache2/mods-available/mpm_prefork.conf:ro

        # ネットワーク設定
        networks:
            - web-db-net

        deploy:
            resources:
                limits:
                    # 割り当てメモリ
                    memory: 384M

    # DBコンテナ用設定
    db:
        # コンテナ名
        container_name: mariadb-plus-1.0-container

        # 使用するイメージ
        image: mariadb:11.4

        # ホスト再起動時にコンテナを自動起動
        restart: always

        # 環境変数
        environment:
            MARIADB_ROOT_PASSWORD: test_root_pass
            MARIADB_DATABASE: test_database
            MARIADB_USER: test_user
            MARIADB_PASSWORD: test_user_pass

        # ボリューム設定
        volumes:
            # データの永続化マウント
            - ../../../lib/mariadb_data:/var/lib/mysql
            # 設定ファイル
            - ./ymlファイルの設置ディレクトリを相対パス指定/custom-mariadb.cnf:/etc/mysql/conf.d/custom-mariadb.cnf:ro

        # ネットワーク設定
        networks:
            - web-db-net

        deploy:
            resources:
                limits:
                    # 割り当てメモリ
                    memory: 256M

# ネットワーク設定
networks:
    web-db-net:
        # 作成済みのネットワークを使用
        external: true

Docker Compose CLIプラグインの導入

私の環境だと以下コマンドを実行したところエラー。

# docker-compose.ymlを設置したディレクトリに移動
cd /【docker-compose.yml】を設置したディレクトリ/

# docker-compose.ymlで指定した内容を実行
podman compose up -d

# エラーが出力
-bash: podman-compose: command not found

以下でもエラー。

# podman compose up -d

# 以下エラーが出力
Error: looking up compose provider failed
7 errors occurred:
        * exec: "docker-compose": executable file not found in $PATH
        * exec: "/root/.docker/cli-plugins/docker-compose": stat /root/.docker/cli-plugins/docker-compose: no such file or directory
        * exec: "/usr/local/lib/docker/cli-plugins/docker-compose": stat /usr/local/lib/docker/cli-plugins/docker-compose: no such file or directory
        * exec: "/usr/local/libexec/docker/cli-plugins/docker-compose": stat /usr/local/libexec/docker/cli-plugins/docker-compose: no such file or directory
        * exec: "/usr/lib/docker/cli-plugins/docker-compose": stat /usr/lib/docker/cli-plugins/docker-compose: no such file or directory
        * exec: "/usr/libexec/docker/cli-plugins/docker-compose": stat /usr/libexec/docker/cli-plugins/docker-compose: no such file or directory
        * exec: "podman-compose": executable file not found in $PATH

そのため、まずは以下の通りDocker Compose CLIプラグインを導入する。

# Docker Composeプラグイン用ディレクトリを作成
mkdir -p /usr/libexec/docker/cli-plugins

# Docker Composeバイナリをダウンロード
curl -SL https://github.com/docker/compose/releases/latest/download/docker-compose-linux-x86_64 -o /usr/libexec/docker/cli-plugins/docker-compose

# 実行権限を付与
chmod +x /usr/libexec/docker/cli-plugins/docker-compose

正常に導入できたら以下コマンドを実行する。

# docker-compose.ymlを設置したディレクトリに移動
cd /【docker-compose.yml】を設置したディレクトリ/

# docker-compose.ymlで指定した内容を実行
podman compose up -d

以上でコンテナが起動した筈。以下でコンテナ一覧とメモリ使用量が確認できる。

# コンテナ一覧を表示
podman ps

# メモリ使用量
podman stats --no-stream

 - サーバー

  関連記事

Podmanで導入したApacheのチューニング(mpm_prefork)に関する設定方法
Podmanで導入したApacheのチューニング(mpm_prefork)に関する設定方法

Podmanで導入したApacheのチューニング(mpm_prefork)を行い ...

Podmanで作成したApache用コンテナにLet's Encryptを導入しHTTPS接続できるようにする方法
Podmanで作成したApache用コンテナにLet's Encryptを導入しHTTPS接続できるようにする方法

先日Podmanで作成したApache用コンテナに対してドメインを割り当てたが、 ...

PodmanにComposerを導入し、パッケージをインストールする方法
PodmanにComposerを導入し、パッケージをインストールする方法

先日Podmanで導入したapache-phpに各種PHPモジュールを追加したが ...

Podmanでデータベース用コンテナを作成しWebサーバ用コンテナと接続する方法
Podmanでデータベース用コンテナを作成しWebサーバ用コンテナと接続する方法

Podmanでデータベース用コンテナを作成し、Webサーバ用コンテナからPHPで ...

Podmanで導入したapache-phpに各種PHPモジュールを追加する方法
Podmanで導入したapache-phpに各種PHPモジュールを追加する方法

先日Podmanでapache-php8.4を導入したが、phpinfoで確認す ...