对docker compose生成的映像的引用与项目/目录名绑定

对docker compose生成的映像的引用与项目/目录名绑定,docker,docker-compose,dockerfile,Docker,Docker Compose,Dockerfile,我正试图用docker compose建立一个drupal环境,它在某种程度上起作用 然而,我已经将我的映像分成了一个基本drupal映像和一个自定义层,上面有我的配置、模块等等。基本映像是从官方repo中提取的,并使用我需要的两个工具(例如composer和php扩展)进行了增强 自定义层的dockerfile如下所示(前几行): (我知道我可能应该使用入口点脚本更改权限) 这是可行的,因为所有东西都放在一个名为“repo name”的目录中,然而这看起来非常脆弱。如果我因为某种原因更改了项目

我正试图用docker compose建立一个drupal环境,它在某种程度上起作用

然而,我已经将我的映像分成了一个基本drupal映像和一个自定义层,上面有我的配置、模块等等。基本映像是从官方repo中提取的,并使用我需要的两个工具(例如composer和php扩展)进行了增强

自定义层的dockerfile如下所示(前几行):

(我知道我可能应该使用入口点脚本更改权限)

这是可行的,因为所有东西都放在一个名为“repo name”的目录中,然而这看起来非常脆弱。如果我因为某种原因更改了项目的名称,我的dockerfiles将崩溃

我非常希望从drupal编写
,或者编写一个我控制的自定义名称,而不是基于目录名的名称

我是否可以将网络名称更改为可以在代码中控制的名称(在docker compose.yml中)?这里的最佳实践是什么


drupal基础的dockerfile如下所示:

FROM drupal:7.56-apache

# Install packages
RUN rm /bin/sh && ln -s /bin/bash /bin/sh && \
    apt-get update && apt-get install --no-install-recommends -y \
    curl \
    wget \
    vim \
    git \
    unzip \
    libmcrypt-dev

# Install PHP extensions
RUN docker-php-ext-install \
    mcrypt

# Install Composer
RUN curl -sS https://getcomposer.org/installer | php && \
    mv composer.phar /usr/local/bin/composer && \
    ln -s /root/.composer/vendor/bin/drush /usr/local/bin/drush

# Install Drush
RUN composer global require drush/drush:8 && \
    composer global update

# Clean repository
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
version: '3.3'

services:

  mysql:
    image: mysql/mysql-server:5.7
    [additional settings]

  drupal:
    build: ./docker/drupal

  customlayer:
    build: ./docker/customlayer
    ports:
      - "8090:80"
    depends_on:
      - mysql
    restart: always

  phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    [additional settings]
docker-compose.yml看起来像这样:

FROM drupal:7.56-apache

# Install packages
RUN rm /bin/sh && ln -s /bin/bash /bin/sh && \
    apt-get update && apt-get install --no-install-recommends -y \
    curl \
    wget \
    vim \
    git \
    unzip \
    libmcrypt-dev

# Install PHP extensions
RUN docker-php-ext-install \
    mcrypt

# Install Composer
RUN curl -sS https://getcomposer.org/installer | php && \
    mv composer.phar /usr/local/bin/composer && \
    ln -s /root/.composer/vendor/bin/drush /usr/local/bin/drush

# Install Drush
RUN composer global require drush/drush:8 && \
    composer global update

# Clean repository
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
version: '3.3'

services:

  mysql:
    image: mysql/mysql-server:5.7
    [additional settings]

  drupal:
    build: ./docker/drupal

  customlayer:
    build: ./docker/customlayer
    ports:
      - "8090:80"
    depends_on:
      - mysql
    restart: always

  phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    [additional settings]

您可以为要在docker-compose.yml中生成的服务指定映像选项:

drupal:
  build: ./docker/drupal
  image: reponame_drupal # or whatever you like

虽然在docker-compose.yml中使用这个功能只是为了为真正的服务构建基本映像听起来是错误的

这当然有效。你有什么不同的建议吗。使用命令生成图像,并将其从合成文件中忽略?我喜欢将所有内容都放在脚本中的便利性,但我对docker还不熟悉,所以我不知道其中的陷阱。是的,可以将基本映像构建与docker-compose.yml分开,或者将基本映像与实际服务映像结合起来。Docker现在也支持,但不确定这是否适合您的用例。