1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Docker Compose】DooDを使って、PHPファイルからPythonコンテナ内のPythonファイルを呼び出す方法

Posted at

はじめに

備忘録
タイトルの通りです。
どなたかのお役に立てれば幸いです。

ディレクトリ/ファイル構造

以下のような構造であるとします。

sample/
  ├─ web/
  │   ├─ src/
  │   │   └─test.php
  │   └─ Dockerfile
  │
  ├─ python/
  │   ├─ src/
  │   │   └─test.py
  │   └─ Dockerfile
  │
  └─ docker-compose.yml

python/test.py

今回は以下のようなプログラムとします。

python/test.py
list = [
    'Apple',
    'Banana',
    'Orange',
    'Kiwi',
    'Strawberry',
    'Mango'
]

for data in list:
    print(data)

web/について

exec関数を使って、$commandで指定したコマンドを実行するtest.phpを作ります。

test.php
<?php

$command = "docker exec -it sample-python3-1 python3 test.py";
exec($command, $response);

foreach ($response as $data) {
    echo $data . "\n";
};

今回は、DooDという仕組みを使って、Dockerコンテナの中でdockerコマンドが使えるようにします。

この仕組みを使うためには、/var/run/docker.sockのマウントに加え、Dockerをコンテナ内でインストールする必要があります。

まず、/var/run/docker.sockをマウントします。

docker-compose.ymlphpサービスのところに、以下を追加します。

docker-compose.yml
php:
  volumes:
    - /var/run/docker.sock:/var/run/docker.sock

つぎに、Dockerをインストールします。(ついでにDocker Composeもインストールします。)

web/Dockerfileに以下を追加します。

web/Dockerfile
RUN apt update
RUN apt install -y docker.io docker-compose

以下を実行することで、dockerコマンドが使える状態のコンテナを立ち上げられます。

$ docker compose up -d --build

以上でDooDの準備が整いました。

次に、Dockerコンテナの中に入り、PHPファイルを実行します。

# Dockerコンテナ一覧を表示
$ docker ps
CONTAINER ID   IMAGE            COMMAND                   CREATED          STATUS          PORTS                                      NAMES
86023c6740d6   sample-web       "docker-web-entrypoi…"    15 minutes ago   Up 15 minutes   0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   sample-web-1
91e6cb4dcf2c   sample-python3   "python3"                 15 minutes ago   Up 15 minutes                                              sample-python3-1

# コンテナに入る(コンテナ名には`docker ps`で確認したコンテナの名前)
$ docker container exec -it コンテナ名 bash
# 上記の場合
$ docker container exec -it sample-web-1 bash
root@0ac512c09b48:/var/www/html#   # ← こんな感じに表示されればOK

# phpファイルを実行する
root@0ac512c09b48:/var/www/html# ls
test.php
root@0ac512c09b48:/var/www/html# php test.php
Apple
Banana
Orange
Kiwi
Strawberry
Mango
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?