文章目录
[隐藏]

一、概述

Docker是一个能够将应用程序自动部署到容器的开源引擎,由Docker公司编写,基于Apache 2.0开源授权协议发行。

Docker是一种轻量级的建模方案,基于”写时复制”(Copy-on-Write)模型构建,目标实现缩短开发、测试、部署的周期,使应用程序具备可移植、易构建、易协作等特性。目前在SOA、微服务、DevOps和CI/CD等方面应用广泛。

Docker提供了轻量级的虚拟化方案,相对于Openstack这样的重型虚拟化武器,具备自己独特的应用场景,未来将于与Openstack在云生态中共存。Docker具备原生的Linux容器格式,利用Linux内核命名空间隔离文件系统、进程和网络,利用CGroup(Ctronl Group)将CPU、Mem等资源镜像隔离和分组,并分配给各个Docker容器。

有关Docker,详细可参考这篇微文

下面通过Wordpress博客Docker化的过程,简单介绍Docker的使用,方便后期的博客的迁移部署。

二、实践

1、安装启动

2、命令介绍

这里简单介绍一下用到的Docker命令,详细了解命令可以man docker或docker –help大体了解一下。

  • docker search: 从公共仓库Docker Hub中查询已经存在的镜像;
  • docker pull: 从仓库中下载镜像到本地;
  • docker run: 在新容器中运行命令,意思就是让容器跑起来;
  • docker ps: 列出本地已经存在的容器;
  • docker stats: 显示运行容器的资源统计;
  • docker kill: 结束一个或多个正在运行的容器;
  • docker exec: 在已经运行的容器中执行命令,类似ssh到上面
  • docker commit: 将已经修改操作的容器创建一个新的镜像;
  • docker port: 查看容器和宿主机的端口映射表。

3、下载镜像

首先博客需要一个lamp+wordpress的环境,想必这个镜像已经存在了,去Docker Hub查一下:

为了挑一个最合适的,可以去https://hub.docker.com/仔细选一下,经过比对每个共享镜像的说明,最终选了CentOS环境的docker.io/nickistre/centos-lamp-wordpress镜像。

将镜像下载到本地:

很快就下完了。

4、数据准备

因为不考虑将博客数据存放到docker容器中,这里需要准备数据库数据和wordpress博客数据的两个数据持久化目录:database和wordpress。

创建数据库数据持久化目录

下载wordpress安装包,并解压:

修改wordpress数据库的配置

5、运行容器

运行刚才下载的容器,查看docker进程。

不难猜出我们跟的几个参数的含义:

-v: 挂载本地目录到Docker中,这里我们将mysql和wordpress的持久化目录挂载到docker中的对应目录;

-p:端口映射,将宿主机的8888/8306端口分别映射到Docker的80端口和3306端口;

查看端口映射如下:

-d: 后台运行Docker,不打印日志到标准输出;

当然也可以用-it参数代替-d,-i代表以交互的方式保持标准输出,-t表示创建一个伪TTY终端。

6、简单配置

这里主要进行http和mysql的简单配置。

进入docker,执行命令进行配置:

修改数据库密码,与数据准备阶段的wp-config.php的一致:

好了,配置完成,下面测试一下:

浏览器访问:宿主机IP:宿主机映射到Docker中Http的端口,这里是http://192.168.100.83:8888/,直接进入了熟悉的wordpress安装页面。

设置好密码后,因为配置好了数据表及登录密码,这里可直接进入登录页面,如下:

后面的配置、文章发布在此略过……

至此,博客的Docker化已经完成了,非常简单!

回过头查看数据库的数据持久化目录,已经具备的配置目录及数据,如下:

7、数据备份

其实要备份的数据就三个:Docker镜像、Wordpress页面数据、数据库数据。Docker镜像包含了我们的运行环境,Wordpress页面和数据库数据是我们的持久化数据。

提交定制容器,并查看详细信息。

下面推送镜像到Docker Hub

首先在Docker Hub创建一个私有仓库,如下

然后本地登录帐号,如下:

最后推送镜像:

注明:如果执行docker push myblog会提示失败,前缀如果没有用户id等形式Docker默认是Docker官方团队维护root仓库,所有前面我们在docker commit 时最好提交一个类似“docker.io/your-username/repo”的镜像名称,不能像上文一样提交myblog。

对于Wordpress页面数据、数据库数据,直接备份数据即可,当然数据库文件也可以执行导入导出进行备份和恢复:

8、迁移恢复

以上所做的工作主要是为了方便了博客的迁移,能够做到“一次创建,处处使用”,对于迁移时的数据恢复也十分简单,比如将博客迁移到新入手的VPS上,只需要之前Docker化的安装Docker,拉取自己创建的myblog镜像,拷贝备份的数据库数据和wordpress网站数据,然后运行Docker镜像即可快速完成迁移,避免了重复配置lamp环境的繁琐步骤。

三、参考文档

第一本Docker书

http://www.atjiang.com/persistent-storage-and-shared-state-with-volumes-in-docker/