如何从Dockerfile运行Mysql和Apache?
我正试图为我们公司的一个项目创建一个Docker映像,我不想在创建容器后手动运行mysql和apache。下面是我的Dockerfile目前的样子:如何从Dockerfile运行Mysql和Apache?,docker,cmd,dockerfile,foreground,Docker,Cmd,Dockerfile,Foreground,我正试图为我们公司的一个项目创建一个Docker映像,我不想在创建容器后手动运行mysql和apache。下面是我的Dockerfile目前的样子: FROM php:7.4-apache RUN apt-get update \ && apt-get install -y default-mysql-server libzip-dev nano\ && docker-php-ext-install zip mysqli pdo pdo_mys
FROM php:7.4-apache
RUN apt-get update \
&& apt-get install -y default-mysql-server libzip-dev nano\
&& docker-php-ext-install zip mysqli pdo pdo_mysql \
&& docker-php-ext-enable mysqli
RUN /etc/init.d/mysql start \
&& sleep 5 \
&& mysql -u root -e "CREATE DATABASE eccube" \
&& mysqladmin -u root password 'secret'
COPY ./src_files /var/www/html
问题是,当我启动容器时,mysql进程没有运行,所以我必须进入容器并运行/etc/init.d/mysql start
。或者,我尝试在Dockerfile中使用CMD调用启动mysql进程:
CMD /usr/sbin/mysqld -u mysql
但这意味着现在是Apache服务器无法启动,我必须手动运行它
我睡得太少,喝了太多的咖啡,所以Docker文档在我看来就像是中国的。有人能解释一下如何从Dockerfile正确运行多个后台进程吗
非常感谢 请记住,
RUN
命令是在构建容器映像时执行的,而CMD
命令是在容器启动时运行的,并且您只能有一个命令。这就是为什么您只看到MySQL或Apache正在运行
你调查过了吗?这将允许您在一个容器中运行数据库,在另一个容器中运行Apache服务器,并使用docker compose up
轻松启动这两个容器
如果你真的想把所有东西都放在一个容器里,你仍然可以这样做;您可能会考虑单个BASH脚本来启动这两个脚本。您可以将Bash脚本添加到Docker构建过程中,然后设置CMD
来运行该脚本,而不是只启动MySQL或Apache。Docker文档提供了一些示例,说明如何使用多个服务设置单个容器
我个人认为,使用Docker Compose可以最好地完成您的工作,这样您就可以分离您的关注点,但我不知道您的应用程序的详细信息。谢谢!是的,最后我要做的是在Dockerfile中只运行几个命令,然后将所有不必要的东西放在Bash脚本中。我不想使用composer,因为我不想让人们运行超过必要数量的容器,因为这样,对于同一个项目,最终会有2到3个容器,这使得有时浏览容器列表试图找到所需的容器很麻烦。