Docker应用教程:WordPress

摘要

使用Docker Compose 执行WordPress。

0. 说明术语和设置

Docker Compose(コンポーズ)是一个用于定义和运行使用多个容器的应用程序的工具。

在中文环境下,Docker Compose 的设置需要使用 root 权限执行以下命令。

curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

执行后,请确认版本号是否显示。

$ docker-compose version
docker-compose version 1.13.0, build 1719ceb
docker-py version: 2.2.1
CPython version: 2.7.13
OpenSSL version: OpenSSL 1.0.1t  3 May 2016

准备docker-compose.yml文件

Docker Compose 通过名为 docker-compose.yml 的 YAML 格式文件来定义服务(容器)。你可以指定要使用哪个镜像来运行,使用哪个端口,以及定义卷和网络。

首先,创建并进入工作目录。

$ mkdir wordpress
$ cd wordpress

我会打开编辑器并创建docker-compose.yml文件。这个文件也被称为“项目定义文件”。在Docker Compose中,默认情况下,目录名(在这个例子中是wordpress)是适用的(可以使用-p选项指定其他名称)。

$ vi docker-compose.yml

文件的内容如下。

version: '3.1'

services:

  wordpress:
    image: wordpress
    ports:
      - 80:80
    environment:
      WORDPRESS_DB_PASSWORD: example

  mysql:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: example

在这里,我们定义了两个容器,一个是WordPress,另一个是MySQL,作为服务提供。(在这里,我们定义了WordPress和MySQL两个容器,作为服务的一部分。)

2. 下载所需的图像

执行docker-compose pull命令将会批量下载docker-compose.yml文件中所包含的服务所需的镜像。

$ docker-compose pull

执行`docker images`命令后,您可以看到所需的镜像已经下载完毕。

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
wordpress           latest              ca96afcfa242        7 days ago          406MB
mysql               5.7                 e799c7f9ae9c        2 weeks ago         407MB

3. 运行WordPress.

要执行服务,需要执行 docker-compose up -d 命令。up 表示启动 docker-compose.yml 文件中写的所有服务,-d 表示以 detach 模式(在后台运行)执行。

首先只运行MySQL服务。

$ docker-compose up -d mysql
Creating network "wordpress_default" with the default driver
Creating wordpress_mysql_1 ...
Creating wordpress_mysql_1 ... done

可以通过使用 docker-compose ps 命令来确认服务是否正在运行。

$ docker-compose ps
      Name                    Command             State    Ports
------------------------------------------------------------------
wordpress_mysql_1   docker-entrypoint.sh mysqld   Up      3306/tcp

只要 Up,它就会正常启动。

可以使用 docker-compose logs -f 命令来查看日志(标准输出)。如果没有特别的错误信息,您可以输入 Ctrl-C 终止操作。

确认MySQL启动后,我们会启动WordPress容器(出于MySQL数据库无法连接会导致启动失败的考虑,我们故意选择这个步骤)。

$ docker-compose up -d
wordpress_mysql_1 is up-to-date
Creating wordpress_wordpress_1 ...
Creating wordpress_wordpress_1 ... done

然后,我们会检查服务的运行状况。

$ docker-compose  ps
        Name                       Command               State          Ports
-------------------------------------------------------------------------------------
wordpress_mysql_1       docker-entrypoint.sh mysqld      Up      3306/tcp
wordpress_wordpress_1   docker-entrypoint.sh apach ...   Up      0.0.0.0:8080->80/tcp

检查 WordPress 容器的日志,并确认它已经正常启动。

$ docker-compose logs -f wordpress
Attaching to wordpress_wordpress_1
(省略)
wordpress_1  | [Thu May 25 04:32:07.734697 2017] [core:notice] [pid 1] AH00094: Command line: 'apache2 -D FOREGROUND'

请使用浏览器访问 http:///,确认WordPress页面已显示出来。

4. WordPress的关闭和重启

停止的命令是 docker-compose stop。

$ docker-compose stop
Stopping wordpress_wordpress_1 ... done
Stopping wordpress_mysql_1 ... done
$ docker-compose ps
        Name                       Command               State    Ports
-----------------------------------------------------------------------
wordpress_mysql_1       docker-entrypoint.sh mysqld      Exit 0
wordpress_wordpress_1   docker-entrypoint.sh apach ...   Exit 0

如果正在运行,可以使用docker-compose restart进行重新启动,如果处于停止状态,可以使用docker-compose start进行启动。

$ docker-compose start
Starting mysql ... done
Starting wordpress ... done
$ docker-compose ps
        Name                       Command               State          Ports
-------------------------------------------------------------------------------------
wordpress_mysql_1       docker-entrypoint.sh mysqld      Up      3306/tcp
wordpress_wordpress_1   docker-entrypoint.sh apach ...   Up      0.0.0.0:8080->80/tcp

删除WordPress

删除服务(包括删除使用的容器)的命令是 docker-compose rm 或 docker-compose down。

$ docker-compose down
Stopping wordpress_wordpress_1 ... done
Stopping wordpress_mysql_1 ... done
Removing wordpress_wordpress_1 ... done
Removing wordpress_mysql_1 ... done
Removing network wordpress_default
$ docker-compose ps
Name   Command   State   Ports
------------------------------
bannerAds