【问题标题】:Wordpress image with mysql data带有 mysql 数据的 Wordpress 图像
【发布时间】:2018-06-09 11:53:14
【问题描述】:

是否有任何可用的图像包含 wordpress 和 mysql 数据? 当我提交并备份图像时,不包括 mysql 数据。我会更喜欢两者的单一图像。 我尝试使用这个 Dockerfile 创建这样的图像:

FROM tutum/lamp:latest
RUN rm -fr /app && git clone https://github.com/WordPress/WordPress.git /app
EXPOSE 80 
CMD ["/run.sh"]

我可以使用这样的命令启动全新安装...

docker run -p 88:80 shantanuo/wp

但容器不能“按原样”移动到另一台服务器。我需要使用 mysql-dump 命令进行数据备份,这是我试图避免的事情。有可能吗?


如果我不对容器进行 volumanize,那么我可以复制 wordpress 图像及其数据。

https://hub.docker.com/r/shantanuo/lamp/~/dockerfile/

但它在新服务器上不起作用。添加 wordpress 标签。

【问题讨论】:

  • 你能澄清一下这里的最终目标吗?你想解决什么问题?

标签: docker


【解决方案1】:

有没有包含 wordpress 和 mysql 数据的图片?

简短回答:不推荐。

一张图片通常处理一个服务(所以这里会涉及到两个图片:wordpress 和 MySQL)

并且持久性数据不会“在”图像中,而是在 volume / bind mount 中的主机上。

例如,tutumcloud/lamp image 确实声明了 volumes:

# Add volumes for MySQL 
VOLUME ["/etc/mysql", "/var/lib/mysql" ]

docker run 命令使用基本映像中指定位置存在的任何数据初始化新创建的卷。

制作您自己的图像这些行可能会按您的预期工作(即,提交一个容器带有它的数据)。
但是如果服务器在任何时候重启,或者你必须再次 docker run 你原来的容器,它将重新启动,没有数据。


典型的docker wordpress 图像将使用mysql one

version: '3.1'

services:

  wordpress:
    image: wordpress
    restart: always
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_PASSWORD: example

  mysql:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example

反过来,该 mysql 容器将使用本地主机安装卷来持久化数据库。

docker run --name some-mysql -v /my/own/datadir:/var/lib/mysql \
           -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

参见例如“Quickstart: Compose and WordPress”

因此,您不仅应该提交您的 Wordpress 图像,还应该提交您的 Mysql 图像,和您的卷。

但是,不支持提交卷:请参阅“Commit content of mounted volumes as well”以备份包含您的 WordPress 数据库的卷。

使用这三个备份,然后将它们迁移到您的其他服务器。


但是,这似乎过于复杂,在第二台服务器上新建一个 WordPress/MySQL docker 项目更容易启动。
然后,您需要,是的,您的数据库转储文件。
以及其他一些 Wordpress 文件夹(如主题)

见“Easy WordPress Migration with Docker”。
这将是尝试从一台服务器提交现有容器并将它们“移植”到另一台服务器上的推荐方法。

【讨论】:

  • 如果我在此页面上评论第 39 行...github.com/tutumcloud/lamp/blob/master/Dockerfile 并且只公开端口 80(而不是 3306),它会起作用吗?
  • @shantanuo 您需要对其进行测试,但是是的,这可能有效。然而,在容器中运行数据仍然存在风险。
  • 那行得通。 hub.docker.com/r/shantanuo/lamp/~/dockerfile这比将数据保存在主机上风险更大吗?
  • @shantanuo 如果服务器重新启动并且您必须再次 docker run,您的容器将重新启动,而没有以前的数据。如果您发现您的容器已停止,您可能会尝试重新启动它,但同样,数据存在是有问题的(有待测试)。在这方面,磁盘持久性(通过卷)更安全。
【解决方案2】:

如果你想将你的工作数据集导出到另一个服务器,docker 有commit 命令。此命令从正在运行的容器创建一个新映像。

$ docker commit c3f279d17e0a svendowideit/testimage:version3

Documentation.

【讨论】:

  • 请注意,使用官方 MySQL 镜像,数据目录是一个命名卷,因此位于联合文件系统之外。出于这个原因,docker commit 在官方 MySQL 容器上使用时不会抓取任何实际数据,而无需进行一些调整。您可以为 MySQL 滚动您自己的 Dockerfile,或者只需在启动时将数据目录更改为非卷位置。这适用于任何使用卷的容器。
猜你喜欢
  • 2014-03-01
  • 1970-01-01
  • 2013-11-20
  • 2012-09-21
  • 2017-01-06
  • 1970-01-01
  • 2013-02-26
  • 1970-01-01
  • 2012-01-17
相关资源
最近更新 更多