用 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