Node.js Docker构建和应用程序的干配置

Node.js Docker构建和应用程序的干配置,node.js,mongodb,docker,docker-compose,dockerfile,Node.js,Mongodb,Docker,Docker Compose,Dockerfile,首先,这篇文章比我想象的要长得多,tl;博士如何使用docker使配置干燥(我假设使用env变量) 我正在开发一个带有mongodb数据库的node.js服务器,我正在切换到docker,以(希望)简化我的环境并使其与我的服务器保持一致。让我首先说,我肯定不了解整个docker容器的生命周期,但我在不断学习。我无法找到一个解决方案,我试图做了很多搜索后。我正在将Docker for Windows与Hyper-V一起使用。(底部的Docker版本) 因此,我希望能够配置 数据库名称 数据库用户

首先,这篇文章比我想象的要长得多,tl;博士如何使用docker使配置干燥(我假设使用env变量)

我正在开发一个带有mongodb数据库的node.js服务器,我正在切换到docker,以(希望)简化我的环境并使其与我的服务器保持一致。让我首先说,我肯定不了解整个docker容器的生命周期,但我在不断学习。我无法找到一个解决方案,我试图做了很多搜索后。我正在将Docker for Windows与Hyper-V一起使用。(底部的
Docker版本

因此,我希望能够配置

  • 数据库名称
  • 数据库用户
  • 数据库密码
  • 应用程序端口
  • 还有其他一些事情
并允许在多个位置使用这些配置值,包括

  • Docker构建阶段(设置数据库)
  • 节点应用程序(用于连接到数据库)
最好的方法是什么,一次设置数据库名称、用户和密码,并使用它在容器中启动数据库,然后在容器启动时连接到数据库?

当前设置

目前我有一个docker compose文件,如下所示(./docker compose.yml)

Mongo Dockerfile(./build/Mongo/Dockerfile)

initDB.js脚本(./build/mongo/initDB.js)


docker版本

Client:
 Version:      1.13.0
 API version:  1.25
 Go version:   go1.7.3
 Git commit:   49bf474
 Built:        Tue Jan 17 21:19:34 2017
 OS/Arch:      windows/amd64

Server:
 Version:      1.13.0
 API version:  1.25 (minimum version 1.12)
 Go version:   go1.7.3
 Git commit:   49bf474
 Built:        Wed Jan 18 16:20:26 2017
 OS/Arch:      linux/amd64
 Experimental: true
额外学分 如何将数据库信息保存在容器外部以进行备份等,并查看文件?我是否需要将主机上的目录映射到容器中的data/db?我是否正确地这样做

编辑:这似乎是解决“额外学分”问题的好办法

# Image to make this from
FROM mongo:3

# Add files into the container for db setup
ADD initDB.js /tmp/
ADD createDBAdmin.js /tmp/
ADD mongod.conf /data/configdb

# Map the host directory mongo/myapp to /data
VOLUME /mongo/myapp:/data    

RUN ls /data/*

RUN mongod -f /data/configdb/mongod.conf && sleep 5 && mongo ${DB_NAME} /tmp/createDBAdmin.js && sleep 5 && mongo ${DB_NAME} /tmp/initDB.js


CMD mongod --smallfiles --storageEngine wiredTiger
db.createUser(
    {
      user: "${DB_USER}",
      pwd: "${DB_PASS}",
      roles: [
        { role: "dbOwner", db: "${DB_NAME}" }
      ]
    },
    {
      w: "majority",
      wtimeout: 5000
    }
);
// For some reason this is needed to save the user
db.createCollection("test");
Client:
 Version:      1.13.0
 API version:  1.25
 Go version:   go1.7.3
 Git commit:   49bf474
 Built:        Tue Jan 17 21:19:34 2017
 OS/Arch:      windows/amd64

Server:
 Version:      1.13.0
 API version:  1.25 (minimum version 1.12)
 Go version:   go1.7.3
 Git commit:   49bf474
 Built:        Wed Jan 18 16:20:26 2017
 OS/Arch:      linux/amd64
 Experimental: true