一、问题
WordPress组件Mysql和wordPress分别运行在不同容器
二、解决方案
- 下载不同的镜像
$ docker pull wordpress$ docker pull mysql
启动一个Mysql容器,设置命令行工具 —name 设置名称,通过 MySQL_ROOT_PASSWORD 环境变量设置Mysql的密码,
如下所示
$ docker run --name mysqlwp -e MYSQL_ROOT_PASSWORD=wordpressdocker -d mysql
现在就可以基于wordpress镜像启动Wordpress容器了。这个容器将会通过 —link 选项链接到Mysql容器,
这样Docker 会自动进行网络配置,让WordPress容器访问到Mysql容器中暴露出来的端口,如图所示
$ docker run --name wordpress --link mysqlwp:mysql -p 80:80 -d wordpress
安装完成如图所示,这样就可以得到一个在两个链接到一起的容器之上运行的WordPress网站
三、讨论
这些镜像(WordPress MySQL)都是官方镜像,都由官方社区来维护,DockerHub社区对这些镜像都有详细的文档。如下:
WordPress: https://hub.docker.com/_/wordpress/
MySQL:https://hub.docker.com/_/mysql/
令人兴奋的是,你可以通过设置几个环境变量来创建数据库,并且只具有相应权限的用户才能操作数据库:MYSQL_DATABASE、MYSQL_USER和MYSQL_PASSWORD。在前面的例子中WordPress使用的是root用户,这个不是一个好的方式。最好是创建一个名为wordpress的数据库,并为其创建一个用户,像下面这样。
$ docker run --name mysqlwp -e MYSQL_ROOT_PASSWORD=wordpressdocker \-e MYSQL_DATABASE=wordpress \-e MYSQL_USER=wordpress \-e MYSQL_PASSWORD=wordpresspwd \-d mysql
如果你需要删除所有容器,可以使用下面这种嵌套shell的快捷方式。
$ docker stop $(docker ps -q)$ docker rm -v $(docker ps -aq)
docker rm 命令的 -v选项用来删除MYSQL镜像中定义的数据卷,如图
$ docker rm -hOptions:-f, --force Force the removal of a running container (uses SIGKILL)-l, --link Remove the specified link-v, --volumes Remove anonymous volumes associated with the container
数据库启动之后,可以启动WordPress容器并指定你设置好的数据库表,如下所示。
$ docker run --name wordpress --link mysqlwp:mysql -p 80:80 \-e WORDPRESS_DB_NAME=wordpress \-e WORDPRESS_DB_USER=wordpress \-e WORDPRESS_DB_PASSWORD=wordpresspwd \-d wordpress
