Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
docker:git克隆结果不在本地卷中,args未扩展_Git_Docker_Docker Compose - Fatal编程技术网

docker:git克隆结果不在本地卷中,args未扩展

docker:git克隆结果不在本地卷中,args未扩展,git,docker,docker-compose,Git,Docker,Docker Compose,我正试图通过Docker站起来。我可以手动让它工作,但我正在尝试改进它(使它在CI/CD环境中更可用),同时遵循最佳实践(例如:单一责任映像等) TLDR: 如何将git repo可靠地克隆到本地共享卷中 如何从.env文件签出特定的git标记 问题: 将git克隆到映射到本地卷的路径会导致本地路径中没有数据/文件 我发现有文章提到,在构建过程的早期映射一个空卷会导致路径为空(但我认为这并不直接适用于这里) docker compose config将显示TAO\u code\u标记的正确值

我正试图通过Docker站起来。我可以手动让它工作,但我正在尝试改进它(使它在CI/CD环境中更可用),同时遵循最佳实践(例如:单一责任映像等)

TLDR:

  • 如何将git repo可靠地克隆到本地共享卷中
  • 如何从.env文件签出特定的git标记
  • 问题:

  • 将git克隆到映射到本地卷的路径会导致本地路径中没有数据/文件
    • 我发现有文章提到,在构建过程的早期映射一个空卷会导致路径为空(但我认为这并不直接适用于这里)
  • docker compose config将显示
    TAO\u code\u标记的正确值
    ,但在签出期间失败(视为空)
    • 我知道,根据它在dockerfile中的调用方式,变量的shell扩展可能不会发生。但是,我已经看到了使用
      runecho$var
      的工作示例
  • /.env

    PHP_VERSION=7.0
    MYSQL_VERSION=5.7
    APACHE_VERSION=2.4.32
    TAO_CODE_TAG=v3.2-rc02
    DB_ROOT_PWD=password ;-)
    
    /docker compose.yml

    version: "3.2"
    
    services:
      git:
        build:
          context: './git/'
          args:
            TAO_CODE_TAG: ${TAO_CODE_TAG:?err}
        volumes:
          - ./tao-src/:/build
        container_name: git
    
      composer:
        image: composer/composer:php7  #  Would be nice to use tag from .env for php version
        command: install
        depends_on:
          - git
        volumes:
          - ./tao-src/:/app
        container_name: composer
    
      php:
        build:
          context: './php/'
          args:
            PHP_VERSION: ${PHP_VERSION:?err}
        depends_on:
          - composer
        networks:
          - backend
        ports:
          - 9000:9000
        volumes:
          - ./tao-src/:/var/www/html/
        container_name: php
    
      apache:
        build:
          context: './apache/'
          args:
            APACHE_VERSION: ${APACHE_VERSION:?err}
        depends_on:
          - git
          - php
          - mysql
        networks:
          - frontend
          - backend
        ports:
          - 80:80
        volumes:
          - ./tao-src/:/var/www/html/
        container_name: apache
    
      mysql:
        image: mysql:${MYSQL_VERSION:-latest}
        networks:
          - backend
        ports:
          - 3306:3306
        environment:
          - MYSQL_ROOT_PASSWORD=${DB_ROOT_PWD:?err}
        container_name: mysql
    
    networks:
      frontend:
      backend:
    
    version: "3.2"
    
    services:
      php:
        build:
          context: './php/'
          args:
            PHP_VERSION: ${PHP_VERSION:?err}
            TAO_CODE_TAG: ${TAO_CODE_TAG:?err} # <-- IMPORTANT
    
    /apache/Dockerfile

    ARG APACHE_VERSION=""
    FROM httpd:${APACHE_VERSION:+${APACHE_VERSION}-}alpine
    
    # Copy apache vhost file to proxy php requests to php-fpm container
    COPY demo.apache.conf /usr/local/apache2/conf/demo.apache.conf
    RUN echo "Include /usr/local/apache2/conf/demo.apache.conf" \
        >> /usr/local/apache2/conf/httpd.conf
    
    ARG TAO_CODE_TAG
    FROM alpine/git:1.0.4
    RUN apk add git \
        && mkdir /build \
        && git clone https://github.com/oat-sa/package-tao /build \
        && cd /build \
        && git checkout tags/v3.2-rc02 # Should use val from .env!
    VOLUME ["/build"] # Last in file so as to not "disappear" during build
    
    ARG PHP_VERSION=""
    FROM php:${PHP_VERSION:+${PHP_VERSION}-}fpm-alpine
    
    # One run/layer as needed/able per recommendation in docs
    # https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#run
    RUN apk update \
        # TAO requires zip support
        && apk add libzip-dev zip \
        && docker-php-ext-configure zip --with-libzip \
        && docker-php-ext-install zip \
        # TAO requires pdo_mysql support
        && docker-php-ext-install pdo_mysql \
        # TAO recommends opcache
        && docker-php-ext-install opcache \
        && docker-php-ext-configure opcache --enable-opcache \
        # Ensure a php.ini is present
        && mv $PHP_INI_DIR/php.ini-development $PHP_INI_DIR/php.ini;
    
    FROM composer/composer as Composed
    ARG TAO_CODE_TAG # <-- IMPORTANT
    RUN mkdir /build && cd /build
    WORKDIR /build
    ADD https://cdn.jsdelivr.net/gh/oat-sa/package-tao@${TAO_CODE_TAG}/composer.json /build/composer.json # <-- IMPORTANT
    RUN composer install --ignore-platform-reqs --no-scripts --no-suggest --no-dev
    
    # ...continues
    
    # continued...
    
    ARG PHP_VERSION
    FROM php:${PHP_VERSION:+${PHP_VERSION}-}fpm-alpine
    
    RUN apk update \
        # ...etc.
    
    # Gather composed packages from stage above
    COPY --from=Composed /build /var/www/html/
    
    # ...etc
    
    /apache/demo.apache.conf

    ServerName localhost
    
    LoadModule rewrite_module /usr/local/apache2/modules/mod_rewrite.so
    LoadModule deflate_module /usr/local/apache2/modules/mod_deflate.so
    LoadModule proxy_module /usr/local/apache2/modules/mod_proxy.so
    LoadModule proxy_fcgi_module /usr/local/apache2/modules/mod_proxy_fcgi.so
    
    <VirtualHost *:80>
        # Proxy .php requests to port 9000 of the php-fpm container
        ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://php:9000/var/www/html/$1
        DocumentRoot /var/www/html/
        <Directory /var/www/html/>
            DirectoryIndex index.php
            Options Indexes FollowSymLinks
            AllowOverride All
            Require all granted
        </Directory>
    
        # Send apache logs to stdout and stderr
        CustomLog /proc/self/fd/1 common
        ErrorLog /proc/self/fd/2
    </VirtualHost>
    
    /php/Dockerfile

    ARG APACHE_VERSION=""
    FROM httpd:${APACHE_VERSION:+${APACHE_VERSION}-}alpine
    
    # Copy apache vhost file to proxy php requests to php-fpm container
    COPY demo.apache.conf /usr/local/apache2/conf/demo.apache.conf
    RUN echo "Include /usr/local/apache2/conf/demo.apache.conf" \
        >> /usr/local/apache2/conf/httpd.conf
    
    ARG TAO_CODE_TAG
    FROM alpine/git:1.0.4
    RUN apk add git \
        && mkdir /build \
        && git clone https://github.com/oat-sa/package-tao /build \
        && cd /build \
        && git checkout tags/v3.2-rc02 # Should use val from .env!
    VOLUME ["/build"] # Last in file so as to not "disappear" during build
    
    ARG PHP_VERSION=""
    FROM php:${PHP_VERSION:+${PHP_VERSION}-}fpm-alpine
    
    # One run/layer as needed/able per recommendation in docs
    # https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#run
    RUN apk update \
        # TAO requires zip support
        && apk add libzip-dev zip \
        && docker-php-ext-configure zip --with-libzip \
        && docker-php-ext-install zip \
        # TAO requires pdo_mysql support
        && docker-php-ext-install pdo_mysql \
        # TAO recommends opcache
        && docker-php-ext-install opcache \
        && docker-php-ext-configure opcache --enable-opcache \
        # Ensure a php.ini is present
        && mv $PHP_INI_DIR/php.ini-development $PHP_INI_DIR/php.ini;
    
    FROM composer/composer as Composed
    ARG TAO_CODE_TAG # <-- IMPORTANT
    RUN mkdir /build && cd /build
    WORKDIR /build
    ADD https://cdn.jsdelivr.net/gh/oat-sa/package-tao@${TAO_CODE_TAG}/composer.json /build/composer.json # <-- IMPORTANT
    RUN composer install --ignore-platform-reqs --no-scripts --no-suggest --no-dev
    
    # ...continues
    
    # continued...
    
    ARG PHP_VERSION
    FROM php:${PHP_VERSION:+${PHP_VERSION}-}fpm-alpine
    
    RUN apk update \
        # ...etc.
    
    # Gather composed packages from stage above
    COPY --from=Composed /build /var/www/html/
    
    # ...etc
    

    PS:最终,诸如使用秘密服务器获取安全凭据等,以及使用带有
    .env
    文件的自动证书等,也将实现。

    我现在可以进入web安装页面。所以,对于任何感兴趣的人

    #1-源/克隆问题 我意识到我所需要的只是和文件,我可以在
    ADD
    中通过抓取,然后在php和apache
    /var/www/html
    文件夹中对新文件进行递归chown/chmod

    注意:这并不能真正解决通常从github获取源代码的问题,但足以满足我对这个特定代码库/项目的实际/即时需求

    #2-标签问题 我通过……解决了标签问题

    docker compose.yml

    version: "3.2"
    
    services:
      git:
        build:
          context: './git/'
          args:
            TAO_CODE_TAG: ${TAO_CODE_TAG:?err}
        volumes:
          - ./tao-src/:/build
        container_name: git
    
      composer:
        image: composer/composer:php7  #  Would be nice to use tag from .env for php version
        command: install
        depends_on:
          - git
        volumes:
          - ./tao-src/:/app
        container_name: composer
    
      php:
        build:
          context: './php/'
          args:
            PHP_VERSION: ${PHP_VERSION:?err}
        depends_on:
          - composer
        networks:
          - backend
        ports:
          - 9000:9000
        volumes:
          - ./tao-src/:/var/www/html/
        container_name: php
    
      apache:
        build:
          context: './apache/'
          args:
            APACHE_VERSION: ${APACHE_VERSION:?err}
        depends_on:
          - git
          - php
          - mysql
        networks:
          - frontend
          - backend
        ports:
          - 80:80
        volumes:
          - ./tao-src/:/var/www/html/
        container_name: apache
    
      mysql:
        image: mysql:${MYSQL_VERSION:-latest}
        networks:
          - backend
        ports:
          - 3306:3306
        environment:
          - MYSQL_ROOT_PASSWORD=${DB_ROOT_PWD:?err}
        container_name: mysql
    
    networks:
      frontend:
      backend:
    
    version: "3.2"
    
    services:
      php:
        build:
          context: './php/'
          args:
            PHP_VERSION: ${PHP_VERSION:?err}
            TAO_CODE_TAG: ${TAO_CODE_TAG:?err} # <-- IMPORTANT
    
    不幸的是,php和apache实例都重复了这一点(需要将代码烘焙到这两个实例中)。我仍在研究一种创建共享源代码资源的方法,该资源可以通过共享(很可能)访问和映射