为了不污染物理机环境,一些环境我都用 docker 来跑。
在这里记录一下各种常用的数据库、平台的命令。
MySQL
$ docker run -d \
-p 3306:3306 \
-e MYSQL_ALLOW_EMPTY_PASSWORD=yes \
-v mysql-data:/var/lib/mysql \
--name mysql \
mysql
其中:
- 想要密码的话,将
MYSQL_ALLOW_EMPTY_PASSWORD=yes
改为MYSQL_ROOT_PASSWORD=123456
,然后进到创建的 container 里,修改一下数据库的访问权限,目的是为了让别的 container 或者物理机访问,而不仅仅是 container 里的 localhost。$ docker exec -it mysql /bin/bash $ mysql -u root -p Enter password: mysql> update mysql.user set host='%' where user='root'; mysql> flush privileges;
- 更多环境变量请参考 https://hub.docker.com/_/mysql
之后可以在物理机访问 127.0.0.1:3306
来使用 MySQL Server 了。
phpMyAdmin
$ docker run -d \
-p 8001:80 \
-e UPLOAD_LIMIT=128M \
-e MAX_EXECUTION_TIME=10000 \
--link mysql:db \
--name phpmyadmin \
phpmyadmin/phpmyadmin
其中:
--link mysql:db
里的mysql
为前面mysql
容器的名字name
UPLOAD_LIMIT
和MAX_EXECUTION_TIME
最好设置,要不然导入导出数据库可能会出现Incorrect format parameter
错误- 更多环境变量请参考 https://hub.docker.com/r/phpmyadmin/phpmyadmin/
之后可以在物理机访问 localhost:8001
来使用 phpMyAdmin 了。
MongoDB
$ docker run -d \
-p 27017:27017 \
-v mongo-data:/data/db \
-v mongo-config:/data/configdb \
--name mongo \
mongo
其中:
- 想要密码的话,加两句
-e MONGO_INITDB_ROOT_USERNAME=mongoadmin -e MONGO_INITDB_ROOT_PASSWORD=secret
- 需要挂载本地目录的话(为了 mongorestore/mongodump 数据)加上
-v /path/to/your/data:/mnt/data
,然后进到容器里恢复就行 - 更多环境变量请参考 https://hub.docker.com/_/mongo
之后可以在物理机访问 localhost:27017
来使用 MongoDB 了。
Mongo Express
$ docker run -d \
-p 8002:8081 \
--link mongo:mongo \
--name mongo-express \
mongo-express
其中:
--link mongo:db
里前面一个mongo
为前面mongo
容器的名字name
之后可以在物理机访问 localhost:8002
来使用 Mongo Express 了。
多节点集群
新建 mongo_setup.sh
#!/bin/bash
echo "Starting replica set initialize"
until mongo --host mongo1 --eval "print(\"waited for connection\")"
do
sleep 2
done
echo "Connection finished"
echo "Creating replica set"
mongo --host mongo1 <<EOF
var cfg = {
_id : 'rs0',
members: [
{ _id : 0, host : "mongo1:27017" },
{ _id : 1, host : "mongo2:27017" },
{ _id : 2, host : "mongo3:27017" }
]
};
rs.initiate(cfg, { force: true });
rs.reconfig(cfg, { force: true });
rs.slaveOk();
db.getMongo().setReadPref('nearest');
db.getMongo().setSlaveOk();
EOF
echo "replica set created"
新建 db.yml
version: '3'
services:
mongo1:
image: mongo
networks:
- alphanetwork
volumes:
- mongo-data:/data/db
- mongo-config:/data/configdb
ports:
- 30001:27017
entrypoint: [ "/usr/bin/mongod", "--bind_ip_all", "--replSet", "rs0" ]
mongo2:
image: mongo
networks:
- alphanetwork
ports:
- 30002:27017
entrypoint: [ "/usr/bin/mongod", "--bind_ip_all", "--replSet", "rs0" ]
mongo3:
image: mongo
networks:
- alphanetwork
ports:
- 30003:27017
entrypoint: [ "/usr/bin/mongod", "--bind_ip_all", "--replSet", "rs0" ]
mongosetup:
image: mongo
networks:
- alphanetwork
depends_on:
- mongo1
- mongo2
- mongo3
restart: "no"
volumes:
- .:/scripts
entrypoint: ["bash", "/scripts/mongo_setup.sh"]
mongo-express:
image: mongo-express
restart: always
networks:
- alphanetwork
depends_on:
- mongo1
- mongo2
- mongo3
- mongosetup
environment:
- ME_CONFIG_MONGODB_SERVER=mongo1,mongo2,mongo3
ports:
- 8002:8081
networks:
alphanetwork:
volumes:
mongo-data:
mongo-config:
运行 docker-compose -f db.yml up
。
之后可以在物理机访问 localhost:8002
来使用 Mongo Express 了。
Redis
$ docker run -d \
-p 6379:6379 \
-v redis-data:/data \
--name redis \
redis
其中:
- 更多环境变量请参考 https://hub.docker.com/_/redis
之后可以在物理机访问 localhost:6379
来使用 Redis 了。
Elasticsearch
$ docker run -d \
-p 9100:9100 -p 9200:9200 \
-e discovery.type=single-node \
-v es-data:/usr/share/elasticsearch/data \
-v es-log:/usr/share/elasticsearch/logs \
--name elasticsearch \
elasticsearch
其中:
- 镜像
elasticsearch
可以换为我做的镜像xalanq/elasticsearch-hanlp:7.5.1
,包含了中文分词 - 更多环境变量请参考 https://hub.docker.com/_/elasticsearch
之后可以在物理机访问 localhost:9100
来使用 Elasticsearch 了。
Grafana
$ docker run -d \
-p 8003:3000 \
--link mysql:mysql \
--link mongo:mongo \
--name grafana \
grafana/grafana
之后可以在物理机访问 localhost:8003
来使用 Grafana 了
版权属于: Alan Clarke's Blog
原文地址: https://blog.xalanq.com/docker-setup-platform-database-notes/
转载时必须以链接形式注明原始出处及本声明。
您好~我是腾讯云开发者社区运营,关注了您分享的技术文章,觉得内容很棒,我们诚挚邀请您加入腾讯云自媒体分享计划。完整福利和申请地址请见:https://cloud.tencent.com/developer/support-plan
作者申请此计划后将作者的文章进行搬迁同步到社区的专栏下,你只需要简单填写一下表单申请即可,我们会给作者提供包括流量、云服务器等,另外还有些周边礼物。
这篇文章写得深入浅出,让我这个小白也看懂了!