带有 LAMP 运行 (Ubuntu) 的 Dockerfile

Dockerfile with LAMP running (Ubuntu)

我正在尝试使用以下

创建 Docker (LAMP) 图像

Docker文件:

FROM ubuntu:latest
RUN  apt-get update \
  && DEBIAN_FRONTEND=noninteractive apt-get install -y \
    apache2 \
    mysql-server \
    php7.0 \
    php7.0-bcmath \
    php7.0-mcrypt
COPY start-script.sh /root/
RUN chmod +x /root/start-script.sh && /root/start-script.sh

开始-script.sh:

#!/bin/bash
service mysql start
a2enmod rewrite
service apache2 start

我构建它:

docker build -t resting/ubuntu .

然后 运行 它与:

docker run -it -p 8000:80 -p 5000:3306 -v $(pwd)/html:/var/www/html resting/ubuntu bash

问题是,MYSQLApache2 服务没有启动。
如果我在容器中手动 运行 /root/start-script.sh,端口 80 可以很好地映射到端口 8000,但我无法使用 127.0.0.1:5000.

连接到 MYSQL

当我使用图像启动容器并将 MYSQL 映射到我的主机时,如何确保服务 运行ning?

您需要多张图片 - 每个服务或应用一张。

Docker 容器不是您在其中 运行 整个堆栈的虚拟机。它是一个虚拟应用程序,运行宁一个主要进程。

如果您需要 php、apache 和 mysql,那么您将需要 3 个 docker 容器。一个用于您的 php 应用程序,一个用于 apache,一个用于 mysql.

您需要将脚本的执行更改为 CMD 指令。

FROM ubuntu:latest
RUN  apt-get update \
  && DEBIAN_FRONTEND=noninteractive apt-get install -y \
    apache2 \
    mysql-server \
    php7.0 \
    php7.0-bcmath \
    php7.0-mcrypt
COPY start-script.sh /root/
RUN chmod +x /root/start-script.sh 
CMD /root/start-script.sh

尽管这可行,但这不是管理容器的正确方法。您应该有一个容器用于 Apache2,另一个容器用于 MySQL

查看这篇使用 Docker-Compose 构建 LAMP 堆栈的文章:https://www.kinamo.be/en/support/faq/setting-up-a-development-environment-with-docker-compose