具有默认集线器映像或一个自定义单个堆栈的Docker LAMP

时间:2019-02-19 07:34:40

标签: php mysql docker docker-compose

互联网上有一些教程,有些使用 docker-compose ,因此可以结合使用PHP,MariaDB和PHPMyAdmin,全部来自hub.docker.com上的原始项目。此方法非常快速且易于配置。有了一个yml文件,整个灯泡服务器基本上可以按要求运行。

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 \ ...

虽然第一个看起来简单得多,但是第二个有一些冗余(对于PHP,是Debian,对于MariaDB,是ubuntu,对于PHPMyAdmin,是php-alpine)。

那么Doc​​ker现在可以运行3台服务器吗?一种用于PHP,一种用于数据库,一种用于phpmyadmin?感觉像是在浪费资源,不是吗?

哪种方法是典型的约定?

1 个答案:

答案 0 :(得分:1)

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

  

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

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

关于资源使用,它不会像您想的那样浪费太多,因为当您将虚拟机与Docker容器进行比较时,这是优点之一,因为它使用主机的相同内核,并且不会像虚拟机在运行整个单独的操作系统时会这样做