Docker构建和应用程序的DRY配置

时间:2017-01-30 18:20:43

标签: node.js mongodb docker docker-compose dockerfile

首先,这比我预期的要长得多,tl; dr;如何使用docker使我的配置DRY(我假设使用env变量)

我正在开发一个带有mongodb数据库的node.js服务器,我正在切换到docker(希望)简化我的环境并保持它对我的服务器一致。让我首先说,我绝对不了解整个码头 - 容器的生命周期,但我正在学习。经过大量的搜索后,我无法找到解决方案。我正在使用Docker for Windows和Hyper-V。 (docker version在底部)

所以,我希望能够配置

  • 数据库名称
  • 数据库用户
  • 数据库密码
  • 应用程序端口
  • 和其他一些事情

允许在多个地方使用这些配置值,包括

  • Docker构建阶段(设置数据库)
  • 节点应用程序(连接数据库)

能够设置数据库名称,用户和传递,一次并使用它来启动容器中的数据库,然后在容器旋转时连接到它的最佳方法是什么?

当前设置

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

version: "2"

services:
  myapp:
    image: node:boron
    volumes:
      - ./dist:/usr/src/app
    working_dir: /usr/src/app
    command: sh -c 'npm install; npm install -g nodemon; nodemon -e js app.js'
    ports:
      - "9021:9021"
    depends_on:
      - mongo
    networks:
      - all
  mongo:
    build: ./build/mongo
    networks:
      - all
networks:
  all:

Mongo Dockerfile(./ build / mongo / Dockerfile)

# 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

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

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");


docker version

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并正确执行此操作?

编辑:这似乎是"额外信用"题。 How to deal with persistent storage (e.g. databases) in docker

0 个答案:

没有答案