docker-compose可以一次性开启多个docker实例,这一点比Dockerfile来构建docker容器要方便的多。docker-compose的重点是对yml文件的配置。yml文件的配置需要注意的是严格控制缩进。

    需要说明的一点是docker-compose命令并不是随着docker安装一起安装的,他需要额外的安装,如果没有安装,可以在github上下载对应系统的版本:https://github.com/docker/compose/。如果是linux系统,下载解压后将可执行命令docker-compose放入/usr/bin目录并赋予可执行的属性:chmod +x /usr/bin/docker-compose。

    mongodb容器构建其实很简单,就是需要指定镜像来源,如果需要开启认证,需要配置环境变量MONGO_INITDB_ROOT_USERNAME和MONGO_INITDB_ROOT_PASSWORD。一般我们希望对镜像中的磁盘做外部映射,这样即使容器退出了,下次启动,容器中保留的数据不会丢失。

    下面给出mongodb的docker-compose配置。

    docker-compose-mongodb.yml

version: '3'
services:
  mongodb:
    image: mongo:latest
    restart: always
    volumes:
      - /data/mongo/db:/data/db
      - /data/mongo/log:/var/log/mongodb
    ports:
      - 27018:27017
    environment:
      MONGO_INITDB_ROOT_USERNAME: admin
      MONGO_INITDB_ROOT_PASSWORD: admin

    这里给出的端口映射将容器中的27017映射为了27018,因为本机安装了mongodb,这里为了避免端口占用冲突,所以将它用了27018。 

    我们要启动容器,需要先准备文件夹/data/mongo/db以及/data/mongo/log。

    在配置文件所在目录,我们执行这样的命令就可以启动容器。

    # docker-compose -f docker-compose-mongodb.yml up -d

    如果本地镜像列表中不存在mongo:latest,那么会从远程仓库拉取,会耗费一些时间。

    这样的启动,我们默认使用了admin用户和admin密码做初始认证用户和密码。一般在使用中,我们会创建一个用户,但是创建用户需要注意的是,我们需要切换到admin数据库下use admin,然后认证db.auth("admin","admin"),返回1,表示认证成功。接着,我们需要创建一个用户给一个数据库使用,这时候我们还需要切换到别的数据库下,比如mec,切换命令为use mec。这时候我们通过命令 db.createUser({user:'hadoop',pwd:'123456',roles:[{role:'dbOwner',db:'mec'}]}) 创建hadoop用户并指定密码。

    以上创建新用户必须要注意切换到用户所管理的数据库上。否则当我们使用的时候,可能会报错,默认不切换,我们创建的用户是管理的admin数据库。