使用docker搭建测试环境

使用docker搭建测试环境:

  • 日常开发中经常需要用到各种软件数据库等,在此使用docker来搭建,省时省力,还方便。
  • 在此主要介绍使用docker来搭建mysql、redis、mongodb、es。同时推荐一款简洁好用的docker可视化工具 Portainer。

可视化工具推荐

  • 参考链接:Docker可视化工具Portainer
  • 在此推荐一个docker的可视化软件,可以方便查看docker的镜像、容器等信息。
    使用时截图如下:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    同样是使用docker来搭建的:
# 创建一个挂载卷
docker volume create portainer_data

# 直接后台运行
docker run -d -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

然后直接通过 http://ip:9000 访问即可。在此不做赘述,有兴趣可以参考链接。

搭建mysql

  • 首先创建配置文件和数据文件的挂载目录,我个人喜欢使用docker的volume来创建,比较好管理。
docker volume create mysql_cnf
docker volume create mysql_data

ps: 我们可以在可视化的界面中看到这两个挂载卷。

  • 下面就是直接运行容器的命令了:
docker run -d \
--name mysql \
-p 3306:3306 \
-v mysql_cnf:/etc/mysql/conf.d \
-v mysql_data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.7
  • 命令介绍:
-d:以后台的方式运行;
--name mysql:指定容器的名称为 mysql;
-p 3306:3306 将容器的 3306 端口挂载到宿主机的 3306 端口上;
-e MYSQL_ROOT_PASSWORD=123456:指定 root 的密码为 123456
  • 那么到目前为止我们已经可以连接这个数据库了,掏出你的连接工具测试一下吧。

ps: 可以通过docker ps 查看容器是否运行。docker logs containerId 可查看容器的运行日志。

搭建redis:

  • 创建配置文件和数据文件的挂载卷:
docker volume create redis_conf
docker volume create redis_data
  • 直接命令后台运行:
docker run -d \
-p 6379:6379 \
--name redis \
-v redis_conf:/etc/redis/redis.conf \
-v redis_data:/data \
redis:alpine \
redis-server \
/etc/redis/redis.conf --appendonly yes
  • 命令解释:
-p 6379:6379: 将容器的 6379 端口映射到宿主机的 6379 端口;
-v redis_data:/data : 将容器中的 /data 数据存储目录, 挂载到宿主机中挂载卷下;
-v redis_conf:/etc/redis/redis.conf : 将容器中 /etc/redis/redis.conf 配置文件,挂载到宿主机器挂载卷下;
redis-server --appendonly yes: 在容器执行 redis-server 启动命令,并打开 redis 持久化配置;
  • 运行客户端:
docker run -it redis:alpine redis-cli -h 172.17.0.1

搭建mongodb:

  • 本地挂载卷创建:
docker volume create mongo_conf
docker volume create mongo_data
  • 直接运行:
docker run -d \
--name mongo \
-v mongo_conf:/data/configdb \
-v mongo_data:/data/db \
-p 27017:27017 \
mongo:4 \
--auth
  • 进入容器内部添加管理员的账号:
docker exec -it mongo mongo admin
  • 然后,创建一个拥有最高权限 root 账号:
db.createUser({ user: 'admin', pwd: '123456', roles: [{ role: "root", db: "admin" }]});

在这里插入图片描述

  • 使用新建的root账户连接测试一下:
docker run -it --rm --link mongo:mongo mongo:4 mongo -u admin -p 123456 --authenticationDatabase admin mongo/admin
  • 获取到所有的数据库、切换数据库:
show dbs
use admin

在这里插入图片描述

直接输入 exit 即可退出容器。

搭建es:

  • 直接运行下面的命令 来创建一个临时的es:
docker run -d \
--name es \
-p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node"\
elasticsearch:6.5.0
  • 命令介绍:
-d:以后台的方式运行;
--name es:指定容器的名称为 es;
-p 9200:9200 -p 9300:9300 将容器的 9200、9300 端口挂载到宿主机的 9200、9300 端口上;
-e "discovery.type=single-node"指定为单节点模式,
  • 可以通过docker ps 查看容器是否运行成功。
    在这里插入图片描述

此时我们虽然执行成功了,but,和上面相比我们并没有将数据挂载到宿主机,容器一旦删除我们的文件就么得了。下面我们就需要将文件保存到宿主机了。

  • 创建挂载点:
docker volume create es_config
docker volume create es_data
docker volume create es_plugins
  • 挂载点中没有文件怎么办呢? 我们将临时es中的文件复制到我们的挂载点当中,至于挂载点的具体位置可以在可视化界面中看得到。

在这里插入图片描述

# 复制 es 配置文件目录到宿主机指定目录,目标目录你可以根据需要,自行修改
docker cp es:/usr/share/elasticsearch/config /var/lib/docker/volumes/es_config/_data
# 复制 es 持久化数据目录到宿主机指定目录
docker cp es:/usr/share/elasticsearch/data /var/lib/docker/volumes/es_data/_data
# 复制 es 插件目录到宿主机指定目录
docker cp es:/usr/share/elasticsearch/plugins /var/lib/docker/volumes/es_plugins/_data
  • 复制完之后呢,我们可能需要修改一下配置文件,
  • eg:我们修改一下允许跨域访问,以便后面使用 head 插件图形化界面访问。
  • 打开宿主机的 /var/lib/docker/volumes/es_config/_data 修改其中的 elasticsearch.yml文件 添加配置:
http.cors.enabled: true
http.cors.allow-origin: "*"
  • 配置完毕之后呢,就可以将临时的es删除掉了,(注意由于我使用过的容器名称和临时容器名称一致,如果此处不删除容器,只是停止的话,需要稍微修改一下)
docker container stop containerId
docker container rm containerId
  • 最终的运行容器命令:
docker run -d \
--name es \
-p 9200:9200 -p 9300:9300 \
-v es_config:/usr/share/elasticsearch/config \
-v es_data:/usr/share/elasticsearch/data \
-v es_plugins:/usr/share/elasticsearch/plugins \
elasticsearch:6.5.0 
  • 通过docker ps 来查看是否执行成功 或者直接在浏览器中访问 http://ip:9200
搭建es出错及解决:
  • ps: 我在配置es时碰到了两个问题:(容器运行不成功可以通过 docker logs containerId 来查看日志)
    1. 提示 配置文件中的jvm.options无法找到
  • 这是由于没有权限的原因,直接切换到宿主机的文件夹下 chmod 755 jvm.options 即可解决。
    1. 提示 max virtual memory areas vm.max_map_count [65530] is too low

在这里插入图片描述

  • 使用下面命令解决:
  • vi /etc/sysctl.conf
  • 添加 一行 vm.max_map_count=655360
  • 加载参数
  • sysctl -p
安装中文分词插件:

直接进入到容器内部,执行安装命令:

docker exec -it es /bin/bash
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.5.0/elasticsearch-analysis-ik-6.5.0.zip
  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值