目录
一.相关学习
了解容器技术发展、特点,搭建容器环境并部署应用:
1、阅读Docker官方文档,了解特性和基本概念
2、搭建Dcoker环境,掌握Dcoker常用命令
3、安装Dcoker-compose,理解作用,掌握语法
4、利用docker-compose进行应用编排,自行选择应用进行部署
二.部署过程
1.阅读Docker官方文档,了解特性和基本概念
打开浏览器,输入https://docs.docker.com/,进入docs官方文档,可以查看到很多关于docker的信息,在这里,我们可以知道如何docker如何安装,docker是什么,最近的更新等等。
2.搭建Dcoker环境,掌握Dcoker常用命令
通过网络上广泛的学习,了解到Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源。Docker可以让开发者打包应用程序以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。它与传统虚拟机技术的区别是:传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。下附图就能看出来:
下面我们就根据这个文档对docker进行安装和部署:首先更新一下软件列表,先设置下软件源,为国内阿里云,然后开始下载docker引擎:
然后启动docker查看版本,可以看到版本是最新的:
然后开始测试,输入命令:docker run hello-world,这个步骤在下面可以清晰的看出:
执行流程如下:
这里呢,我们的docker就安装完成了,下面通过命令:docker images查看运行启动的容器。
3.安装Dcoker-compose,理解作用,掌握语法
Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
通过在终端输入:docker-compose --help,可以查看到很多相关的命令:
下面,我们就尝试安装docker-compose:
4.利用docker-compose进行应用编排,对hustoj进行部署
下面我们通过docker-compose来部署和运行hustoj,hustoj是一个开源oj系统,在gethub上可以查到这个项目:
Docker-compose的难点在于yml文件的编写,我们在github上可以看到基于docker的安装:
点击之后,我们可以找到基于docker安装的分布式:
我们可以根据这个来写我们的docker-compose的yml文件,通过图中不难得知,部署hustoj需要mysql服务和web服务,对于判题系统judge的话,已经集成所以我们不用处理,这样我们就可以得到初步编写的yml文件了:
这个写完之后,我们就可以尝试提起我们的hustoj了,通过一条命令:docker-compose build,然后发现了报错:
通过报错信息得知,是版本号的原因,可能这个不支持3.0版本,那我们就改为2.0版本。
再次尝试build,我们发现db和web使用的image skipping,这是因为linux文件系统为联合文件系统,所以下载过后不会再重复下,我们发现,好像没有什么问题:
开始创建:
启动完成之后,我们可以通过命令:docker ps查看正在运行的容器,但是我们发现,mysql的状态是restarting,在一直重启,为了查明原因,我们尝试查看日志:
输入docker logs [容器id],可以查看到,是我们yml文件配置中缺少语句。
于是我们尝试添加这条语句,赋值为root:
修改完之后,我们先down一下,输入以下命令:docker-compose down,然后再启动,输入命令:docker-compose up -d,-d是后台运行,然后我们再次查询,看到mysql容器状态正常:
这个时候,我们就可以在浏览器输入网址,打开,开始注册,发现注册后,登陆不成功,意识到还是数据库的原因,于是就开始自己手动导入数据库和表:
尝试手动加数据,在github上找到sql表文件的目录,找到并复制到我们的ubuntu的根目录下,修改名称我们自己设置的judge。
在我们ubuntu终端下载一个mysql-client,手动将这个表导入到里面:
然后将db.sql文件拷贝到我们mysql容器根目录下,使用命令:cp db.sql [容器id]😕 ,然后进入,使用命令:docker exec -it [容器id] /bin/bash:
开始导入使用source命令:
导入成功之后,查看表单,可以看到以下内容,其中users是用户表,privilege是管理员表:导入成功之后,查看表单,可以看到以下内容,其中users是用户表,privilege是管理员表:
我们在浏览器创建用户,用户名为admin,密码为admin123,之后去终端查询,发现可以查到这条记录:
发现创建的是一个普通用户,要添加管理员权限的话,需要在privilege表下添加数据:
这样我们的管理员就添加成功了,我们可以在浏览器端看到:
我们点击进入进行管理,尝试添加一些acm试题,先在官网查询到免费题库地址,然后我们手动下载到我们的根目录:
然后发现导入失败,原因是文件太大,我们要修改下php上传文件的大小限制。于是我们在终端开始搜索这个文件:
vim编译器下载后,开始对php.ini文件进行编辑:
这个时候我们再此添加题目,发现可以添加了,然后去题库可以查询到这几道题目,也可以查到题目来源、描述、输入输出等等。
至此,关于使用docker-compose部署hustoj的步骤就基本结束了,希望对读者有些启发。