代码之家  ›  专栏  ›  技术社区  ›  Alana Storm

Docker:创建一个完全安装的PHP应用程序

  •  0
  • Alana Storm  · 技术社区  · 5 年前

    docker-compose 要为完全安装的PHP应用程序创建一个一步到位的设置?因为这是一个相当模糊的问题。我将以WordPress为例。

    如果我看看 the official wordpress docker repositories ,我知道已经有一个超级有用的 yml docker composer文件

    version: '3.1'
    
    services:
    
      wordpress:
        image: wordpress
        restart: always
        ports:
          - 8080:80
        environment:
          WORDPRESS_DB_HOST: db
          WORDPRESS_DB_USER: exampleuser
          WORDPRESS_DB_PASSWORD: examplepass
          WORDPRESS_DB_NAME: exampledb
    
      db:
        image: mysql:5.7
        restart: always
        environment:
          MYSQL_DATABASE: exampledb
          MYSQL_USER: exampleuser
          MYSQL_PASSWORD: examplepass
          MYSQL_RANDOM_ROOT_PASSWORD: '1'
    

    这是伟大的,并给我一个运行的前端应用服务器和WordPress已经在那里。它也有一个数据库服务器。它把一切都安排好互相交谈。太好了。

    我不明白的是 完全安装 WordPress。像许多PHP应用程序一样,为了完全安装,需要设置一些附加的配置字段, 还有一些附加的数据库字段。

    这意味着我不能完全安装应用程序,直到 wordpress db 集装箱已装满。我想在我有 CMD ENTRYPOINT 等待数据库连接建立,但基本WordPress Dockerfile已经使用 命令 所以这不是一个选择。(是吗?)

    0 回复  |  直到 5 年前
        1
  •  2
  •   Mostafa Hussein    5 年前

    如果您在运行后手动或通过脚本执行额外的步骤 docker-compose up 对于你的问题中发布的docker-compose,你可以用你自己的图片来修改原来的wordpress图片,这样就可以满足你的业务需求了,你所要做的就是开始写一个新的 Dockerfile

    FROM wordpress:5.1.0-php7.1-apache
    COPY custom_docker-entrypoint.sh /usr/local/bin/
    
    ENTRYPOINT ["custom_docker-entrypoint.sh"]
    CMD ["apache2-foreground"]
    

    这个 custom_docker-entrypoint.sh

    生成的图像可以用在你的docker-compose文件中,而不是官方的

        2
  •  1
  •   Becquerel    5 年前

    你可能要做的是创造你自己的 Dockerfile 基于Wordpress图片,然后给他们你自己的东西运行。

    码头工人-合成.yml

    version: '3.1'
    
    services:
    
      wordpress:
        build:
          context: ./docker/wordpress
        restart: always
        ports:
          - 8080:80
        depends_on:
          - "db"
        environment:
          WORDPRESS_DB_HOST: db
          WORDPRESS_DB_USER: exampleuser
          WORDPRESS_DB_PASSWORD: examplepass
          WORDPRESS_DB_NAME: exampledb
    
      db:
        image: mysql:5.7
        restart: always
        environment:
          MYSQL_DATABASE: exampledb
          MYSQL_USER: exampleuser
          MYSQL_PASSWORD: examplepass
          MYSQL_RANDOM_ROOT_PASSWORD: '1'
    

    ./docker/wordpress/Dockerfile文件

    FROM wordpress
    RUN your-own-commands
    

    我只是简单地放在一起,所以它不是真正的测试,但它应该给你一个大致的想法和方向

        3
  •  1
  •   Pranav G.    5 年前

    如果有一些命令要在容器启动后运行,那么有一种方法。我不知道这是否是docker中的标准方法,但它会起作用的。

    docker-entrypoint.sh .

    所以你可以做的是把你的自定义命令放在这个脚本中,这个脚本将在wordpress容器启动时执行。

    您可以按如下方式进行操作:

    • 启动容器并复制现有的

    • 创建新的 码头工人-入口点.sh 脚本在适当的位置添加chmod命令。

    • 在Dockerfile中添加一行,将此新入口点脚本复制到
      /usr/local/bin/docker-entrypoint.sh

    注:

    不要将自定义命令放在脚本的末尾 码头工人-入口点.sh exec "$@" .

        4
  •  1
  •   Wiktor Karpinski Wiktor Karpinski    5 年前

    据我所知,MySQL镜像有自己的启动脚本,在容器准备好之后,它仍然可以运行。这个启动脚本可以用来将数据导入数据库-MySQL连接仍然不会被接受,但是docket会认为你的数据库已经准备好了。

    这对您意味着,如果出于任何原因db init脚本运行得更长,它将停止php安装命令的工作。

    您可能需要实现一个轮询线程,该线程将等待数据库启动,然后在php上运行安装脚本。

    我在这篇文章中发现了一个类似的问题。

    https://cweiske.de/tagebuch/docker-mysql-available.htm

    编辑:

    https://docs.docker.com/compose/compose-file/#healthcheck