4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

symfony を Dockerで利用する

Last updated at Posted at 2022-05-15

目的

SymfonyをDockerで開発したい。自分でdocker-composeファイルを作っていたけど、公式に乗っかりたいな?ってところで、調べてみた

メモ

公式のドキュメント、Using Docker with Symfony で、https://github.com/dunglas/symfony-docker を使うといいよと記載がある。

https://github.com/dunglas/symfony-dockerGetting Startedを進めていくと、自動的にプロジェクト作成されて表示される。

image.png

特徴

  • このままプロダクションとしてDockerでデプロイするまで考えられている。

  • Support for Extra Servicesに記載されているけど、composerで以下を導入すると、連動して、DockerファイルとDocker-compose.ymlが更新される!?

  • symfony/orm-pack: install a PostgreSQL service

  • symfony/mercure-bundle: use the Mercure.rocks module shipped with Caddy

  • symfony/panther: install chromium and these drivers

  • symfony/mailer: install a MailCatcher service

  • blackfireio/blackfire-symfony-meta: install a Blackfire service

イメージとしては、composerでDoctrineを導入すると、.envに説明が追加されます。
ああいう感じで、Dockerfileやdocker-comopse.ymlが変更されます。

Dockerfile
###> recipes ###
###> doctrine/doctrine-bundle ###
RUN apk add --no-cache --virtual .pgsql-deps postgresql-dev; \
	docker-php-ext-install -j$(nproc) pdo_pgsql; \
	apk add --no-cache --virtual .pgsql-rundeps so:libpq.so.5; \
	apk del .pgsql-deps
###< doctrine/doctrine-bundle ###
###< recipes ###

docker-compose.yml

###> doctrine/doctrine-bundle ###
  database:
    image: postgres:${POSTGRES_VERSION:-13}-alpine
    environment:
      POSTGRES_DB: ${POSTGRES_DB:-app}
      # You should definitely change the password in production
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-ChangeMe}
      POSTGRES_USER: ${POSTGRES_USER:-symfony}
    volumes:
      - db-data:/var/lib/postgresql/data:rw
      # You may use a bind-mounted host directory instead, so that it is harder to accidentally remove the volume and lose all your data!
      # - ./docker/db/data:/var/lib/postgresql/data:rw
###< doctrine/doctrine-bundle ###

volumes:
  php_socket:
  caddy_data:
  caddy_config:
###> symfony/mercure-bundle ###
###< symfony/mercure-bundle ###

###> doctrine/doctrine-bundle ###
  db-data:
###< doctrine/doctrine-bundle ###

このため、イメージのリビルドをしないと動かなかくて、1日がはまりました><

はまった内容

この仕組み上、PostgreSQLやMailCatcherのコンテナが自動的に追加されるので、PHPのコンテナがDBの起動を待ち受けるのです。

entryPointのシェルスクリプトでDBの起動確認をするのですけど、PostgreSQL関係のモジュールがイメージに入ってないので、永遠に疎通確認ができませんでした。

image.png

解決策

これでハマる人もいるらしく、常にDockerを起動する時は、ビルドして見ること必須みたい。。。

# docker-compose up --build

メールキャッチャー

symfony/mailerを導入すると、docker-compose.override.ymlに以下のようにイメージが追加されます。
アウト側のポート番号が指定されていないので、適当にマッピングされるようです。

docker-compose.override.yml
###> symfony/mailer ###
  mailer:
    image: schickling/mailcatcher
    ports: [1025, 1080]
###< symfony/mailer ###

http://127.0.0.1:1080にアクセスしてもアクセスができません。

docker-compose psで確認をしました。

# docker-compose -f .\docker-compose.yml -f .\docker-compose.override.yml -f .\docker-compose.debug.yml ps              
NAME                         COMMAND                  SERVICE             STATUS              PORTS
test-adminer-1    "entrypoint.sh docke…"   adminer             running             0.0.0.0:8033->8080/tcp
test-caddy-1      "caddy run --config …"   caddy               running             0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:443->443/udp
test-database-1   "docker-entrypoint.s…"   database            running             0.0.0.0:58077->5432/tcp
test-mailer-1     "mailcatcher --no-qu…"   mailer              running             0.0.0.0:58080->1025/tcp, 0.0.0.0:58081->1080/tcp
test-php-1        "docker-entrypoint p…"   php                 running (healthy)   9000/tcp
4
2
1

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
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?