Я хотел бы отправить приложение Laravel в Docker контейнере,
Когда я работал профессионалом с Laravel, я запустил Php Docker Stack , пакет composer для развертывания Laravel с docker в производстве, потому что все решения вовремя были сосредоточены в процессе разработки, но между тем я перешел на работу в Security и остановился это разработка, но вы можете использовать ее в качестве отправной точки для вашего профессионального развертывания, потому что она разделяет каждую службу на свой собственный контейнер.
Затем стек разработки расширяется из производственного стека, а не наоборот. можно увидеть во многих других стеках.
я должен использовать Docker в Docker или docker - составить, чтобы добавить все услуги?
Docker в Docker предназначен для docker разработки, и некоторые используют его в конвейерах CI и даже здесь используют его с осторожностью согласно словам создателя :
Основная цель Docker -in- Docker должен был помочь с разработка самого Docker. Многие люди используют его для запуска CI (например, с Jenkins), что поначалу кажется нормальным, но они сталкиваются со многими «интересными» проблемами, которых можно избежать, если вместо этого подключить сокет Docker к контейнеру Jenkins.
Профессиональное развертывание
Теперь мой вопрос: какой самый профессиональный способ доставки такого мультисервисного приложения.
Это действительно зависит от технического уровня клиентской базы пользователей, но вы можете начать с docker compose, а затем обновить до Docker Swarm или Even Kubernetes.
Попробуйте предоставить все образы из вышестоящего частного реестра, а не создавать их локально, как вы это делаете в некоторых из них.
Безопасность
Порты базы данных
ports:
# So you can use a database client on your host machine
- 3306:3306
Это 3306:3306
эквивалентно 0.0.0.0:3306:3306
, поэтому, если вы хотите, чтобы база данных была доступна только на локальном хосте, вы должны сделать вместо этого 127.0.0.1:3306:3306
, но если ваша база данных должна быть доступна только для других контейнеров в стеке, вы можете удалить порты в целом, и вместо этого вы можете вызвать базу данных из своего кода, используя docker имя службы compose, в вашем случае это database
.
Пароль базы данных
environment:
- MYSQL_ROOT_PASSWORD=secret
A лучший способ предоставить секреты - установить их в файле .env
в root вашего проекта, а затем использовать переменные в docker-compose.yml
:
environment:
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD? Missing password for mysql root user.}
или просто заменить environment:
на ваш docker-compose.yml
с файлом .env
в root вашего проекта:
env_file:
- ./.env