00:00
本期教程将介绍docker和docker comp boss的基础应用,通过实际应用来讲解具体的使用方法和两者的区别。假设现在服务器上需要部署3个项目,项目ABC。他们的外部服务都是N杰X,但是PHP版本不同,My clel数据库的版本也不相同。在传统模式下,尽管PHP可以多版本库存,但是数据库的多版本互存相对来说就困难一些。在这种情况下,Docker就是一种很好的解决方案。Docker主要由镜像和容器两部分组成,镜像可以理解成是一个模板,那么容器就是根据镜像创建的不同的可执行的实例。那么这些实例之间是相互独立的,接下来我们就开始安装docker。这个安装过程可能会因为网络的问题而造成中断,如果中断了,只需重新执行一下该命令就可以继续安装,安装成功后可以查看对应的版本。显示版本信息就证明安装已经完成了。然后启动doer,将doer设置为开机自启动,查看运行状态。当出现这个绿色的字的时候,就表示它正在运行之中。
01:06
接下来需要对docker进行镜像加速,因为docker的镜像都是在海外,所以说访问会比较慢,这时候可以设置成国内的加速镜像,这里选择的是腾讯云的,完成之后重启相关服务,设置完成之后就可以进行体验,通过简单的命令就可以完成镜像的拉取和容器的创建。这里是拉取了njax镜像创建的容器,创建完成之后就可以直接运行。此时,通过IP就可以访问N杰克的默认页面,说明N杰克已经成功部署完毕。镜像与容器是docker的核心概念。通过刚才的操作,我们拉取了N杰克的镜像,这是一个只读的模板,基于这个镜像,我们创建了一个可以运行的N杰克的实例。由于docker的独立性,在面对表格这样的复杂的部署环境时,就可以通过拉取不同的镜像,比如说nja GP的不同版本和MYSQL数据库的不同版本分别创建对应的容器。在这里,为了演示,我们分别搭建两套环境。
02:06
第一套环境是njax+PHP7.4+MYSQL5.7。首先使用命令的方法将所需要的镜像全部拉取下来,拉取的速度跟网速有关。有些镜像比较大,只需耐心等待即可。使用该命令可以查看当前所有已拉取的镜像,可以看到有NX不同版本的PHP和不同版本的数据库。接下来按照文档里面的命令逐次执行。这些命令会依次创建数据库、PHP以及NJ的容器,并完成相关的配置。关于命令的详细参数、详细功能在稍后会进行介绍,输入该命令可以查看当前的容器。第一个N键克的是我们体验的时候创建的,而后面含有下划线杠A的这么一个名字是我们创建的第一个项目所包含的三个容器,这三个容器的数据是独立的,并且这一个N杰克斯与最开始的N杰克斯也是互不干扰的。
03:07
可以创建一个静态的文件和一个动态的PHP文件,分别测试一下容器是否能够正常使用。当访问静态文件的时候,会出现hello l n MMP下划线杠A,这表明静态文件也能够正常解析。当对PHP文件进行访问的时候,可以看到已经有一个PHP info, 它能够显示出当前PHP的信息,说明PHP的动态解析也能够实现了。同时也对数据库进行测试,建立一个新的数据库。测试一下数据库能否正常建立,并且在文件夹中能否显示对应的数据库文件。以同样的方式建立第二个项目所需要的各种环境的容器,并且对第二个项目也进行静态文件和PHP动态文件的访问以及数据库的测试。通过命令查看当前服务器已建立好的容器,会发现主要分为三组,第一组只有一个njax,是我们最开始体验的那个N杰克,第二组为下划线杠A的,是第一个项目的3个容器,第三组是下划线杠B的,是第二个项目的3个容器。这些容器之间都是相互独立,互不干扰。
04:12
我们使用8081的端口访问第一个项目的页面,使用8082的端口访问第二个项目的页面。在同一个服务器上就可以创建很多个容器。现在介绍一下这些命令的主要功能。第一个命令主要是建立各功能模块的目录,其中3W是放置程序和网页文件的,NG目录是放置NJ配置文件的,MYSL目录则是放置数据库文件的。第二个命令主要是用来建立一个网络,用于容器内部进行互相连接。接下来创建数据库的容器。杠D参数表示是后台运行,杠name参数用于给容器起一个名字,杠P参数是进行端口映射,是将宿主主机的端口映射到容器之中,也就是将33061映射到3306,杠V参数则是用于挂载,将主机目录挂载到容器之中,杠1参数用于设置环境变量,此处设计的是数据库root账号的密码。
05:07
接下来是创建PHP的容器,这里只需注意一个杠V参数,然后创建N杰config的配置文件,将内容复制至配置文件内。这里主要是实现njax能够正常解析PHP文件,所以要将PHP容器的名称填写在这里。接下来就是创建N杰克容器杠P参数的端口映射,将8081映射到80,也就是说这个容器可以通过8081的方式进行访问。杠V参数将网站的目录映射到主机内,就是3W,第二个杠V参数则是con菲文件的映射。接下来就是创建静态的HTML文件和动态的PHP文件进行测试,看能不能正常解析。这里是通过新建终端的方式连接到容器内部,该容器为数据库容器,通过命令行的方式创建一个数据库,然后进行测试,使用命令查看刚才创建的数据库是否存在,以及在文件夹中是否存在。项目B的创建方式也是相同的逻辑,此处就不再详细介绍了。通过这种方法确实能够创建很多互不干扰的容器,也能够搭建不同的项目,使用不同的环境。
06:18
但是命令过于繁琐,需要的配置太多,导致非常不利于维护,也不利于迁移。在面对这种情况下,我们通常使用另外一种解决方案,就是docker compose, 按照文档中的命令进行安装,安装完成后可以查看版本号信息,有正确的信息返回说明安装成功。接下来就是创建docker compose的核心配置文件,它可以将多个关联的容器定义在一个文件之中,避免手动输入复杂的命令。确保开发、测试生产环境的一致性,能够自动处理容器间的依赖关系以及快速启动和销毁整个应用,然后编写njas的confi配置文件。接下来,我们通过已经编写好的docker compose的配置文件,使用命令自动创建相关容器。
07:04
同样的,我们还是建立一个静态的HTML文件和一个动态的PHP文件,看看创建好的容器能否正常的解析,因为在配置文件之中已经创建好了一个数据库,通过命令在文件系统中也确实能够查看对应的数据库,说明数据库的建立也是正确的。这里是配置文件三个核心部分的介绍,重点关注的就是类似于杠V、杠P、杠E参数,也就是端口映射、文件映射和环境变量的设置。而通过这种方式建立的容器也可以很方便的重启。重启可以分为相对路径重器和绝对路径重启。通过命令查看服务器当前以建立的容器,可以看到以下划线C为结尾的容器已经创建并运行成功。最后进行迁移测试,只需将当前服务器上项目C的目录复制到其他服务器,输入启动命令即可一键拉取创建项目C所需要的容器,并且因为将目录也打包过去了,那么网站的文件和数据库的数据都依然存在。为了能够更好的测试数据迁移的完整性,我们通过终端的方式,先给项目C的数据库创建一些表和添加一些记录,然后迁移过去来查看数据是否完整。
08:17
当前命令行打开的是一台新的测试服务器,通过命令我们可以查看到已经将项目C的文件复制过来了,并且当前服务器上并没有安装任何的镜像和容器。通过命令启动docker compose文件,可以看到服务器已经自动开始拉取所需的镜像,自动创建所需的容器。在创建好之后,我们可以通过IP加端口的方式访问静态页面和动态页面,然后通过终端的方式进入到数据库容器中,也能够看到数据库表和记录都完整的保留了过来。通过这样的迁移方式,能够保证新旧服务器、程序、数据库所运行和环境完全一致。
09:03
本期教程到此结束。通过对比docker的两种使用方法可以看出,Docker composes的使用更为灵活方便,在日常使用中,推荐使用docker compose的方法来进行部署。
我来说两句