用 Docker 运行数据库
MySQL
MySQL 是最流行的开源关系型数据库。
下载
下载最常用的 5.7 版本:
root@server4 ~]$ docker search --filter=is-official=true mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 11582 [OK]
[root@server4 ~]$ docker pull mysql:5.7.28
MySQL 服务中主要使用的目录如下:
路径 | 说明 |
---|---|
/etc/mysql/conf.d/ | MySQL 配置文件目录。 |
/var/lib/mysql/ | MySQL 数据文件目录。 |
/var/log/mysql/ | MySQL 日志文件目录。 |
MySQL 服务使用的端口如下:
端口 | 说明 |
---|---|
3306 | 服务端口 |
配置
启动一个随机的 MySQL 容器,将配置目录复制出来:
[root@server4 ~]$ docker run --name tempm -d -e MYSQL_ALLOW_EMPTY_PASSWORD=1 mysql:5.7.28
bcf418aec03085c97aeb4336b6cecbb4157dfcaa2f9affbc1a4b64f47a93ca12
[root@server4 ~]$ mkdir -p mysql
[root@server4 ~]$ docker cp -a tempm:/etc/mysql/conf.d mysql/conf.d
[root@server4 ~]$ docker rm -f tempm
配置文件 mysql.cnf
内容参考如下:
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
log-error = /var/log/mysql/error.log
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
symbolic-links=0
lower_case_table_names=1
max_allowed_packet = 32M
interactive_timeout = 120
wait_timeout = 120
innodb_flush_log_at_trx_commit = 0
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
server-id=100
log-bin=/var/log/mysql/mysql-bin
skip_ssl
# disable_ssl
expire_logs_days = 4
slow_query_log = ON
slow_query_log_file = /var/log/mysql/slow_query.log
long_query_time = 5
query_cache_limit = 10M
query_cache_min_res_unit = 4096
query_cache_size = 1G
query_cache_type = 1
query_cache_wlock_invalidate = 0
log_bin_trust_function_creators = 1
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
启动
修改好配置文件后,挂载目录和映射端口启动:
[root@server4 ~]$ docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=mysqlpass -p 3306:3306 -v mysql/conf.d:/etc/mysql/conf.d:ro -v mysql/data:/var/lib/mysql mysql:5.7.28
903380791a9ce92461c76fe794b51296312cd685d2cf761bd85fe07d0d86bb2d
[root@server4 ~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
903380791a9c mysql "docker-entrypoint.s…" 11 seconds ago Up 10 seconds 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql
使用 Docker-Compose 启动的配置文件参考如下:
version: '3.9'
services:
mysql:
image: mysql:5.7.28
container_name: mysql
restart: always
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=QeqAr:%R+s5:pYnr
volumes:
- ./config/mysql.cnf:/etc/mysql/conf.d/mysql.cnf
- ./data:/var/lib/mysql
- ./log:/var/log/mysql
注意,日志目录 log
要手动配置属主和数组,否则会启动报错:
root@k8s-204:~/mysql$ chown lxd:docker log
使用
可以使用 MySQL 镜像作为客户端连接:
[root@server1 ~]$ docker run -it --rm mysql mysql -h192.168.2.241 -uroot -p
Enter password:
修改 MySQL 的 root 用户密码:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'mysqlpass';
Query OK, 0 rows affected (0.01 sec)
或者用 set
命令。修改完毕用 FLUSH PRIVILEGES
来生效:
mysql> set password for 'root'@'%' = password('密码');
FLUSH PRIVILEGES;
MongoDB
MongoDB 是一款开源文档数据库(Document-Oriented),是当前最流行的 NoSQL 数据库。
下载
MongoDB 5 以上版本,要求 CPU 必须支持 AVX 指令集,否则启动会失败。为了适用性这里使用 4.4.9 版本:
[root@server4 ~]$ docker search --filter=is-official=true mongo
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mongo MongoDB document databases provide high avai… 8243 [OK]
mongo-express Web-based MongoDB admin interface, written w… 1071 [OK]
[root@server4 ~]$ docker pull mongo:4.4.9
MongoDB 服务中主要使用的目录如下:
路径 | 说明 |
---|---|
/data/db/ | MongDB 数据库存放目录 |
MongoDB 服务使用的端口如下:
端口 | 说明 |
---|---|
27017 | 服务端口 |
28017 | HTTP 访问端口 |
启动
可以不修改配置文件,挂载目录和映射端口启动,并设置 root 账号密码为 root:
[root@server4 ~]$ docker run -d -p 27017:27017 -p 28017:28017 --name mongo -v /docker/mongodb/db:/data/db -e MONGO_INITDB_ROOT_USERNAME=root -e MONGO_INITDB_ROOT_PASSWORD=root mongo:4.4.9
14d297ff4282ea50bbcb0383ebb51e0fc6da0685dd83cfa9775892803da1b7a5
[root@server4 ~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
14d297ff4282 mongo "docker-entrypoint.s…" 7 seconds ago Up 5 seconds 0.0.0.0:27017->27017/tcp, :::27017->27017/tcp, 0.0.0.0:28017->28017/tcp, :::28017->28017/tcp mongo
使用 Docker-Compose 启动的配置文件参考如下:
version: '3.9'
services:
mongo:
image: mongo:4.4.9
container_name: mongo
restart: always
ports:
- "27017:27017"
volumes:
- ./data:/data/db