一、问题

WordPress组件Mysql和wordPress分别运行在不同容器

二、解决方案

  1. 下载不同的镜像
  1. $ docker pull wordpress
  2. $ docker pull mysql

启动一个Mysql容器,设置命令行工具 —name 设置名称,通过 MySQL_ROOT_PASSWORD 环境变量设置Mysql的密码,

如下所示

  1. $ docker run --name mysqlwp -e MYSQL_ROOT_PASSWORD=wordpressdocker -d mysql

现在就可以基于wordpress镜像启动Wordpress容器了。这个容器将会通过 —link 选项链接到Mysql容器,

这样Docker 会自动进行网络配置,让WordPress容器访问到Mysql容器中暴露出来的端口,如图所示

  1. $ docker run --name wordpress --link mysqlwp:mysql -p 80:80 -d wordpress

安装完成如图所示,这样就可以得到一个在两个链接到一起的容器之上运行的WordPress网站
image.png

三、讨论

这些镜像(WordPress MySQL)都是官方镜像,都由官方社区来维护,DockerHub社区对这些镜像都有详细的文档。如下:
WordPress: https://hub.docker.com/_/wordpress/
MySQL:https://hub.docker.com/_/mysql/

令人兴奋的是,你可以通过设置几个环境变量来创建数据库,并且只具有相应权限的用户才能操作数据库:MYSQL_DATABASEMYSQL_USERMYSQL_PASSWORD。在前面的例子中WordPress使用的是root用户,这个不是一个好的方式。最好是创建一个名为wordpress的数据库,并为其创建一个用户,像下面这样。

  1. $ docker run --name mysqlwp -e MYSQL_ROOT_PASSWORD=wordpressdocker \
  2. -e MYSQL_DATABASE=wordpress \
  3. -e MYSQL_USER=wordpress \
  4. -e MYSQL_PASSWORD=wordpresspwd \
  5. -d mysql

如果你需要删除所有容器,可以使用下面这种嵌套shell的快捷方式。

  1. $ docker stop $(docker ps -q)
  2. $ docker rm -v $(docker ps -aq)

docker rm 命令的 -v选项用来删除MYSQL镜像中定义的数据卷,如图

  1. $ docker rm -h
  2. Options:
  3. -f, --force Force the removal of a running container (uses SIGKILL)
  4. -l, --link Remove the specified link
  5. -v, --volumes Remove anonymous volumes associated with the container

数据库启动之后,可以启动WordPress容器并指定你设置好的数据库表,如下所示。

  1. $ docker run --name wordpress --link mysqlwp:mysql -p 80:80 \
  2. -e WORDPRESS_DB_NAME=wordpress \
  3. -e WORDPRESS_DB_USER=wordpress \
  4. -e WORDPRESS_DB_PASSWORD=wordpresspwd \
  5. -d wordpress