对docker compose构建的图像的引用与项目/目录名称相关联

时间:2017-09-13 10:13:04

标签: docker docker-compose dockerfile

我正在尝试使用docker compose建立一个drupal环境,它在某种程度上有效。

然而,我已将我的图像分割成基础drupal图像和顶部的自定义图层,包括我的配置,模块等。基本图像是从官方仓库中提取的,并使用我需要的一些工具进行增强(例如编辑器和php扩展)。

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

FROM reponame_drupal

COPY sites /var/www/html/sites/
RUN chown -R www-data:www-data /var/www/html/sites/default/files

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

这是有效的,因为所有内容都放在一个名为“repo-name”的目录中,但这看起来非常脆弱。如果我因某种原因更改了我的项目名称,我的 dockerfiles 就会中断。

我非常想写FROM drupal或我控制的自定义名称,而不是基于目录名称的名称。

我可以将网络名称更改为我可以在代码中控制的内容(在docker-compose.yml中)吗?这里的最佳做法是什么?

drupal base的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/*

docker-compose.yml看起来像这样:

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]

1 个答案:

答案 0 :(得分:1)

您可以为要在docker-compose.yml中构建的服务指定图像选项:

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

虽然在docker-compose.yml中使用它只是为真实服务构建基本图像听起来不对。