代码之家  ›  专栏  ›  技术社区  ›  fefe

在Docker容器内构建项目并在mounted中共享文件夹

  •  0
  • fefe  · 技术社区  · 6 年前

    我使用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
    

    在构建之后,我希望构建项目会出现在mounted文件夹中,但是我得到的是空文件夹,这里是我的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 回复  |  直到 6 年前
        1
  •  0
  •   rckrd    6 年前

    您正在安装卷 /var/www 启动容器时。

    /var/网址 将与 ./src/www 在主机上,替换添加到 /var/网址 在建立图像的过程中。

    考虑使用 composer docker image 或者确保将依赖项安装到另一个目录。查看 vendor_dir 钥匙 composer.json

    例子: 作曲家.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
    
        2
  •  0
  •   Ntwobike    6 年前

    我可以给你一个我们现在工作的方式。与其像这样克隆repo,不如在本地机器中克隆repo。

    • 你有标准的Docker图片 php:7.1-apache 使用运行项目所需的软件。

    • 然后将项目克隆到主机上。(考虑到SRC文件夹)

    • 你运行 composer install 本地。

    • 然后正如你所定义的 docker-compose.yml 安装您的 src 文件夹到 /var/www/