PhpStorm + Docker Compose Run Test

用 Docker Compose 啟動程式所需的 service 並且以 docker compose 的 container 執行 test。

Docker

先在 project 裡增加 Dockerfile

1
2
3
4
5
6
7
8
9
10
FROM php:8.0-cli

RUN apt-get update && \
apt-get install -y \
libpq-dev \
libzip-dev \
libpng-dev \
libjpeg62-turbo-dev && \
docker-php-ext-configure gd --with-jpeg && \
docker-php-ext-install pdo pdo_pgsql gd

這邊會安裝 libzip-devlibpng-devlibjpeg62-turbo-dev 並設定與安裝 php extension gd 是為了 image upload 的 test。

build 出 image 並且上 tag:

1
2
$ docker build .
$ docker tag <image_id> cjwind/phpstorm-php8.0-cli

Docker Compose

增加 docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
version: "3"
services:
php:
image: cjwind/phpstorm-php8.0-cli:latest # docker image
deploy:
replicas: 1
volumes:
- ".:/opt" # mapping . in host to /opt in container
database:
image: postgres:12.3
container_name: "postgres"
deploy:
replicas: 1
environment:
- POSTGRES_PASSWORD=<your_password>

.env.testing

1
2
3
4
5
6
DB_CONNECTION=pgsql
DB_HOST=postgres # container name of database
DB_PORT=5432
DB_DATABASE=DB
DB_USERNAME=USERNAME
DB_PASSWORD=PASSWORD

PhpStorm Setting

Docker

因為 OS 是 Linux 所以選 Unix socket。

Troubleshooting

如果 connection 連不上,先檢查有沒有啟動 Docker daemon,有的話看看 user 是不是在 docker 這個 group 裡,沒有在 group 裡就把 user 加進 docker group、logout、login、重新啟動 PhpStorm 再試一次。

CLI Interpreter

按左上角的 + 選 From Docker

使用 Docker-compose 並且設定 config file 以及 service。設完可以看到第一張圖的樣子。

CLI Interpreter 選擇剛剛新增的 interpreter。

Run/Debug Configurations

service

按左上角的 + 選 Docker-compose

設定 Server 以及 Compose file path。

Run service

可以在 service window 看到跑起來的 container。

點 container 可以看到 log 啊 properties 等等資訊。

test

設定 test,使用 default interpreter。

Run test 可以看到是用 docker compose 執行。

About Docker Network

這裡只記錄一點點 docker network 有關的東西。

在 default 下,docker compose 裡的 container 的 network 是 bridge mode。

可以用 docker network ls 看到現在有哪些 network。

再用 docker network inspect NETWORK_NAME 可以看到該 network 的詳細資料,在其中 Containers 可以看到 container 被分配的 IP address。

Ref:https://ithelp.ithome.com.tw/articles/10206725