1

我的计算机上有一堆旧网站(wordpress/mysql/php、ruby 1.x/sqlite 等),我希望确保将来可以轻松访问它们,而不必破坏我的环境。

Docker 似乎是完成这项任务的理想人选,但我已经多次尝试绕过它,并意识到是时候寻求专业帮助了(这让我来到了这里)。

我浪费了这么多时间来搞砸这件事,并且对深度感到有些不知所措。起初(在 wp/mysql 问题的情况下),我试图创建两个不同的图像(一个 wordpress/php 和一个 mysql 一个)并将它们链接在一起,这很符合我的程序员心态正确的方式™。

但是我的 UX 心态已经胜出,我正在放弃 Right Way™,转而以最简单的方式让这个东西工作,这样未来的我(一旦我完成这项任务就会忘记所有这些 docker 知识)可能能够再次弄清楚。

所以这就是我想要的:一个 docker 设置,我可以把它连同一个导出的 mysql 数据库和一个 wordpress 站点放在一个文件夹中,所以当我启动那个 badboy 时——<em>boom——我正在浏览一些旧站点2005 年很有意义,现在没有意义。

知道我在说什么吗?我可以完成这项工作的最简单、面向未来的方法是什么?如果我想编辑它们,是否可以将数据/文件保留在容器之外?我正在使用 Docker For Mac。

4

2 回答 2

1

听起来您想要一些真正通用的东西,它适用于您拥有的所有网站。这可能很棘手,因为 Docker 本质上不是通用的。您通常没有包含所有工具(PHP、Ruby 等)的 docker 映像来运行所有内容。您通常只将您需要的内容构建到映像中。

话虽如此,仍然有可能做一些你所要求的事情,我想我可以让你指出正确的方向。官方的Wordpress Docker 映像应该能够运行您的 Wordpress 站点。实际上,您使用单独的 MySQL 映像走在正确的轨道上,这很容易通过docker-compose.

你的 docker-compose.yml 文件看起来像这样:

version: '3'

services:
    wordpress:
        image: wordpress:4-php5.6-apache
        ports:
            - "8080:80"
        volumes:
            - ./:/var/www/html
        environment:
            WORDPRESS_DB_HOST: mysql
            WORDPRESS_DB_USER: root
            WORDPRESS_DB_PASSWORD: password
            WORDPRESS_DB_NAME: wordpress

    mysql:
        image: mariadb:10.1
        ports:
            - "3306:3306"
        environment:
            MYSQL_ROOT_PASSWORD: password
            MYSQL_DATABASE: wordpress

简要总结一下它的作用:

  • 创建 2 个 Docker 容器,一个用于 Wordpress,一个用于 MySQL。
  • 将来自 127.0.0.1:8080 的请求转发到端口 80 上的 Wordpress 容器。
  • 挂载.//var/www/htmlwordpress 容器中。这意味着它将为您当前目录中的 Wordpress 提供服务。
  • 配置环境变量,使其知道如何连接到数据库。
  • 准备一个 MySQL Docker 容器。
  • 转发127.0.0.1:3306到容器上的 3306。所以你可以做到mysql -u root -ppassword -h 127.0.0.1

现在,如果您在要服务的 Wordpress 目录中创建一个docker-compose.yml类似于上述文件的文件,您可以简单地docker-compose up在该目录中运行,您将在容器中运行 Wordpress。如果您需要恢复数据库转储,您可以cat dump.sql | mysql -u root -ppassword -h 127.0.0.1 WORDPRESS. 您可以访问该网站localhost:8080。通过将这样的docker-compose.yml文件放入您的项目中,为它们创建一个容器会非常快。

现在,因为像这样的 StackOverflow 答案的范围非常有限,你可能会在这里和那里遇到一些我在这个答案中没有涉及的问题。但是如果你愿意花一点时间来学习更多关于 Docker 的知识(它真的没有那么复杂),这对你来说可能是一个很好的解决方案。

于 2017-01-28T02:50:56.507 回答
0

Docker for Mac 和许多 PHP 文件(wordpress、Symfony)作为已安装的资源彼此不喜欢……如果你不想用 docker-sync 和其他一些技巧来做一些花哨的技巧(因为数据库可能很慢以及)。

我的建议 - 如果您想要简单的“即发即弃”,也许可以使用 Vagrant 设置一台虚拟机来服务所有站点?为此,您可以使用puphpet.com轻松单击您的机器。甚至可以标记要导入的 SQL 文件……然后查看 config.yml 文件,您将知道如何在功能中添加其他主机,然后您只需启动 vagrant 配置即可对其进行设置。

如果您需要一些旧的 PHP 或每个站点的不同环境/设置,则会出现问题。不幸的是,Docker for Mac 目前并不是万无一失的即发即弃的解决方案。

于 2017-01-27T22:34:50.067 回答