用于存档目的的最简单 mac docker 设置是什么?

What's the simplest mac docker setup for archival purposes?

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

Docker 似乎是这项任务的完美人选,但我已经多次尝试解决这个问题,并意识到是时候寻求专业帮助了(这让我来到这里)。

我浪费了很多时间来弄乱这个东西,并且对深度有点不知所措。起初(在 wp/mysql 问题的情况下),我试图创建两个不同的图像(一个 wordpress/php 一个,一个 mysql 一个)并将它们 link 在一起,这符合我的 Doing It The Right Way™ 程序员心态。

但我的 UX 心态已经胜出,我放弃了正确的方式™,转而以最简单的方式让这个东西工作,这样未来的我(谁会忘记所有这些 docker 我完成这个任务后的知识)也许能够再次弄清楚。

所以这就是我想要的: 一个 docker 设置,我可以将它与导出的 mysql 数据库和一个 wordpress 站点一起放在一个文件夹中,所以当我启动那个 badboy 时——boom——我正在浏览一些旧网站,这些网站在 2005 年很有意义,但现在已经毫无意义了。

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

Docker 用于 Mac 和很多 PHP 文件(wordpress、Symfony)作为挂载资源 don't like each other ... if You don't want to make some fancy tricks with docker-sync plus some other tricks (since databases may be slow as well).

我的建议 - 如果您想要简单 fire-and-forget 是可以使用 Vagrant 设置一个虚拟机来为所有站点提供服务?为此,您可以使用 puphpet.com 轻松单击您的机器。甚至可以将 SQL 文件标记为导入...然后查看 config.yml 文件 您将知道如何在功能中添加其他主机,然后您只需启动 vagrant provision 即可设置它.

如果每个站点需要一些旧的 PHP 或不同的 environments/setups,就会出现问题。不幸的是 Docker Mac 目前还不是万无一失的 fire-and-forget 解决方案。

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

话虽这么说,但仍有可能完成您所要求的事情,我想我可以为您指明正确的方向。 official 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 容器。
  • 在 wordpress 容器中安装 .//var/www/html。这意味着它将为您当前目录中的 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 即可将在容器中 运行ning Wordpress。如果需要恢复数据库转储,可以 cat dump.sql | mysql -u root -ppassword -h 127.0.0.1 WORDPRESS。您可以在 localhost:8080 访问该站点。通过在您的项目中放置一个这样的 docker-compose.yml 文件,可以非常快速地为它们启动一个容器。

现在,由于像这样的 Whosebug 答案的范围非常有限,您可能会 运行 遇到一些我没有在此答案中涵盖的问题。但是,如果您愿意花一点时间更多地了解 Docker(其实并没有那么复杂),这对您来说可能是一个很好的解决方案。