【发布时间】: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:
其他人创建一个 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