为了不污染物理机环境,一些环境我都用 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_LIMITMAX_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

其中:

之后可以在物理机访问 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

其中:

之后可以在物理机访问 localhost:9100 来使用 Elasticsearch 了。

Grafana

$ docker run -d \
  -p 8003:3000 \
  --link mysql:mysql \
  --link mongo:mongo \
  --name grafana \
  grafana/grafana

之后可以在物理机访问 localhost:8003 来使用 Grafana 了

1 条评论

  1. 您好~我是腾讯云开发者社区运营,关注了您分享的技术文章,觉得内容很棒,我们诚挚邀请您加入腾讯云自媒体分享计划。完整福利和申请地址请见:https://cloud.tencent.com/developer/support-plan
    作者申请此计划后将作者的文章进行搬迁同步到社区的专栏下,你只需要简单填写一下表单申请即可,我们会给作者提供包括流量、云服务器等,另外还有些周边礼物。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据