【问题标题】:Setup a Docker container with only the docker-compose up command仅使用 docker-compose up 命令设置 Docker 容器
【发布时间】:2019-05-13 02:00:04
【问题描述】:

我有一个评估,我必须使用 CakePHP 创建一个 Docker 容器。我已经有一个使用 CakePHP 的工作 Docker 容器,我为我的容器运行以下命令:

docker-compose build

docker-compose run cakephp composer install --no-interaction

docker-compose run cakephp bin/cake migrations migrate

docker-compose run cakephp bin/cake migrations seed

docker-compose up

我们的目标是将过程减少到只运行单个命令 docker-compose up 以便能够开始测试容器。我对 Docker 和 CakePHP 都很陌生,所以我不知道该怎么做。

非常感谢任何帮助!

Dockerfile

#start with our base image (the foundation) - version 7.1.29
FROM php:7.1.29-apache

#install all the system dependencies and enable PHP modules 
RUN apt-get update && apt-get install -y \  
      gcc \
      make \
      autoconf \
      libc-dev \
      pkg-config \
      libicu-dev \
      libpq-dev \
      libmcrypt-dev \
      mysql-client \
      git \
      zip \
      unzip \
    && rm -r /var/lib/apt/lists/* \
    && docker-php-ext-configure pdo_mysql --with-pdo-mysql=mysqlnd \
    && docker-php-ext-install \
      intl \
      mbstring \
      mcrypt \
      pcntl \
      pdo_mysql \
      pdo_pgsql \
      pgsql \
      opcache

RUN set -eux; apt-get update; apt-get install -y libzip-dev zlib1g-dev; docker-php-ext-install zip

#install composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin/ --filename=composer

ENV COMPOSER_ALLOW_SUPERUSER=1

#set our application folder as an environment variable
ENV APP_HOME /var/www/html

#change uid and gid of apache to docker user uid/gid
RUN usermod -u 1000 www-data && groupmod -g 1000 www-data

#change the web_root to laravel /var/www/html/public folder
RUN sed -i -e "s/html/html\/webroot/g" /etc/apache2/sites-enabled/000-default.conf

# enable apache module rewrite
RUN a2enmod rewrite && \
        echo "ServerName localhost" >> /etc/apache2/apache2.conf

#copy source files and run composer
COPY . $APP_HOME

# install all PHP dependencies
RUN composer install --no-interaction

#change ownership of our applications
RUN chown -R www-data:www-data $APP_HOME

docker-compose.yml

version: '2'
services:
  cakephp:
    build: .
    depends_on:
      - mysql
    links:
      - "mysql"
    ports:
      - "4000:80"  
    volumes:
      - .:/var/www/html/
    environment:
      - SECURITY_SALT= *some salt here*  
      - MYSQL_URL=mysql
      - MYSQL_USERNAME=root
      - MYSQL_PASSWORD=root
  mysql:
    image: mysql:5.6
    volumes:
      - mysql-data:/var/lib/mysql
    environment:      
      - MYSQL_DATABASE=cakephp
      - MYSQL_ROOT_PASSWORD=root
volumes:
  mysql-data:

【问题讨论】:

    标签: php docker docker-compose dockerfile cakephp-3.0


    【解决方案1】:

    选项 1

    在处理 Docker 和 Docker Compose 时,我通常会使用 Makefile 来减少我的命令。

    所以,在你的情况下,你可以这样写:

    生成文件

    SUDO := $(shell groups | grep -q docker || echo sudo)
    
    .PHONY: start
    
    start:
        $(SUDO) docker-compose build \
        && $(SUDO) docker-compose run cakephp composer install --no-interaction \
        && $(SUDO) docker-compose run cakephp bin/cake migrations migrate \
        && $(SUDO) docker-compose run cakephp bin/cake migrations seed \
        && $(SUDO) docker-compose up
    

    您所要做的就是将此文件放入您的项目文件夹并运行make start

    $(SUDO) 部分确保您可以舒适地运行此程序,即使用户不在docker 组中。)

    选项 2

    要真正运行docker-compose up(可能带有--build 标志),您必须在Docker 映像中编写一个COPY 的小脚本(您已经在使用COPY . $APP_HOME 执行此操作——前提是你把这个脚本放在你的 Docker 构建上下文指向的位置),然后将其用作ENTRYPOINT

    这样的东西应该适合你。

    入口点.sh:

    #!/bin/sh
    set -e
    
    cakephp composer install --no-interaction
    cakephp bin/cake migrations migrate
    cakephp bin/cake migrations seed
    
    exec "$@"
    

    在您的 Dockerfile 中,您必须输入 ENTRYPOINT ["/bin/sh", "entrypoint.sh"]

    【讨论】:

    • 您的回答很有帮助,感谢您抽出宝贵时间来回答。评估本身要求完成的容器只需要docker-compose up 命令就可以进行测试。我正在网上阅读,可能在 Dockerfile 中编写的 shell 脚本可以工作,但我还没有时间尝试。
    • @Logan,我已经更新了我的答案,请检查您是否可以从那里开始。 :)
    • 感谢您的帮助!非常感谢:)
    猜你喜欢
    • 2019-04-22
    • 2019-07-28
    • 2018-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多