【问题标题】:Docker LAMP with default hub images or one custom single Stack带有默认集线器图像或一个自定义单个堆栈的 Docker LAMP
【发布时间】:2019-02-19 07:34:40
【问题描述】:

互联网上有一些教程,有些使用 docker-compose,因此结合了例如PHP、MariaDB 和 PHPMyAdmin,都来自 hub.docker.com 上的原始项目。此方法非常快速且易于配置。一个yml文件,整个lamp server基本按要求运行。

version: '3'
services:
    php-apache:
        image: php:7.3.2-apache-stretch
        ports:
            - 80:80
        volumes:
            - D:\test\src:/var/www/html
        links:
            - 'mariadb'

    mariadb:
        image: mariadb:10.1
        volumes:
            - mariadb:/var/lib/mysql
        environment:
            TZ: "Europe/Rome"
            MYSQL_ALLOW_EMPTY_PASSWORD: "no"
            MYSQL_ROOT_PASSWORD: "rootpwd"
            MYSQL_USER: 'testuser'
            MYSQL_PASSWORD: 'testpassword'
            MYSQL_DATABASE: 'testdb'

    phpmyadmin:
        image: phpmyadmin/phpmyadmin
        container_name: phpmyadmin
        environment:
            PMA_HOST: "mariadb"
        restart: always
        ports:
         - 8181:80
        volumes:
         - /sessions
        links:
         - 'mariadb'
volumes:
    mariadb:

Source (edited)

其他人创建一个 DOCKERFILE 并将所有 apt-get 命令放入此文件中,例如来自 fauria/docker-lamp 的这个。

FROM ubuntu:16.04
MAINTAINER Fer Uria <fauria@gmail.com>
LABEL Description="Cutting-edge LAMP stack, based on Ubuntu 16.04 LTS. Includes .htaccess support and popular PHP7 features, including composer and mail() function." \
    License="Apache License 2.0" \
    Usage="docker run -d -p [HOST WWW PORT NUMBER]:80 -p [HOST DB PORT NUMBER]:3306 -v [HOST WWW DOCUMENT ROOT]:/var/www/html -v [HOST DB DOCUMENT ROOT]:/var/lib/mysql fauria/lamp" \
    Version="1.0"

RUN apt-get update
RUN apt-get upgrade -y

COPY debconf.selections /tmp/
RUN debconf-set-selections /tmp/debconf.selections

RUN apt-get install -y zip unzip
RUN apt-get install -y \
    php7.0 \ ...

虽然第一个似乎要简单得多,但第二个有一些冗余(Debian 用于 PHP,ubuntu 用于 MariaDB,php-alpine 用于 PHPMyAdmin)。

那么 Docker 现在运行 3 个服务器吗?一个用于 PHP,一个用于数据库,一个用于 phpmyadmin?感觉像是在浪费资源,不是吗?

哪种方法是典型的约定?

【问题讨论】:

  • 拥有独立容器的优点(除了最初的原则)是您可以混合和匹配 PHP 和数据库的版本。您可以轻松安装 2 个版本的 PHP 并并行或交换运行它们。与数据库版本相同 - 为新版本创建一个新容器并针对旧版本进行测试。
  • 我发现的一个非常有用的 docker 容器是 Portainer,它还允许您通过 Web 界面管理它们。我通常不运行 phpmyadmin/redis/rabbitmq 容器,除非我需要它们。但可以通过网页轻松启动它们。

标签: php mysql docker docker-compose


【解决方案1】:

根据官方文档:“通常建议您通过每个容器使用一项服务来分隔关注区域”,这样更易​​于维护、扩展或更新,而不会影响任何其他服务。

在 docker 中,这些实例称为 services,因此 docker 组合将每个组件作为服务运行

如果您需要了解更多信息,还可以阅读有关Running multi-service in container 的更多信息

关于资源使用,它不会像您想象的那样浪费,因为这是将虚拟机与 docker 容器进行比较时的优势之一,因为它使用主机的相同内核并且不会像vms 运行一个完整的独立操作系统

【讨论】:

  • 我想这确实是一种更好的方式,因为人们可以依赖官方图像。此外,我想它不需要那么多资源,因为一切都很轻量级。也感谢您解释资源部分:)
  • @ptmr.io 如果此答案对您有用,请不要忘记将问题标记为已回答。或者如果您需要解释其他内容,请告诉我
  • @Mosetafa Hussein 当然,我会等待 1 或 2 天以获取其他可能的意见,但您的意见似乎很受欢迎 :)
猜你喜欢
  • 1970-01-01
  • 2015-12-22
  • 2016-08-26
  • 1970-01-01
  • 1970-01-01
  • 2015-08-25
  • 2017-05-24
  • 2023-04-07
  • 1970-01-01
相关资源
最近更新 更多