前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在Ubuntu 14.04上使用Docker Compose安装Wordpress和PhpMyAdmin

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

原创
作者头像
穿鞋跑得快
修改2018-10-23 17:21:43
1.6K0
修改2018-10-23 17:21:43
举报

介绍

Docker Compose使得处理Docker容器的编排过程(例如启动,关闭和设置容器内链接和卷)非常容易。

本文提供了一个使用Docker Compose来安装应用程序的实际示例,在这种情况下,WordPress使用PHPMyAdmin作为额外的。WordPress通常在LAMP堆栈上运行,这意味着Linux,Apache,MySQL / MariaDB和PHP。官方的WordPress Docker镜像包括Apache和PHP,所以我们唯一需要担心的是MariaDB。

准备

要阅读本文,您需要具备以下条件:

  • 一台已经设置好可以使用sudo命令的非root账号的Ubuntu服务器,并且已开启防火墙。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器
  • 安装好Docker和Docker Compose

第1步 - 安装WordPress

我们将使用官方的WordPressMariaDB Docker镜像。如果你很好奇,那么在各自的GitHub和Docker Hub页面上有关于这些图像及其配置选项的更多信息。

让我们首先创建一个文件夹,我们的数据将存在,并创建一个最小的docker-compose.yml文件来运行我们的WordPress容器:

代码语言:javascript
复制
mkdir ~/wordpress && cd $_

然后使用您喜欢的文本编辑器创建一个~/wordpress/docker-compose.yml (如果您没有首选项,nano很容易):

代码语言:javascript
复制
nano ~/wordpress/docker-compose.yml

并粘贴如下:

代码语言:javascript
复制
wordpress:
  image: wordpress

这只是告诉Docker Compose启动一个名为wordpress的新容器和从Docker Hub 下载wordpress映像。

我们可以像这样提出图像:

代码语言:javascript
复制
docker-compose up

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

代码语言:javascript
复制
wordpress_1 | error: missing WORDPRESS_DB_HOST and MYSQL_PORT_3306_TCP environment variables
wordpress_1 |   Did you forget to --link some_mysql_container:mysql or set an external db
wordpress_1 |   with -e WORDPRESS_DB_HOST=hostname:port?
dockercompose_wordpress_1 exited with code 1

这是WordPress抱怨它无法找到数据库。让我们将一个MariaDB图像添加到混合中并将其链接起来以修复它。

第2步 - 安装MariaDB

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

代码语言:javascript
复制
nano ~/wordpress/docker-compose.yml

更改docker-compose.yml来匹配以下(小心缩进,YAML文件是空白区域敏感)

代码语言:javascript
复制
wordpress:
  image: wordpress
  links:
    - wordpress_db:mysql
wordpress_db:
  image: mariadb

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

如果你再次运行docker-compose up,你会看到它下载了MariaDB图像,你也会看到我们还没有完全存在:

代码语言:javascript
复制
wordpress_db_1 | error: database is uninitialized and MYSQL_ROOT_PASSWORD not set
wordpress_db_1 |   Did you forget to add -e MYSQL_ROOT_PASSWORD=... ?
wordpress_1    | error: missing required WORDPRESS_DB_PASSWORD environment variable
wordpress_1    |   Did you forget to -e WORDPRESS_DB_PASSWORD=... ?
wordpress_1    | 
wordpress_1    |   (Also of interest might be WORDPRESS_DB_USER and WORDPRESS_DB_NAME.)
wordpress_wordpress_db_1 exited with code 1
wordpress_wordpress_1 exited with code 1
Gracefully stopping... (press Ctrl+C again to force)

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

似乎只是链接两个容器是不够的。让我们继续设置MYSQL_ROOT_PASSWORD变量,以便我们可以实际解决这个问题。

再次编辑Docker Compose文件:

代码语言:javascript
复制
nano ~/wordpress/docker-compose.yml

这两行添加到结束的的wordpress_db部分,但一定要改变examplepass,以更安全的密码!

代码语言:javascript
复制
wordpress_db:
...
  environment:
    MYSQL_ROOT_PASSWORD: examplepass
...

这将在使用所需密码wordpress_db调用的容器内设置环境变量MYSQL_ROOT_PASSWORD。MariaDB Docker映像配置为在启动时检查此环境变量,并将使用root帐户设置数据库,并将密码定义为MYSQL_ROOT_PASSWORD

虽然我们正在使用它,但我们还设置了一个前向端口,以便我们可以在实际加载后连接到我们的WordPress安装。在该wordpress部分下添加以下两行:

代码语言:javascript
复制
wordpress:
...
  ports:
    - 8080:80
...

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

注意:如果您希望Wordpress在主机上的默认Web服务器端口80上运行,请将上一行更改为80:80以便将对主机上端口80的请求转发到Wordpress容器内的端口80。

您的完整docker-compose.yml文件现在应如下所示:

代码语言:javascript
复制
wordpress:
  image: wordpress
  links:
    - wordpress_db:mysql
  ports:
    - 8080:80
wordpress_db:
  image: mariadb
  environment:
    MYSQL_ROOT_PASSWORD: examplepass

通过这种配置,我们实际上可以继续启动WordPress。这一次,让我们使用-d选项运行它,它将告诉docker-compose您在后台运行容器,以便您可以继续使用终端:

代码语言:javascript
复制
docker-compose up -d

您会在屏幕上看到一大堆文字。一旦它平静下来,打开一个Web浏览器并浏览到 端口8080上的DigitalOcean盒的IP (例如,如果您的服务器的IP地址是123.456.789.123,您应该输入#http://123.456.789.123:8080到你的浏览器。)

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

因为这些都是Docker的官方映像,并且遵循Docker的所有最佳实践,所以这些映像中的每一个都有预先定义的持久卷 - 这意味着如果重新启动容器,您的博客文章仍然会存在。

第3步 - 添加PhpMyAdmin容器

太好了,那是相对无痛的。让我们尝试一下。

到目前为止,我们只使用官方图像,Docker团队非常努力确保准确。您可能已经注意到我们没有必要为WordPress容器提供任何环境变量来配置它。一旦我们将它连接到正确配置的MariaDB容器,一切都正常工作。

这是因为WordPress Docker容器中有一个脚本实际上MYSQL_ROOT_PASSWORDwordpress_db容器中获取变量并使用它连接到WordPress。

让我们稍微冒险离开官方图像区域,并使用社区贡献的PhpMyAdmin图像。继续编辑docker-compose.yml一次:

代码语言:javascript
复制
nano docker-compose.yml

将以下内容粘贴到文件末尾:

代码语言:javascript
复制
phpmyadmin:
  image: corbinu/docker-phpmyadmin
  links:
    - wordpress_db:mysql
  ports:
    - 8181:80
  environment:
    MYSQL_USERNAME: root
    MYSQL_ROOT_PASSWORD: examplepass

请务必使用您之前设置的wordpress_db容器中的完全相同的root密码替换examplepass。

docker-phpmyadmin由社区成员corbinu抓取,用名称mysql将其链接到我们的wordpress_db容器(意味着从phpmyadmin容器内部引用主机mysql名将转发到我们的wordpress_db容器),在主机系统的端口8181上公开其端口80,最后设置几个我们的MariaDB用户名和密码的环境变量。此图像不会像wordpress图像那样自动从wordpress_db容器环境中获取环境变量MYSQL_ROOT_PASSWORD。我们实际上必须从wordpress_db容器中复制该行MYSQL_ROOT_PASSWORD: examplepass,并将用户名设置为root

完整docker-compose.yml文件现在应该如下所示:

代码语言:javascript
复制
wordpress:
  image: wordpress
  links:
    - wordpress_db:mysql
  ports:
    - 8080:80
wordpress_db:
  image: mariadb
  environment:
    MYSQL_ROOT_PASSWORD: examplepass
phpmyadmin:
  image: corbinu/docker-phpmyadmin
  links:
    - wordpress_db:mysql
  ports:
    - 8181:80
  environment:
    MYSQL_USERNAME: root
    MYSQL_ROOT_PASSWORD: examplepass

现在再次启动应用程序组:

代码语言:javascript
复制
docker-compose up -d

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

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

您可以通过这种方式添加任意数量的容器,并以任何方式将它们全部链接起来。正如您所看到的,这种方法非常强大 - 而不是处理每个组件的配置和先决条件,并将它们全部设置在同一台服务器上,您可以像Lego块一样插入各个部分并逐个添加组件。使用像Docker Swarm这样的工具,您甚至可以在多个服务器上透明地运行这些容器!这虽然是本教程的范围。如果您有兴趣,Docker会在其上提供一些[文档]((https://docs.docker.com/swarm/install-w-machine/)))。

第4步 - 创建WordPress站点

由于新WordPress站点的所有文件都存储在Docker容器中,当您停止容器并再次启动时,文件会发生什么?

默认情况下,WordPress容器的文档根目录是持久的。这是因为Docker Hub中的WordPress图像是以这种方式配置的。如果您对WordPress网站进行了更改,请停止该应用程序组,然后重新启动它,您的网站仍将进行所做的更改。

我们来试试吧。

从Web浏览器转到您的WordPress(例如#http://123.456.789.123:8080)。编辑Hello World!已经存在的帖子。然后,使用以下命令停止所有Docker容器:

代码语言:javascript
复制
docker-compose stop

尝试再次加载WordPress网站。您将看到该网站已关闭。再次启动Docker容器:

代码语言:javascript
复制
docker-compose up -d

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

步骤5 - 将文档根存储在主机文件系统上(可选)

可以使用Docker数据卷在主机文件系统上存储WordPress的文档根目录,以在主机和容器之间共享文件。

试一试吧。再次打开docker-compose.yml文件:

代码语言:javascript
复制
nano ~/wordpress/docker-compose.yml

在该wordpress:部分添加以下行:

代码语言:javascript
复制
wordpress:
...
  volumes:
    - ~/wordpress/wp_html:/var/www/html
    ...

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

代码语言:javascript
复制
docker-compose stop

删除现有容器,以便我们可以将卷映射到主机文件系统:

代码语言:javascript
复制
docker-compose rm wordpress

再次启动WordPress:

代码语言:javascript
复制
docker-compose -d

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

如果查看~/wordpress目录,您会看到其中有一个wp_html目录:

代码语言:javascript
复制
ls ~/wordpress

所有WordPress源文件都在其中。您所做的更改将由WordPress容器实时获取。

这种体验比通常情况下要平滑得多 - WordPress Docker容器配置为在启动时检查/var/www/html是否为空,并在适当的位置复制文件。通常你必须自己完成这一步。

结论

你应该有一个完整的WordPress部署并运行。您应该能够使用相同的方法使用Docker Hub上提供的映像部署各种各样的系统。请务必确定哪些卷是持久的,哪些卷不是您创建的每个容器。

更多Ubuntu教程请前往腾讯云+社区学习更多知识。

参考文献:《How To Install Wordpress and PhpMyAdmin with Docker Compose on Ubuntu 14.04》

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
    • 准备
      • 第1步 - 安装WordPress
        • 第2步 - 安装MariaDB
          • 第3步 - 添加PhpMyAdmin容器
            • 第4步 - 创建WordPress站点
              • 步骤5 - 将文档根存储在主机文件系统上(可选)
                • 结论
                相关产品与服务
                网站建设
                网站建设(Website Design Service,WDS),是帮助您快速搭建企业网站的服务。通过自助模板建站工具及专业设计服务,无需了解代码技术,即可自由拖拽模块,可视化完成网站管理。全功能管理后台操作方便,一次更新,数据多端同步,省时省心。使用网站建设服务,您无需维持技术和设计师团队,即可快速实现网站上线,达到企业数字化转型的目的。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档