Как запустить dockerfile вместе с docker-compose?
Всем привет! Есть такая проблема.. Составил инструкции для docker-compose, где подымаю nginx и всю текущущю директорию запихиваю в контейнер. Но чтобы все хорошо работало, нужно зайти в контейнер и произвести настройку env, так же нужно создать создать миграции (проект на symfony).И собственно сама проблема: как это все автоматизировать? Типа чтобы при команде docker-compose up производились те настройки. Вроде как нужно создать dockerfile? Да? Но как он запуститься одновременно с контейнирами?
Как я делаю. Выполняю команду docker exec -it {id_php} /bin/bash и создаю миграции. Как это автоматизировать?
version: '3'
services:
mysql:
container_name: mysql
hostname: mysql
image: mysql:8
restart: always
environment:
- MYSQL_DATABASE=test
- MYSQL_USER=tester
- MYSQL_PASSWORD=123123
- MYSQL_ALLOW_EMPTY_PASSWORD="yes"
ports:
- "3306:3306"
php-fpm:
container_name: php
image: webdevops/php-dev:7.4
hostname: php-fpm
volumes:
- "./:/app"
working_dir: "/app"
depends_on:
- mysql
nginx:
container_name: nginx
image: webdevops/nginx
hostname: nginx
environment:
WEB_DOCUMENT_ROOT: /app/public
WEB_DOCUMENT_INDEX: index.php
WEB_PHP_SOCKET: php-fpm:9000
ports:
- "8080:80"
volumes:
- "./:/app"
depends_on:
- php-fpm
Вот мой docker-compose
Ответы (1 шт):
Но чтобы все хорошо работало, нужно зайти в контейнер и произвести настройку env
Эти действия прописываются в команде RUN, не нужно заходить в файловую систему контейнера через запуск с флагом -it.
Пример 1 (Node.js)
Здесь устанавливается npm при сборке.
FROM node:14
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
CMD [ "node", "app.mjs" ]
Пример 2 (.Net Core)
Здесь еще и указывается переменная среды в ENV.
FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim
WORKDIR /App
RUN apt-get update;apt-get install libldap-2.4-2:amd64 -y; ... и еще много чего
COPY . /App
ENV KRB5_KTNAME=/...../win.keytab
ENTRYPOINT ["dotnet", "App.dll"]
Пропишите по аналогии инструкции для
произвести настройку env, так же нужно создать создать миграции
Много инструкций RUN использовать не рекомендуется. Создайте одну большую строку из всех необходимых инструкций, проверьте ее в интерактивном режиме запуска контейнера. Если все работает, то ее можно прописывать в RUN. Если будут скачиваться пакеты, требующие подтверждения установки (нажатия y), добавляйте в конец команды флаг -y.