docker pull mongodb/mongodb-community-server
docker run -v db-data:/mongo -d -p 27017:27017 --name mongo mongodb/mongodb-community-server:5.0.17-ubuntu2004
27017:27017
: 포트 포워딩 설정
-v data:/db/mysql
: /var/lib/docker/volumes/ 경로 안에 data 디렉토리가 생긴다.
- sudo ls /var/lib/docker
- sudo su
✔ container 접근
docker exec -it mongo mongosh
✔ 테스트
> db.runCommand(
{
hello: 1
}
)
✔ 정상적인 출력값
{
isWritablePrimary: true,
topologyVersion: {
processId: ObjectId("63c00e27195285e827d48908"),
counter: Long("0")
},
maxBsonObjectSize: 16777216,
maxMessageSizeBytes: 48000000,
maxWriteBatchSize: 100000,
localTime: ISODate("2023-01-12T16:51:10.132Z"),
logicalSessionTimeoutMinutes: 30,
connectionId: 18,
minWireVersion: 0,
maxWireVersion: 20,
readOnly: false,
ok: 1
}
# mongod.conf
# ...
net:
port: 27017
bindIp: 0.0.0.0
# ...
security:
authorization: 'enabled'
# ...
docker container 내부에서 파일을 수정할려면 권한이 필요한데 sudo 명령어를 인식하지 못한다.
container 외부에서 mongod.conf 파일을 만들어서 container 내부의 conf 파일을 덮어쓴다.
✔ mongod.conf 파일 생성 아래 내용 추가
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# Where and how to store data.
storage:
dbPath: /var/lib/mongodb
journal:
enabled: true
# engine:
# wiredTiger:
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
# network interfaces
net:
port: 27017
bindIp: 0.0.0.0
# how the process runs
processManagement:
timeZoneInfo: /usr/share/zoneinfo
security:
authorization: 'enabled'
#operationProfiling:
#replication:
#sharding:
## Enterprise-Only Options:
#auditLog:
#snmp:
✔ mongo container 내부로 복사한다.
docker cp mongo.conf mongo:/etc/mongod.conf.orig
✔ 정상적으로 내용이 덮어쓰였는지 확인
docker exec -it mongo /bin/bash
cat etc/mongod.conf.orig
✔ container 외부에서 해당 명령어 입력
sudo ufw allow 27017
✔ 포트 허용 확인
sudo ufw status
docker exec -it mongo /bin/bash
> mongo # 첫 접근 시에는 mongo만 입력해도 된다.
> show databases;
admin 0.000GB
config 0.000GB
local 0.000GB
> use admin;
switched to db admin
> db;
admin
> db.createUser({user: "아이디", pwd: "비밀번호", roles:["root"]});
exit;
다시 mongo
명령어로 mongosh 접근할려고 하면 에러 발생한다.
# mongo -> 에러 발생(인증되지 않는 사용자 접근 불가)
# 아래와 같이 명령어를 입력해야 한다.
> mongo -u 아이디 -p 비밀번호
> use test;
> db;
test
> db.createUser({user: "testuser", pwd:"testuser", roles:["readWrite"]});
Successfully added user: { "user" : "testuser", "roles" : [ "readWrite" ] }
> db.getUsers();