如何在 Ubuntu 14.04 上使用 Docker Compose 安装 Wordpress 和 PhpMyAdmin

介绍

Docker Compose使处理Docker容器的管制过程(如启动、关闭和设置集装箱内部链接和卷)非常容易。

本文提供了使用Docker Compose来安装应用程序的真实世界的例子,在这种情况下,WordPress使用PHPMyAdmin作为一个额外。WordPress通常运行在LAMP堆栈上,这意味着Linux,Apache,MySQL/MariaDB和PHP。

前提条件

为了遵循这篇文章,您将需要以下内容:

  • Ubuntu 14.04 Droplet
  • 具有 sudo 特权的非根用户(Initial Server Setup with Ubuntu 14.04解释了如何设置此设置)
  • Docker 和 Docker Compose 从 [如何在 Ubuntu 14.04 上安装和使用 Docker Compose 中的说明中安装(https://andsky.com/tech/tutorials/how-to-install-and-use-docker-compose-on-ubuntu-14-04)

第1步:安装WordPress

我們將使用官方的 WordPressMariaDBDocker圖像. 如果你有興趣,有大量的更多信息,關於這些圖像和他們的配置選項在他們的GitHub和Docker Hub頁面。

让我们开始创建一个文件夹,我们的数据将生活在那里,并创建一个最小的docker-compose.yml文件来运行我们的WordPress容器:

1mkdir ~/wordpress && cd $_

然后用您最喜欢的文本编辑器创建一个 `~/wordpress/docker-compose.yml (如果您没有偏好,纳米很容易):

1nano ~/wordpress/docker-compose.yml

然后在下列情况下吃:

1[label ~/wordpress/docker-compose.yml]
2wordpress:
3  image: wordpress

这只是告诉Docker Compose启动一个名为WordPress的新容器,并从Docker Hub下载WordPress图像。

我们可以把图像举起来这样:

1docker-compose up

您将看到Docker下载并从Docker Hub中提取WordPress图像,一段时间后您将收到一些类似下面的错误消息:

1[secondary_label Output]
2wordpress_1 | error: missing WORDPRESS_DB_HOST and MYSQL_PORT_3306_TCP environment variables
3wordpress_1 |   Did you forget to --link some_mysql_container:mysql or set an external db
4wordpress_1 |   with -e WORDPRESS_DB_HOST=hostname:port?
5dockercompose_wordpress_1 exited with code 1

这是WordPress抱怨它找不到一个数据库. 让我们在混合中添加一个MariaDB图像,并链接它来修复它。

第2步:安装MariaDB

要将 MariaDB 图像添加到组中,请使用文本编辑器重新打开 docker-compose.yml:

1nano ~/wordpress/docker-compose.yml

更改 `dxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdx

1[label docker-compose.yml]
2wordpress:
3  image: wordpress
4  links:
5    - wordpress_db:mysql
6wordpress_db:
7  image: mariadb

我们在这里做的是定义一个名为wordpress_db的新容器,并告诉它从Docker Hub中使用mariadb图像,我们还告诉我们的wordpress_db容器将我们的wordpress_db容器链接到wordpress容器,并将其称为mysql(在wordpress容器内,主机名称mysql将转发到我们的wordpress_db容器)。

如果你再次运行docker-compose up,你会看到它下载了MariaDB图像,你还会看到我们还没有到达那里:

 1[secondary_label Output]
 2wordpress_db_1 | error: database is uninitialized and MYSQL_ROOT_PASSWORD not set
 3wordpress_db_1 |   Did you forget to add -e MYSQL_ROOT_PASSWORD=... ?
 4wordpress_1    | error: missing required WORDPRESS_DB_PASSWORD environment variable
 5wordpress_1    |   Did you forget to -e WORDPRESS_DB_PASSWORD=... ?
 6wordpress_1    | 
 7wordpress_1    |   (Also of interest might be WORDPRESS_DB_USER and WORDPRESS_DB_NAME.)
 8wordpress_wordpress_db_1 exited with code 1
 9wordpress_wordpress_1 exited with code 1
10Gracefully stopping... (press Ctrl+C again to force)

WordPress仍在抱怨无法找到数据库,现在我们有来自MariaDB的新投诉说没有设置根密码。

显然,仅仅连接两个容器是不够的,让我们继续设置MYSQL_ROOT_PASSWORD变量,以便我们实际上可以开火。

再次编辑 Docker Compose 文件:

1nano ~/wordpress/docker-compose.yml

将这两个行添加到wordpress_db部分的 end 中,但 请确保将examplepass更改为更安全的密码!

1[label docker-compose.yml]
2wordpress_db:
3...
4  environment:
5    MYSQL_ROOT_PASSWORD: examplepass
6...

这将设置一个环境变量在wordpress_db容器内,名为MYSQL_ROOT_PASSWORD与您想要的密码。MariaDB Docker 图像配置为在启动时检查此环境变量,并将负责设置 DB 使用根帐户,该密码定义为MYSQL_ROOT_PASSWORD

當我們正在進行時,讓我們也設定一個前端,以便我們可以連接到我們的WordPress安裝,一旦它實際上加載。

1[label docker-compose.yml]
2wordpress:
3...
4  ports:
5    - 8080:80
6...

第一个端口号是主机上的端口号,第二个端口号是容器内部的端口,因此,此配置将主机的端口 8080 上的请求转移到容器内部的默认 Web 服务器端口 80。

<$>[注] 注: 如果您希望Wordpress在主机上的默认网页服务器端口80上运行,请将前一行更改为 80:80,以便主机上的端口80请求转发到Wordpress容器内的端口80。

您的完整的 'docker-compose.yml' 文件现在应该是这样的:

 1[label docker-compose.yml]
 2wordpress:
 3  image: wordpress
 4  links:
 5    - wordpress_db:mysql
 6  ports:
 7    - 8080:80
 8wordpress_db:
 9  image: mariadb
10  environment:
11    MYSQL_ROOT_PASSWORD: examplepass

有了这个配置,我们实际上可以继续前进并启动WordPress,这次,让我们用d选项运行它,这将告诉docker-compose在背景中运行容器,以便您可以继续使用您的终端:

1docker-compose up -d

一旦它平静下来,打开一个网页浏览器,并浏览到您的DigitalOcean框的IP 在端口8080(例如,如果您的服务器的IP地址是123.456.789.123你应该输入您的浏览器 http://123.456.789.123:8080。

您应该看到一个新的WordPress安装页面,并可以像往常一样完成安装和博客。

由于这些都是官方的Docker图像,并遵循了Docker的所有最佳实践,因此每个图像都为您提供预定义的持久卷,这意味着如果您重新启动容器,您的博客帖子仍然在那里。

步骤 3 — 添加一个PhpMyAdmin容器

很棒,这是相对无痛的.让我们试着得到一点幻想。

到目前为止,我们只使用官方图像,Docker 团队努力确保它们是准确的,您可能已经注意到我们不必给 WordPress 容器任何环境变量来配置它。

这是因为WordPress Docker容器内部有一个脚本,它实际上从我们的WordPress_db容器中获取MYSQL_ROOT_PASSWORD变量,并使用它连接到WordPress。

让我们走出官方图像区域一点点,并使用一个 社区贡献的PhpMyAdmin图像

1nano docker-compose.yml

将下列内容放在文件的末尾:

 1[label docker-compose.yml]
 2phpmyadmin:
 3  image: corbinu/docker-phpmyadmin
 4  links:
 5    - wordpress_db:mysql
 6  ports:
 7    - 8181:80
 8  environment:
 9    MYSQL_USERNAME: root
10    MYSQL_ROOT_PASSWORD: examplepass

请确保用您之前设置的wordpress_db容器中完全相同的根密码更换examplepass。

这将docker-phpmyadmin从社区成员corbinu抓取,将其链接到我们的wordpress_db容器中,名为mysql (意思是从phpmyadmin容器内部引用到mysql主机名将被转发到我们的wordpress_db容器),将其端口80暴露在主机系统的端口8181上,最后将一些环境变量设置为我们的MariaDB用户名和密码。

完整的 'docker-compose.yml' 文件现在应该是这样的:

 1[label docker-compose.yml]
 2wordpress:
 3  image: wordpress
 4  links:
 5    - wordpress_db:mysql
 6  ports:
 7    - 8080:80
 8wordpress_db:
 9  image: mariadb
10  environment:
11    MYSQL_ROOT_PASSWORD: examplepass
12phpmyadmin:
13  image: corbinu/docker-phpmyadmin
14  links:
15    - wordpress_db:mysql
16  ports:
17    - 8181:80
18  environment:
19    MYSQL_USERNAME: root
20    MYSQL_ROOT_PASSWORD: examplepass

现在,重新启动应用组:

1docker-compose up -d

您将看到PhpMyAdmin安装完成后,再次访问您的服务器的IP地址(这次使用端口8181,例如 http://123.456.789.123:8181).您将被PhpMyAdmin登录屏幕欢迎。

继续使用您在YAML文件中设置的用户名和密码登录,您将能够浏览您的数据库,您将注意到服务器包含一个WordPress数据库,其中包含您的WordPress安装的所有数据。

正如你所看到的,这种方法非常强大,而不是处理每个组件的配置和先决条件,并将它们设置在同一个服务器上,你可以像Lego块一样连接这些组件并将组件添加到一起。 使用像Docker Swarm(https://docs.docker.com/swarm/install-w-machine/)这样的工具,你甚至可以透明地在多个服务器上运行这些容器! 尽管如此,Docker提供了一些 文档的内容,如果你感兴趣。

第4步:创建WordPress网站

由于您的新的WordPress网站的所有文件都存储在您的Docker容器中,当您关闭容器并重新启动它时,会发生什么?

默认情况下,WordPress容器的文档根是持久的,这是因为Docker Hub的WordPress图像是这样配置的. 如果你对WordPress网站做出更改,停止应用组,然后重新启动,你的网站仍然会有你所做的更改。

让我们试试吧。

從網頁瀏覽器到您的 WordPress (例如 http://123.456.789.123:8080)。 編輯已經存在的 Hello World! 帖子。 然後用以下命令停止所有 Docker 容器:

1docker-compose stop

尝试再次加载WordPress网站,您将看到网站已下载,重新启动Docker容器:

1docker-compose up -d

再次加载WordPress网站,您应该看到您的博客网站和您之前所做的更改,这表明您所做的更改即使在容器停止时也被保存。

步骤 5 — 在主机文件系统中存储文档根(可选)

可以使用 Docker 数据量将 WordPress 文档根存储在主机文件系统中,以便在主机和容器之间共享文件。

<$>[注] 注: 有关使用 Docker 数据量的更多细节,请参阅 Docker 数据量教程

让我们再试一试,再一次打开你的 docker-compose.yml 文件:

1nano ~/wordpress/docker-compose.yml

WordPress:部分中,添加以下几行:

1[label ~/wordpress/docker-compose.yml]
2wordpress:
3...
4  volumes:
5    - ~/wordpress/wp_html:/var/www/html
6    ...

停止您目前正在运行的docker-compose会话:

1docker-compose stop

移除现有容器,以便我们可以将音量绘制到主机文件系统:

1docker-compose rm wordpress

重新启动WordPress:

1docker-compose -d

一旦提示返回,WordPress应该再次启动并运行 - 这次使用主机文件系统来存储文档根。

如果你看看你的~/wordpress目录,你会看到它现在有一个wp_html目录:

1ls ~/wordpress

所有WordPress源文件都在里面,您所做的更改将由WordPress容器实时收集。

这种体验比平时更顺畅 - WordPress Docker 容器配置为在启动时检查 /var/www/html 是否空,并在那里适当地复制文件。

结论

你应该有一个完整的WordPress部署和运行. 你应该能够使用相同的方法来部署相当广泛的系统,使用可用的图像在Docker Hub. 确保找出哪些卷是持久的,哪些不是每个容器你 创建。

快乐的Docker!

Published At
Categories with 技术
comments powered by Disqus