如何在Ubuntu 14.04与Docker Compose安装WordPress和phpMyAdmin的

本文提供了使用Docker Compose安装一个应用程序,在这种情况下,WordPress的与phpMyAdmin作为一个额外的现实世界的例子。 WordPress的正常运行上的LAMP,这意味着Linux操作系统,Apache,MySQL的/ MariaDB的,和PHP。 WordPress官方Docker图像包括Apache和PHP我们,所以我们要担心的唯一部分是MariaDB的。

介绍

Docker Compose使得处理Docker容器的编排过程(如开机,关机,并建立内部容器链接和卷)很容易。 本文提供了一个使用Docker Compose安装应用程序的实际示例,在这种情况下,WordPress使用PHPMyAdmin作为额外的。 WordPress通常在LAMP上运行,这意味着Linux,Apache,MySQL / MariaDB和PHP。官方WordPress Docker镜像包括Apache和PHP,所以我们唯一需要担心的是MariaDB。

先决条件

要遵循本文,您需要以下内容:

第1步 - 安装WordPress

我们将使用官方的WordPressMariaDB的Docker图像。如果你好奇,有更多关于这些图像和他们的配置选项在他们各自的GitHub和Docker Hub页面上的信息。 让我们通过一个文件夹,我们的数据将生活,创造一个最小的启动docker-compose.yml文件来运行我们的WordPress的容器:
mkdir ~/wordpress && cd $_
然后创建一个~/wordpress/docker-compose.yml用你喜欢的文本编辑器(nano是容易的,如果你没有特别的偏好):
nano ~/wordpress/docker-compose.yml
并粘贴在以下内容中:
〜/ wordpress / docker-compose.yml
wordpress:
  image: wordpress
这只是告诉Docker开始撰写名为新容器wordpress并下载wordpress从Docker Hub的形象。 我们可以像这样把图像:
docker-compose up
你会看到Docker下载并从Docker Hub中提取WordPress图像,一段时间后你会得到一些类似下面的错误信息:
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用文本编辑器:
nano ~/wordpress/docker-compose.yml
更改docker-compose.yml匹配以下(注意与缩进,YAML文件是空白敏感)
docker-compose.yml
wordpress:
  image: wordpress
  links:
    - wordpress_db:mysql
wordpress_db:
  image: mariadb
我们所做的是定义一个新的容器调用wordpress_db并告诉它使用mariadb从Docker Hub的形象。 我们也告诉我们的wordpress容器,以我们的链接wordpress_db容器到wordpress容器,并把它称为mysql (里面wordpress容器中的主机名mysql将被转发到我们的wordpress_db容器)。 如果您运行的docker-compose up一遍,你会看到它下载MariaDB的形象,你还会看到,我们还没有应用,但:
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文件:
nano ~/wordpress/docker-compose.yml
这两行添加到年底 wordpress_db部分, 但一定要改变examplepass到一个更安全的密码!
docker-compose.yml
wordpress_db:
...
  environment:
    MYSQL_ROOT_PASSWORD: examplepass
...
这将设置内部的环境变量wordpress_db称为容器MYSQL_ROOT_PASSWORD你想要的密码。 该MariaDB的Docker映像配置为检查此环境变量,当它启动,并会采取用root帐户被定义为密码设置数据库照顾MYSQL_ROOT_PASSWORD 。 虽然我们在这里,让我们还设置一个端口转发,以便我们可以连接到我们的WordPress安装一旦实际加载。根据wordpress部分添加以下两行:
docker-compose.yml
wordpress:
...
  ports:
    - 8080:80
...
第一个端口号是主机上的端口号,第二个端口号是容器内的端口。因此,此配置将主机端口8080上的请求转发到容器内的默认Web服务器端口80。 注意:如果你想的WordPress主机上的默认Web服务器端口80上运行,前行更改为80:80 ,这样的请求到端口80的主机上被转发到端口80 WordPress的容器内。 您完整的docker-compose.yml文件现在应该是这样的:
docker-compose.yml
wordpress:
  image: wordpress
  links:
    - wordpress_db:mysql
  ports:
    - 8080:80
wordpress_db:
  image: mariadb
  environment:
    MYSQL_ROOT_PASSWORD: examplepass
有了这个配置,我们可以继续前进并启动WordPress。这一次,让我们与运行-d选项,它会告诉docker-compose运行在后台的容器,以便您可以继续使用终端:
docker-compose up -d
你会看到一大堆文本在你的屏幕上飞。一旦它平静下来,打开一个Web浏览器并浏览到IP 在8080端口上的DigitalOcean箱(例如,如果你的服务器的IP地址为123.456.789.123,你应该输入http://123.456.789.123:8080到浏览器)。 您应该会看到一个新的WordPress安装页面,并能像往常一样完成安装和博客。 因为这些都是官方Docker镜像,并且都遵循了Docker的最佳实践,每个镜像都有预定义的持久性卷,这意味着如果重新启动容器,您的博客帖子仍然会存在。您可以了解更多关于在Docker卷的Docker的数据量的教程

第3步 - 添加PhpMyAdmin容器

伟大,这是相对无痛。让我们尝试得到一点花哨。 到目前为止,我们只使用官方图像,Docker团队需要极大的努力来确保准确。您可能已经注意到,我们没有给WordPress容器任何环境变量来配置它。一旦我们将它连接到一个正确配置的MariaDB容器,一切都正常工作。 这是因为有其实际把持WordPress的Docker容器内的脚本MYSQL_ROOT_PASSWORD从我们的可变wordpress_db容器,并使用该连接到WordPress。 让我们走出去官方图像区域一点点的,并使用一个社区贡献phpMyAdmin的形象 。 来吧,编辑docker-compose.yml一次:
nano docker-compose.yml
将以下内容粘贴到文件末尾:
docker-compose.yml
phpmyadmin:
  image: corbinu/docker-phpmyadmin
  links:
    - wordpress_db:mysql
  ports:
    - 8181:80
  environment:
    MYSQL_USERNAME: root
    MYSQL_ROOT_PASSWORD: examplepass
请务必在完全相同的超级用户口令,以取代examplepass wordpress_db容器设置你前面。 这抓住docker-phpmyadmin由社区成员corbinu ,它链接到我们的wordpress_db名为容器mysql (从里面的意思phpmyadmin到主机名容器引用mysql将被转发到我们的wordpress_db容器)上公开的端口8181的端口80主机系统,最后用我们的MariaDB用户名和密码设置几个环境变量。 这张图片不会自动抓取MYSQL_ROOT_PASSWORD从环境变量wordpress_db容器的环境的方式wordpress形象一样。 实际上,我们必须复制MYSQL_ROOT_PASSWORD: examplepass从行wordpress_db容器,并设置用户名root 。 完整的docker-compose.yml文件现在应该是这样的:
docker-compose.yml
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
现在再次启动应用程序组:
docker-compose up -d
您将看到PhpMyAdmin安装。一旦完成,(使用端口8181,如这一次再次访问你的服务器的IP地址http://123.456.789.123:8181 )。你会被PhpMyAdmin登录屏幕打扰。 来吧,使用用户名登录root和密码,您在YAML文件中设置,你就可以浏览你的数据库。 你会发现,服务器包括wordpress数据库,其中包含了所有来自你的WordPress数据安装。 你可以添加尽可能多的容器,你喜欢这种方式,并以任何方式链接他们所有你喜欢。正如你所看到的,这种方法是相当强大的 - 不是处理每个单个组件的配置和先决条件,并将它们全部设置在同一台服务器上,你可以像Lego块一样插入片段,并添加组件片段。使用类似的工具Docker群 ,你甚至可以透明地运行这些容器在多个服务器! 这是一个超出本教程的范围。 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 )。 编辑已经存在的世界,你好!职。然后,使用以下命令停止所有Docker容器:
docker-compose stop
尝试重新加载WordPress网站。你会看到网站关闭。再次启动Docker容器:
docker-compose up -d
再次,加载WordPress网站。您应该会看到您的博客网站和您之前所做的更改。这表明即使容器停止,您所做的更改也会保存。

第5步 - 在主机文件系统上存储文档根目录(可选)

可以使用Docker数据卷在主机文件系统上存储WordPress的文档根目录,以在主机和容器之间共享文件。 注:有关使用Docker的数据量工作的详细信息,看一看在Docker的数据量的教程 让我们试试。打开你的docker-compose.yml文件一次:
nano ~/wordpress/docker-compose.yml
wordpress:部分加上下面几行:
〜/ wordpress / docker-compose.yml
wordpress:
...
  volumes:
    - ~/wordpress/wp_html:/var/www/html
    ...
停止当前运行的docker-compose会议:
docker-compose stop
删除现有容器,以便将卷映射到主机文件系统:
docker-compose rm wordpress
再次启动WordPress:
docker-compose -d
一旦提示返回,WordPress应该启动并再次运行 - 这次使用主机文件系统来存储文档根。 如果你在看~/wordpress目录,你会看到,现在有一个wp_html在它的目录:
ls ~/wordpress
所有的WordPress源文件都在里面。您所做的更改将由WordPress容器实时获取。 这方面的经验是有点顺畅比它通常会是- WordPress的Docker容器配置为检查是否/var/www/html当它开始和拷贝文件的适当存在空。通常你必须自己做这一步。

结论

你应该有一个完整的WordPress部署和运行。您应该能够使用相同的方法使用Docker Hub上提供的映像部署各种各样的系统。确保找出哪些卷是持久的,哪些不是每个容器你 创建。 快乐Dockering!