Создайте проект в Docker-контейнере и откройте общую папку - PullRequest
0 голосов
/ 22 октября 2018

Я использую docker-compose для сборки своих контейнеров, и в состоянии я извлекаю приватный репозиторий и создаю проект внутри контейнера с помощью composer.

У меня следующая структура

- docker-project
-- docker //here I keep the containers
--- apache
---- Dockerfile // the content what I posted
-- docker-compose.yml
-- src //this is the mounted folder where I can work on project

После сборки я ожидал, что проект сборки будет отображаться в смонтированной папке, но вместо этого я получаю пустые папки, вот мой compose yml

     apache:
        container_name: apache2
        build:
          context: ./docker/apache

        ports:
        - 80:80
        - 443:443
        links:
        - database
        restart: always
        volumes:
        - ./src:/var/www/
        - ./docker/logs/apache2/:/var/log/apache2/
        - ~/.ssh/id_rsa:/root/.ssh/id_rsa
        - ./docker/apache/sites/:/etc/apache2/sites-enabled

и здесь у меня есть файл docker

FROM php:7.1-apache
ENV APACHE_DOCUMENT_ROOT /var/www
RUN apt-get update \
  && apt-get install -y --no-install-recommends \
    curl \
    openssl \
    openssh-server \
    sendmail \
    sendmail-bin \
    mailutils \
    libicu-dev \
    libmemcached-dev \
    libz-dev \
    libpq-dev \
    libjpeg-dev \
    libfreetype6-dev \
    libssl-dev \
    libmcrypt-dev \
    libxml2-dev \
    libbz2-dev \
    libjpeg62-turbo-dev \
    libfreetype6-dev \
    libjpeg62-turbo-dev \
    zlib1g-dev \
    libicu-dev  \
    g++ \
    libxml2-dev \
    git \
  && rm -rf /var/lib/apt/lists/*

# Install various PHP extensions which are required to build project
RUN docker-php-ext-configure bcmath --enable-bcmath \
    && docker-php-ext-configure pcntl --enable-pcntl \
    && docker-php-ext-configure pdo_mysql --with-pdo-mysql \
    && docker-php-ext-configure pdo_pgsql --with-pgsql \
    && docker-php-ext-configure mbstring --enable-mbstring \
    && docker-php-ext-configure soap --enable-soap \
    && docker-php-ext-install \
        bcmath \
        json \
        intl \
        mbstring \
        mcrypt \
        mysqli \
        pcntl \
        pdo_mysql \
        pdo_pgsql \
        soap \
        sockets \
        zip \
  && docker-php-ext-configure gd \
    --enable-gd-native-ttf \
    --with-jpeg-dir=/usr/lib \
    --with-freetype-dir=/usr/include/freetype2 && \
    docker-php-ext-install gd

##install xdebug and enable it. We need this for php unit coverage
RUN yes | pecl install xdebug \
&& docker-php-ext-enable xdebug

RUN yes | pecl install mongodb \
&& docker-php-ext-enable mongodb

RUN update-ca-certificates

# install composer to can install dependencies
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
    && php composer-setup.php --install-dir=/usr/local/bin --filename=composer \
    && php -r "unlink('composer-setup.php');"


RUN mkdir /root/.ssh
RUN rm -rf /var/www/project
WORKDIR /var/www/
RUN git checkout path/to/repo
RUN ls -l /var/www
WORKDIR /repo
RUN composer install
RUN ls -l

на docker-compose build Я вижу, что проект будет собран, но на docker-compose up папка пуста

Чего мне не хватает в этом случае?

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Я мог бы сказать, что сейчас мы работаем.Вместо того, чтобы клонировать репо, как это делаем мы, мы клонируем репо на локальном компьютере.

  • У вас есть стандартный образ докера, который вы создали из php:7.1-apache с необходимыми необходимыми программамидля запуска проекта.

  • Затем вы клонируете свой проект на хост-машину (подумайте в папку src)

  • Вы запускаете composer install локально.

  • Тогда, как вы определили, docker-compose.yml смонтируйте папку src в /var/www/

0 голосов
/ 22 октября 2018

Вы устанавливаете том на /var/www при запуске контейнера.

/var/www будет таким же, как ./src/www на хост-компьютере, заменяя все, что было добавлено к /var/www во время сборки образа.

Подумайте об использовании образа докера composer или обязательно установите зависимости в другой каталог.Проверьте vendor_dir ключ в composer.json

Пример: composer.json

{
 "require": {

 },
 "config": {
   "vendor-dir": "/var/www/vendor/"
 }
}

Сборка образа Docker:

...
RUN mkdir -p /var/www/vendor/
COPY composer.json /var/www/vendor/
RUN cd /var/www/vendor/ && composer install
RUN mkidr -p /var/www/app
...

docker-compose.yml

volumes:
  - ./src:/var/www/app
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...