docker: mongodb
image
terminal
docker pull mongo
localhost:27017でDBに接続する場合
docker
terminal
# launch
docker run --name mongodb -p 27017:27017 -v `pwd`/db:/data/db -d mongo
# stop
docker rm -f mongodb
# shell
docker exec -it mongodb mongo
docker-compose
docker-compose.yml
version: '3.8'
services:
db:
image: mongo
container_name: mongodb
ports:
- 27017:27017
volumes:
- ./db:/data/db
terminal
# launch
docker-compose up
# stop
docker-compose down
他のdockerコンテナから直接アクセスする場合
例、dockerコンテナで動くnode.jsアプリ(localhost:3000でアクセス)から、mongodbに、mongodb://db:27017
でアクセスする
docker-compose
docker-compose.yml
version: '3.8'
services:
web:
image: node:alpine
working_dir: /home/node/app
volumes:
- ./:/home/node/app
ports:
- 3000:3000
command: ash -c "npm run build && npm start"
db:
image: mongo #portsの指定は不要.
volumes:
- ./db:/data/db
terminal
# launch
docker-compose up
# stop
docker-compose down
サンプルコード.ts
import { MongoClient, Collection } from 'mongodb'
const URL = 'mongodb://db:27017'
const NAME = 'mongodb'
export async function insertDocument(collectionName: string, document: object) {
await crudCollection(
collectionName,
async (collection) => await collection.insertOne(document)
)
}
export async function findDocuments(
collectionName: string,
filter: object
): Promise<any[]> {
return await crudCollection(
collectionName,
async (collection) => await collection.find(filter).toArray()
)
}
export async function updateDocument(
collectionName: string,
filter: object,
newDocument: object
) {
await crudCollection(
collectionName,
async (collection) =>
await collection.updateOne(filter, { $set: newDocument })
)
}
export async function deleteDocument(collectionName: string, filter: object) {
await crudCollection(
collectionName,
async (collection) => await collection.deleteOne(filter)
)
}
/**
* @private
*/
async function crudCollection(
collectionName: string,
method: (collection: Collection<any>) => Promise<any>
) {
let client: MongoClient
try {
client = await MongoClient.connect(URL, { useNewUrlParser: true })
const collection = client.db(NAME).collection(collectionName)
return await method(collection)
} finally {
client.close()
}
}
Author And Source
この問題について(docker: mongodb), 我々は、より多くの情報をここで見つけました https://qiita.com/pus/items/907d3f717fd50e8cf151著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .