运行LAMP的Dockerfile(Ubuntu)

时间:2017-06-12 10:36:11

标签: docker lamp

我尝试使用以下

创建Docker(LAMP)图像

Dockerfile

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

start-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,但我无法通过MYSQL连接到127.0.0.1:5000

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

2 个答案:

答案 0 :(得分:1)

您需要将脚本的执行更改为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

答案 1 :(得分:0)

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

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

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