0%

Docker运行数据库容器记录

Docker运行mongodb容器

思路是把mongodb跑在Docker的容器中,但把数据以及备份映射到主机中,以便容器的随时调整。在/var/lib目录下新建mongodb目录,并进入mongodb目录新建data以及backup目录。运行以下命令启动容器,并进入到容器中运行mongodb的交互命令。

1
2
3
docker run --name mongo -p 27017:27017 -v /var/lib/mongodb/data:/data/db -v /var/lib/mongodb/backup:/data/backup -d mongo --auth

docker exec -it mongo mongo admin

创建mongodb的管理员账户,并使用刚创建的管理员身份进行认证。新建数据库,然后为新建的数据库新建登录用户的身份就OK啦。

1
2
3
4
> db.createUser({ user: 'admin', pwd: 'XXXXXXXX', roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] });
> db.auth("admin", "XXXXXXXX")
> use ebdb_smartsys
> db.createUser({user:"smartsys",pwd:"XXXXXXXX",roles:["readWrite"]});

在运行一段时间以后,我们可以执行如下命令进行数据库备份:(还未测试)

1
docker exec mongo sh -c 'var=`date +%Y%m%d%H%M` && mongodump -h localhost --port 27017 -u admin -p XXXXXXXX -d smartsys -o /data/backup/${var}_test1.dat'

Docker运行MySQL容器

也是先在/var/lib目录新建两个confdata目录进行数据的存储。然后运行容器吧~

1
docker run --name mysql -p 3306:3306 -v /var/lib/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=XXXXXXXX -d mysql

以上命令设置了MySQLroot用户的密码,接下来使用root身份登录进MySQL中,去创建数据库以及相应的用户,并分配权限。

1
2
3
4
5
6
docker exec -it mysql mysql -uroot -p

mysql> create schema ebdb_smartsys default character set utf8 collate utf8_general_ci;
mysql> create user 'smartsys'@'%' identified by 'XXXXXXXX';
mysql> grant select,insert,update,delete,create on ebdb_smartsys.* to smartsys;
mysql> flush privileges;

执行如下命令进行数据库备份:(还未测试)

1
2
DATE=$(date +%Y%m%d)
docker exec mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /mnt/mysql/backup/mysql$DATE.sql

Docker运行Redis容器

先从http://download.redis.io/redis-stable/redis.conf下载官方的配置文件,并把其中的

1
2
3
# bind 127.0.0.1

# requirepass foobared

#去掉,分别表示允许非本地的访问,以及启用密码。这个密码必须足够长,因为Redis的访问速度非常快,外部用户一秒内可以尝试多大150K个密码。还是新建/var/lib/redis/conf/var/lib/redis/data目录,并把修改后的配置文件放到/var/lib/redis/conf目录中去。然后就可以启动Redis的容器了。

1
docker run --name redis -v /var/lib/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf -v /var/lib/redis/data:/data -p 6379:6379 -d redis redis-server /usr/local/etc/redis/redis.conf --appendonly yes

进入容器运行命令,会发现是需要密码的。

1
2
3
4
5
6
7
8
9
docker exec -it redis redis-cli

127.0.0.1:6379> CONFIG GET requirepass
(error) NOAUTH Authentication required.
127.0.0.1:6379> auth XXXXXXXX
OK
127.0.0.1:6379> CONFIG GET requirepass
1) "requirepass"
2) "XXXXXXXX"