运行LAMP的Dockerfile(Ubuntu)
我正在尝试使用以下命令创build一个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
我用它来构build它:
docker build -t resting/ubuntu .
然后运行它:
docker run -it -p 8000:80 -p 5000:3306 -v $(pwd)/html:/var/www/html resting/ubuntu bash
问题是, MYSQL
和Apache2
服务没有启动。
如果我在容器中手动运行/root/start-script.sh
,则端口80可以很好地映射到端口8000,但是我无法使用127.0.0.1:5000
连接到MYSQL
。
如何确保服务正在运行,当我旋转图像的容器,并映射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
尽pipe这样做有效,但这不是pipe理容器的正确方法。 你应该有一个容器为你的Apache2
和另一个为MySQL
。
看看这篇使用Docker-Compose构buildLAMP堆栈的文章: https : //www.kinamo.be/en/support/faq/setting-up-a-development-environment-with-docker-compose
你需要多个图像 – 每个服务或应用程序一个。
Docker容器不是一个运行整个堆栈的虚拟机。 它是一个虚拟应用程序,运行一个主要的过程。
如果你需要PHP,Apache和MySQL,那么你将需要3个docker集装箱。 一个为你的PHP应用程序,一个为Apache和一个为MySQL。