Настройте контейнер Docker только с помощью команды docker-compose up

У меня есть оценка, в которой я должен создать контейнер Docker с CakePHP. У меня уже есть работающий контейнер Docker с CakePHP, и я запускаю для своего контейнера следующие команды:

docker-compose build

docker-compose run cakephp composer install --no-interaction

docker-compose run cakephp bin/cake migrations migrate

docker-compose run cakephp bin/cake migrations seed

docker-compose up

Цель состоит в том, чтобы сократить процесс до выполнения только одной команды докер-компоновать, чтобы иметь возможность начать тестирование контейнера. Я новичок в Docker и CakePHP, поэтому не знаю, как это сделать.

Любая помощь приветствуется!

Докерфайл

#start with our base image (the foundation) - version 7.1.29
FROM php:7.1.29-apache

#install all the system dependencies and enable PHP modules 
RUN apt-get update && apt-get install -y \  
      gcc \
      make \
      autoconf \
      libc-dev \
      pkg-config \
      libicu-dev \
      libpq-dev \
      libmcrypt-dev \
      mysql-client \
      git \
      zip \
      unzip \
    && rm -r /var/lib/apt/lists/* \
    && docker-php-ext-configure pdo_mysql --with-pdo-mysql=mysqlnd \
    && docker-php-ext-install \
      intl \
      mbstring \
      mcrypt \
      pcntl \
      pdo_mysql \
      pdo_pgsql \
      pgsql \
      opcache

RUN set -eux; apt-get update; apt-get install -y libzip-dev zlib1g-dev; docker-php-ext-install zip

#install composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin/ --filename=composer

ENV COMPOSER_ALLOW_SUPERUSER=1

#set our application folder as an environment variable
ENV APP_HOME /var/www/html

#change uid and gid of apache to docker user uid/gid
RUN usermod -u 1000 www-data && groupmod -g 1000 www-data

#change the web_root to laravel /var/www/html/public folder
RUN sed -i -e "s/html/html/webroot/g" /etc/apache2/sites-enabled/000-default.conf

# enable apache module rewrite
RUN a2enmod rewrite && \
        echo "ServerName localhost" >> /etc/apache2/apache2.conf

#copy source files and run composer
COPY . $APP_HOME

# install all PHP dependencies
RUN composer install --no-interaction

#change ownership of our applications
RUN chown -R www-data:www-data $APP_HOME

докер-compose.yml

version: '2'
services:
  cakephp:
    build: .
    depends_on:
      - mysql
    links:
      - "mysql"
    ports:
      - "4000:80"  
    volumes:
      - .:/var/www/html/
    environment:
      - SECURITY_SALT= *some salt here*  
      - MYSQL_URL=mysql
      - MYSQL_USERNAME=root
      - MYSQL_PASSWORD=root
  mysql:
    image: mysql:5.6
    volumes:
      - mysql-data:/var/lib/mysql
    environment:      
      - MYSQL_DATABASE=cakephp
      - MYSQL_ROOT_PASSWORD=root
volumes:
  mysql-data:
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
4
0
2 008
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Опция 1

Что я обычно делаю, чтобы сократить количество команд при работе с Docker и Docker Compose в целом, так это использование Makefile.

Итак, в вашем случае вы можете написать что-то вроде:

Makefile

SUDO := $(shell groups | grep -q docker || echo sudo)

.PHONY: start

start:
    $(SUDO) docker-compose build \
    && $(SUDO) docker-compose run cakephp composer install --no-interaction \
    && $(SUDO) docker-compose run cakephp bin/cake migrations migrate \
    && $(SUDO) docker-compose run cakephp bin/cake migrations seed \
    && $(SUDO) docker-compose up

Все, что вам нужно сделать, это поместить этот файл в папку вашего проекта и запустить make start.

(Часть $(SUDO) гарантирует, что вы сможете комфортно запускать это даже с пользователем, не входящим в группу docker.)

Вариант 2

Чтобы просто запустить docker-compose up (возможно, с флагом --build), вам нужно будет написать небольшой скрипт, который вы COPY вставите в образ Docker (вы уже делаете это с COPY . $APP_HOME — при условии, что вы поместите этот скрипт там, где точки контекста сборки Docker to), а затем используйте его как ENTRYPOINT.

Что-то вроде этого должно сработать для вас.

точка входа.sh:

#!/bin/sh
set -e

cakephp composer install --no-interaction
cakephp bin/cake migrations migrate
cakephp bin/cake migrations seed

exec "$@"

В вашем Dockerfile вам нужно будет поместить ENTRYPOINT ["/bin/sh", "entrypoint.sh"]

Ваш ответ очень полезен, и спасибо, что нашли время ответить. Сама оценка требует, чтобы завершенный контейнер нуждался только в команде docker-compose up для возможности тестирования. Я читал в Интернете, что, возможно, сценарий оболочки, написанный в Dockerfile, может работать, но у меня еще не было времени попробовать это.

Logan 14.05.2019 03:30

@Logan, я обновил свой ответ, пожалуйста, проверьте, можете ли вы пойти оттуда. :)

bellackn 14.05.2019 12:14

Спасибо за помощь! Это очень ценно :)

Logan 14.05.2019 17:27

Другие вопросы по теме