(2)docker安装mysql

拉取镜像

[root@starseaing9228 ~]# docker pull mysql:5.7.26
5.7.26: Pulling from library/mysql
27833a3ba0a5: Pull complete 
864c283b3c4b: Pull complete 
cea281b2278b: Pull complete 
8f856c14f5af: Pull complete 
9c4f38c23b6f: Pull complete 
1b810e1751b3: Pull complete 
5479aaef3d30: Pull complete 
0f1430d39d4f: Pull complete 
2bc64c824b3f: Pull complete 
b64ec62ca852: Pull complete 
42323e351ef3: Pull complete 
Digest: sha256:069c2bc62a2b1f84827b96c36870c45be5458f1438c27a41535ba5197aa2e26c
Status: Downloaded newer image for mysql:5.7.26
[root@starseaing9228 ~]# 
[root@starseaing9228 ~]# 
[root@starseaing9228 ~]# 
[root@starseaing9228 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mysql               5.7.26              2f52e94d8acb        4 days ago          373MB
hello-world         latest              fce289e99eb9        3 months ago        1.84kB
[root@starseaing9228 ~]# 


创建用于挂载的目录:

[root@starseaing9228 mysql57]# mkdir -p /usr/local/mysql57/logs /usr/local/mysql57/conf /usr/local/mysql57/data

命令包含以下三个部分:
docker run <相关参数> <镜像 ID> <初始命令>

其中,相关参数包括:
-i:表示以“交互模式”运行容器
-t:表示容器启动后会进入其命令行
-v:表示需要将本地哪个目录挂载到容器中,格式:-v <宿主机目录>:<容器目录>

添加配置文件

添加my.cnf配置文件,具体内容看cat的输出:

[root@starseaing ~]# vi /usr/local/mysql57/conf/my.cnf
[root@starseaing ~]# cat /usr/local/mysql57/conf/my.cnf
[client]
# 设置mysql客户端默认字符集
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
# 设置3306端口
port = 3306

# 设置mysql的安装目录
# basedir=/var/mysql57
# 设置mysql数据库的数据的存放目录
# datadir=/var/mysql57/data

# 修改mysql5.7版本的验证模式,主要是去掉ONLY_FULL_GROUP_BY
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

# 允许最大连接数
max_connections=200

# 设置服务端使用的字符集
character-set-server=utf8
# 设置默认的排序
collation-server = utf8_unicode_ci

# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
lower_case_table_names=1
max_allowed_packet=16M


docker版本,应该可以去掉basedir和datadir。

*注意:[client]、[mysql]、[mysqld]这三个标记,是有具体顺序和作用的。

docker运行mysql5.7.26:

–privileged=true:容器内的root拥有真正root权限,否则容器内root只是外部普通用户权限

挂载路径:
配置文件路径:/usr/local/mysql57/conf/my.cnf:/etc/mysql/my.cnf
数据路径: /usr/local/mysql57/data:/var/lib/mysql
日志文件路径:/usr/local/mysql57/logs:/var/log/mysql(发现日志路径无法映射,暂时不映射该路径,自行去容器内部查看)
实际的容器日志为: /var/log/mysql/error.log

chown -R 999:999 /usr/local/mysql57/logs(宿主的文件夹权限)

所以运行命令为:

docker run --name mysql57 -p 3306:3306 -v /usr/local/mysql57/conf/my.cnf:/etc/mysql/my.cnf -v /usr/local/mysql57/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=password -d mysql:5.7.26


进入容器和查看具体的目录:

[root@starseaing9228 mysql57]# docker exec -it 6fd1e0a540da /bin/bash
root@6fd1e0a540da:/# 
root@6fd1e0a540da:/# ls
bin  boot  dev	docker-entrypoint-initdb.d  entrypoint.sh  etc	home  lib  lib64  logs	media  mnt  opt  proc  root  run  sbin	srv  sys  tmp  usr  var
root@6fd1e0a540da:/# cd lib
root@6fd1e0a540da:/lib# ls
init  lsb  systemd  terminfo  udev  x86_64-linux-gnu
root@6fd1e0a540da:/lib# cd ..
root@6fd1e0a540da:/# cd var
root@6fd1e0a540da:/var# ls
backups  cache	lib  local  lock  log  mail  opt  run  spool  tmp
root@6fd1e0a540da:/var# cd log
root@6fd1e0a540da:/var/log# ls
alternatives.log  apt  btmp  dpkg.log  faillog	lastlog  mysql	wtmp
root@6fd1e0a540da:/var/log# 
root@6fd1e0a540da:/var/log# cd mysql
root@6fd1e0a540da:/var/log/mysql# ls
error.log
root@6fd1e0a540da:/var/log/mysql# cat error.log 

上一篇:linux-包管理器-4


下一篇:linux – 加密/解密在两个不同的openssl版本之间不能很好地工作