DRYconfigurationDocker构build和应用程序
首先,这比我想象的要长得多,tl; dr; 我怎样才能让我的configurationDRY与docker(我假设与环境variables)
我正在开发一个mongodb数据库的node.js服务器,我正在切换到docker(希望)简化我的环境,并保持我的服务器一致。 让我开始说,我绝对不了解整个docker – 集装箱生命周期,但我正在学习。 经过大量的search后,我找不到解决scheme。 我正在使用适用于Windows的Docker和Hyper-V。 ( docker version
在底部)
所以,我想能够configuration
- 数据库名称
- 数据库用户
- 数据库密码
- 应用端口
- 和其他一些事情
并允许这些configuration的值在几个地方使用,包括
- Docker构build阶段(设置数据库)
- 节点应用程序(连接到数据库)
什么是能够设置数据库名称,用户和传递一次,并使用它来启动容器中的数据库,然后连接到它,每当容器被启动的最佳方式是什么?
当前设置
目前我有一个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
额外的积分如何在容器外持续保存数据库信息以备用途等,并查看文件? 我需要将我的主机上的一个目录映射到容器中的数据/数据库,我是否正确地做到这一点?
编辑:这似乎是一个很好的解决scheme,“额外信贷”的问题。 如何处理docker中的永久性存储(例如数据库)