前言
前面文章已将Docker和docker-compose安装完毕,这里算是正式使用,先从安装Mysql说起。
常规梳理
关于镜像
这里选择mysql:5.7.28
关于环境变量
- MYSQL_ROOT_PASSWORD:数据库root密码
- MYSQL_DATABASE:默认创建的数据库
- MYSQL_USER:默认创建的用户名,可访问上述创建的数据库
- MYSQL_PASSWORD:默认创建用户的密码
这是经验所得,更详细的说明可去dockerhub搜相关镜像了解。
关于挂载目录及文件
- /var/lib/mysql:mysql数据目录
- /etc/my.cnf:mysql配置文件
- /docker-entrypoint-initdb.d/ :初始化后,默认执行的sql脚本目录,即存放有sql脚本,会自动执行。用于初始化数据库的。
关于服务端口
- 3306
定义文件样例
version: '2'
services:
mysql:
environment:
MYSQL_ROOT_PASSWORD: "M78@AGi86T"
MYSQL_DATABASE: "app"
MYSQL_USER: "u_app"
MYSQL_PASSWORD: "8Eli@gr#668"
image: "mysql:5.7.28"
restart: always
volumes:
- "/etc/localtime:/etc/localtime:ro" # 与宿主时钟同步
- "/docker-workspace/mysql/db:/var/lib/mysql"
- "/docker-workspace/mysql/conf/my.cnf:/etc/my.cnf"
- "/docker-workspace/mysql/init:/docker-entrypoint-initdb.d/"
ports:
- "3306:3306"
- services:服务定义,每个key对应一个服务
- environment:环境变量定义
- image:镜像
- restart:重启策略
- no,默认策略,在容器退出时不重启容器
- on-failure,在容器非正常退出时(退出状态非0),才会重启容器
- on-failure:3,在容器非正常退出时重启容器,最多重启3次
- always,在容器退出时总是重启容器
- unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
- volumes:挂载目录及文件,左边为宿主,右边为容器
- ports:端口映射,左边宿主,右边容器
开始安装
初始化目录
mkdir -p /docker-workspace/mysql/db
mkdir -p /docker-workspace/mysql/conf
mkdir -p /docker-workspace/mysql/init
添加配置文件
cat <<EOF > /docker-workspace/mysql/conf/my.cnf
[mysqld]
user=mysql
wait_timeout=2880000
interactive_timeout = 2880000
max_allowed_packet = 256M
default-storage-engine=INNODB
character-set-server=utf8mb4
default-time_zone = '+8:00'
lower_case_table_names=1
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
EOF
添加定义文件
cat <<EOF > /docker-workspace/mysql/docker-compose.yml
version: '2'
services:
mysql:
environment:
MYSQL_ROOT_PASSWORD: "8Eli#gr#AUk"
MYSQL_DATABASE: "app"
MYSQL_USER: "u_app"
MYSQL_PASSWORD: "8Eli@gr#668"
image: "mysql:5.7.28"
restart: always
volumes:
- "/etc/localtime:/etc/localtime:ro"
- "/docker-workspace/mysql/db:/var/lib/mysql"
- "/docker-workspace/mysql/conf/my.cnf:/etc/my.cnf"
- "/docker-workspace/mysql/init:/docker-entrypoint-initdb.d/"
ports:
- "3306:3306"
EOF
运行实例
-
后台运行实例
docker-compose -f /docker-workspace/mysql/docker-compose.yml up -d
下面命令可暂时跳过,直接跳到连接验证
-
停止运行中的实例
docker-compose -f /docker-workspace/mysql/docker-compose.yml stop
-
开启运行中的实例
docker-compose -f /docker-workspace/mysql/docker-compose.yml start
-
重启运行中的实例
docker-compose -f /docker-workspace/mysql/docker-compose.yml restart
-
移出实例
docker-compose -f /docker-workspace/mysql/docker-compose.yml down
-
非后台运行实例
docker-compose -f /docker-workspace/mysql/docker-compose.yml up
最常用的是
docker-compose -f docker-compose.yml up -d
与docker-compose -f docker-compose.yml down
-
其他命令查看
docker-compose -h
连接验证
使用Navicat等数据库连接工具验证。
数据库常规维护
传统的安装在宿主机上数据库,可直接登录主机维护。而使用docker后,会略微有些区别,会多加一步,进入容器。
如果仅启动了一个mysql实例,则可以使用如下命令进入容器。
docker exec -it $(docker ps -a | grep mysql | awk '{print $1}') bash
其实就是:
docker exec -it containerid bash
查看容器id命令
docker ps -a