如何搭建测试环境--利用docker部署web项目

前言:再看本文章之前需要大概理解docker的技术原理与基本概念,我认为上手之前这些内容并不是很重要,所以这里就不在赘述,为什么说不重要呢?其实刚接触docker的同学可能对概念什么的并不是很理解,往往官方晦涩难懂的解释并不会给自己对docker的认识有多大的提高,我的建议还是从实践中出发,先试着从简单的出发,例如自己学会安装镜像文件与挂载容器,最后自己再试着部署一个web项目;等web项目部署好之后,我相信您会对docker已经产生了自己的概念,这个时候再回去看docker的基本概念与技术原理的时候就会简单许多。其实在任何技术上不要幻想看一遍技术原理就会搞懂该技术,任何技术都需要亲手去实践,每一次的实践都会对该项技术有新的认识,每一次新的认识又会对自己的技术做出补充,这样互补的过程其实就是技术提高的过程,废话不多说,直接上手怎么去玩个web项目吧。

一、准备工作

搭建测试环境最不可少的可能就是服务器了,这个时候可能您要去协调个测试服务器过来给自己练手了,如果搞不到服务器,备选方案就是在自己电脑上搞个虚拟机了,具体教程请参考别的文章;

这里我搞到两台机器,并与开发确认当前正在运行的项目已经安装的软件版本以及自己需要安装哪些东西:

如何搭建测试环境--利用docker部署web项目

比较尴尬的是后面才发现安装的这些东西都没有用到 ,因为都是用的同一套的数据库等,所以后面部署就简单许多,但是上述软件及插件的安装还是要介绍一下

二、基础命令

  • 查询镜像文件:docker search +镜像名
  • 拉取镜像文件:docker pull +镜像名
  • 查看已载镜像:docker images
  • 创建并运行容器:docker run --name +自定义name -p +映射端口 -d +原镜像文件
  • 查看容器:docker ps -a
  • 停止容器运行:docker stop +镜像名(或镜像ID)
  • 删除容器:docker rm +镜像名(或镜像ID)
  • 进入容器:docker exec -it +镜像id /bin/bash
  • 查看容器挂载位置:docker inspect be7dc5b882af(镜像ID)
  • 启动容器:docker start +镜像名(或镜像ID)
  • 重启容器:docker restart +镜像名(或镜像ID)
  • 挂载:docker run --name cdy -p 8081:8081 -v $PWD/test:/usr/local/tomcat/webapps/test -d tomcat
  • 这里写的并不多,只写了本篇文章需要用到的命令;
  • 启动一个服务(防火墙):systemctl start firewalld.service
  • 关闭一个服务(防火墙):systemctl stop firewalld.service
  • 重启一个服务(防火墙):systemctl restart firewalld.service

三、软件安装

mysql

  • 运行mysql容器:docker run --name cmysql -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
  • 进入mysql终端:docker exec -it 7681b85e73a1 /bin/sh
  • 登录数据库(输入密码):mysql -uroot -p
  • 修改远程权限(可以通过任何客户端连接):ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123123';

redis

  • 运行redis容器(redis启动的默认端口号是6379,这个时候宿主机使用6380进行映射,并设置授权密码“caicai”):docker run --name c-redis -p 6380:6379 -d redis --requirepass "caicai"
  • redis客户端连接命令:docker exec -it 镜像ID redis-cli
  • 输入密码:auth caicai
  • 输入用户名:set name caidy
  • 退出:quit
  • 外部程序连接此容器的redis时地址为:宿主机IP+6380(宿主机映射IP)

mongo

  • 运行mongo容器:docker run --name some-mongo -p 27017:27017 -d mongo --auth
  • 进入容器:docker exec -it 8fe134f471c5 /bin/bash
  • admin登录mongo
  • use admin
  • 分配角色:db.createUser({user:"root",pwd:"root",roles:[{role:'root',db:'admin'}]})
  • 角色登录:db.auth("root":"root")

activemq

  • 拉取最新镜像文件:docker pull webcenter/activemq
  • 61616是activemq的容器使用端口(映射为61617)8161是web管理端口(对外映射8162)docker run -d --name cdyactivemq -p 61617:61616 -p 8162:8161 webcenter/activemq
  • 登录界面:http://**.**.**.**:8162/admin/

rocketmq

  • 启动 rocketmq server 容器:docker run -d -p 9876:9876 --name rmqserver foxiswho/rocketmq:server
  • 启动 rocketmq broker 容器:docker run -d -p 10911:10911 -p 10909:10909 --name rmqbroker --link rmqserver:namesrv -e "NAMESRV_ADDR=namesrv:9876" -e "JAVA_OPTS=-Duser.home=/opt" -e "JAVA_OPT_EXT=-server -Xms128m -Xmx128m -Xmn128m" foxiswho/rocketmq:broker
  • 启动 rocketmq console 容器:docker run --name rmqconsole -p 8180:8080 --link rmqserver:namesrv -e "JAVA_OPTS=-Drocketmq.namesrv.addr=namesrv:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" -t styletang/rocketmq-console-ng 
  • 访问主机ip(必须先启动rocketmq console):http://**.**.**.**:8180
     

备注:

       如何搭建测试环境--利用docker部署web项目

  • docker的linux系统不支持vim命令,进入容器后需要执行以下命令:
    apt-get update 
    apt-get install vim 
  • 直接执行第二条命令会报错

    如何搭建测试环境--利用docker部署web项目
    这个时候需要update ,但update时会失败(默认地址是海外的),这个时候要修改编辑器的默认下载源或载入nginx代理
  • 由于使用的secureCRT没有找到设置下载源的地方,于是先使用nginx代理再去执行第一步,下载镜像并创建代理容器
  • 执行apt-get install vim ,成功
  • 测试环境zookeeper:118.178.190.126:2181
  • 打开软件zktools:/zktools/bin/java-start--可以查看节点内容更新

四、web项目部署 

  • 下载项目代码保存为dsp.war文件
  • 上传本地文件至宿主机
  • 这里我用的是SecureCRT连接,不同的软件有不同的上传设置,这个自己摸索
  • 如何搭建测试环境--利用docker部署web项目
  • 自定义文件存储目录:/usr/local/mydir/
  • secureCRT中设置上传地址为/usr/local/mydir/
  • 执行上传命令:rz
  • 拷贝宿主机文件至tomcat容器内指定文件夹
  • 命令:docker cp /root/ROOT.war d9cb49dcd114:/usr/local/tomcat/webapps/
  • 使用以上命令将两个war包分别放入下图两个容器中:
  • 如何搭建测试环境--利用docker部署web项目
  • 重启容器
     

这个时候我们就把war包放到指定的文件夹下了,这里注意一点,若文件名不是ROOT,这输入地址的时候要加上指定的文件夹名称,否则会路径出错;

 项目地址:服务器地址+端口或者服务器地址+文件夹名称+端口号

总结:

部署web项目的方式有很多,我这里只是讲了一种最基本的方法供参考,只要自己学会其中一种方式再做延伸来完善项目,简便项目部署的步骤;可能本篇文章写得并不是很详细,适用范围也不是很广,也只是自己再搭建测试环境时的笔记而已,抽空会完善本篇文章,改造成docker部署的教程篇。有什么问题可以一起探讨;