首先,这比我预期的要长得多,tl; dr;如何使用docker使我的配置DRY(我假设使用env变量)
我正在开发一个带有mongodb数据库的node.js服务器,我正在切换到docker(希望)简化我的环境并保持它对我的服务器一致。让我首先说,我绝对不了解整个码头 - 容器的生命周期,但我正在学习。经过大量的搜索后,我无法找到解决方案。我正在使用Docker for Windows和Hyper-V。 (docker version
在底部)
所以,我希望能够配置
允许在多个地方使用这些配置值,包括
能够设置数据库名称,用户和传递,一次并使用它来启动容器中的数据库,然后在容器旋转时连接到它的最佳方法是什么?
当前设置
目前我有一个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