在Docker容器启动时运行Symfony数据库迁移脚本

时间:2017-01-05 17:46:51

标签: docker symfony docker-compose database-migration dockerfile

希望问题标题不会太混乱。

基本上我有一个基于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脚本,这让我觉得我错过了一些错误。

有关正确/最佳实现方法的想法吗?

0 个答案:

没有答案