对于 Docker 我目前还似懂非懂,玩了有几天时间,现在掌握,好像也只有下载镜像,运行容器的程度;总的来说 Docker 还是挺好玩的呀,虽然对于我这个菜鸟(VPS、容器等兴趣爱好者)来说,顶多建个站点放个网站的话,远没有在系统上安装虚拟主机控制面板来的方便。但我得承认,Docker 的未来还是很有发展潜力的。

就我才熟悉 Docker 几天的外行人认为,容器就是一个积木,多个容器组合在一块,就像积木搭建的各种物体一样。想象一下积木,多个积木搭建一个大的方块,而这个方块同样也可以是其他成品的配件;…… 好吧,原谅我有限的想象力和词汇,不能把想到的准确 生动的写出来,对于 Docker 的解释就先这样吧。

下面进入正题,通过 Docker 容器建立个WordPress站点。

搭建思路

系统环境

这里说的系统环境,安装运行 Docker 的机子:可以是真实的物理机器;可以是系统上虚拟机中安装的系统;也可以是Xen、KVM等架构(OpenVZ架构的是不可以的)的VPS,云主机;等等。

我这里用的是:Ubuntu 14.04 64bit

运行WordPress分析

WordPress 基于PHP语言的内容管理系统,需要数据库。所以严格细分下来的话,需要Web前端,PHP环境,数据库,而且还要弄WordPress,而且容器与容器之间的衔接。

太,太麻烦了,然后看到WordPress官方的镜像库,看了看Dockerfile文件,是基于php:5.6-fpmphp:5.6-apache。这样子就方便了,直接pull wordpress不就OK了么。然后数据库就MariaDB这个吧,也直接给弄下来!

https://hub.docker.com/\_/wordpress/
https://hub.docker.com/\_/mariadb/
镜像的官方页面都有详细的说明,和自定义变量,如果要获取详细的信息的话,当然需要进入上面的链接了解。

使用Docker建立WordPress建站

安装Docker

首先是登录或切换到 root 用户。

安装之前首先要看看要不要更换系统的源,我这里是更换了的,使用如下命令:

sed -i 's/archive.ubuntu/cn.archive.ubuntu/g' /etc/apt/sources.list
apt-get update

然后再执行下面命令安装Docker:

curl -sSL https://get.docker.com/ | sh

我之前在某一个VPS上测试的时候,使用上面命令,发现git没有被安装,如果没有的话,使用命令apt-get install git -y来安装。不过这里用不到的!

安装成功的截图:

2016-02-27_203310.png

Pull镜像

首先先来说一下加速器,如果从国内的电脑上Pull Docker官方的镜像的话,可能会有些慢(这个也要看情况,反正移动宽带的速度很快);这里建议使用各种加速器,例如163的分别执行下面2行命令:

echo "DOCKER_OPTS=\"\$DOCKER_OPTS --registry-mirror=http://hub-mirror.c.163.com\"" >> /etc/default/docker
service docker restart

然后把WordPress和MariaDB镜像弄下来,命令:

docker pull wordpress
docker pull mariadb

需要一定的时间,过程截图:

2016-02-27_203951.png

2016-02-27_205024.png

运行容器

先把数据库镜像给运行起来(其后运行WordPress镜像的时候可以链接到这个容器):

docker run --name some-mariadb -e MYSQL_ROOT_PASSWORD=mypassword -p 10086:3306 -d mariadb
  • some-mariadb自定义,其他链接到这个容器的时候可以用来标识;
  • my-password自定义,数据库root用户的密码;
  • -p 10086:3306其中10086端口自定义,数据库远程连接的端口转发到10086。

然后把WordPress镜像给运行起来:

docker run --name some-wordpress --link some-mariadb:mariadb -p 80:80 -e WORDPRESS_DB_HOST=192.168.2.200:10086 -e WORDPRESS_DB_PASSWORD=mypassword -d wordpress
  • some-wordpress自定义,一个标识名字;
  • some-mariadb:mariadb自定义,其中some-mariadb就是上面运行MariaDB镜像时候设置的;
  • -e WORDPRESS_DB_HOST=192.168.2.200:10086自定义,这个是容器内定义的变量,对接数据库主机;
  • -e WORDPRESS_DB_PASSWORD=my-password自定义,对接数据库密码(更多可以去WordPress镜像官方页面查看);
  • -p 80:80自定义,如果外部访问不用80端口的话,则设置例如为8080:80

上面提到的IP192.168.2.200是公网IP,因为我是在本地虚拟机上测试的。数据库的连接当然也可以用内网IP,以下的命令可以获取某个容器的内网IP:

docker inspect --format='{{.NetworkSettings.IPAddress}}' $CONTAINER_ID
## $CONTAINER_ID < docker ps

但是设置用内网IP毫无意思,毕竟容器每次重启内网IP都是自动更换的;那就设置一个固定的内网IP。唔,这我也不是很懂,对我来说一个外网IP和自定义的端口足够使用了。强调一下,这里说的内网,是相对容器来说的。

设置站点

上面的设置完成之后用IP访问,是服务器或VPS再或虚拟机的IP,加上端口访问。因为我这里设置的是80端口,所以加不加端口无所谓了,反正80端口你也看不出来。打开之后进入WordPress初始化安装:

2016-02-27_214952.png

如果域名指向了这个IP,用域名打开也是一样的:

2016-02-27_215106.png

2016-02-27_215209.png

2016-02-27_215320.png

这样子一个WordPress站点就搭建完成了。也许对于初学者来说搭建过程看着有些头晕,实际很简单的:下载镜像,运行镜像,运行镜像的时候对接容器。

一些 Docker 技巧和命令

查看镜像:

docker images

查看正在运行的容器:

docker ps

停止、启动、杀死一个容器:

docker stop <容器名 或 ID>
docker start <容器名 或 ID>
docker kill <容器名 或 ID>

容器名(NAME)例如:some-wordpress;ID(CONTAINER ID)例如:dc70ccc3471a

停止所有容器,删除所有容器:

docker kill $(docker ps -q) ; docker rm $(docker ps -a -q)

停止所有容器,删除所有容器,删除所有镜像:

docker kill $(docker ps -q) ; docker rm $(docker ps -a -q) ; docker rmi $(docker images -q -a)

额外

注意到了吗,我这文章的标题最后面有个v1字样,这篇文章所用到的搭建WordPress的方法是最最简单的一种。其实我本来是想在Nginx容器、PHP容器、数据库容器的基础上搭建的,但是我后来想想,这样子太麻烦了,还是省点事情吧!本来 Docker 的存在就是为了节约时间,快速搭建的!