使用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 来查看日志)
-
- 提示 配置文件中的jvm.options无法找到
- 这是由于没有权限的原因,直接切换到宿主机的文件夹下 chmod 755 jvm.options 即可解决。
-
- 提示 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