希望问题标题不会太混乱。
基本上我有一个基于Docker的Symfony 3应用程序。
我希望在Docker启动时运行应用程序的数据库迁移。基本上这样我只需运行' docker-compose up'就可以让应用程序启动并运行灯具数据。
但是如果所有容器都来自图像呢?
我的应用程序将使用以下docker-compose.yml
运行version: '2'
services:
nginx:
image: nginx:latest
container_name: symfony_nginx
ports:
- "80:80"
volumes_from:
- php
volumes:
- ./etc/build/dev/nginx/conf.d:/etc/nginx/conf.d
- ./var/logs/nginx:/var/log/nginx
php:
image: letsbonus/php-dev:7.0
container_name: symfony_php
volumes:
- ./:/app
ports:
- "2222:22"
working_dir: /app
redis:
image: redis:3.0.7-alpine
container_name: symfony_redis
elk:
image: willdurand/elk
container_name: symfony_elk
ports:
- "81:80"
volumes:
- ./etc/build/dev/elk/logstash:/etc/logstash
- ./etc/build/dev/elk/logstash/patterns:/opt/logstash/patterns
volumes_from:
- php
database:
container_name: symfony_mysql
image: mysql
command: --general-log=/var/log/mysql/general.log
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=symfony
ports:
- 3306:3306
但是后来需要我手动运行迁移。
由于我无法弄清楚如何做到这一点,我想我会为docker-compose.yml添加另一个容器定义
build:
context: .
dockerfile: Dockerfile.migrations
volumes_from:
- php
links:
- database
- php
depends_on:
- database
- php
然而,自定义dockerfile开始长出手臂和腿,如下所示。
FROM ubuntu:16.04
RUN apt-get update
RUN apt-get install -y sudo
RUN apt-get install -y apt-transport-https
RUN apt-get install -y php7.0 php-xml php7.0-mysql
RUN apt-get install -y mysql-server-core-5.7 mysql-client-5.7
WORKDIR /app
COPY opt/deployment/development/run.sh /usr/bin
ENTRYPOINT [ "/usr/bin/run.sh" ]
这一切似乎只是为了运行一个shell脚本,这让我觉得我错过了一些错误。
有关正确/最佳实现方法的想法吗?