docker安装mysql8
sudo docker network create demo_net
一、下载镜像
# 查找镜像 docker search mysql # mysql # 下载镜像 https://hub.docker.com/ docker 官方搜索查看有哪些 mysql 镜像版本 docker pull mysql:8.0.27 # 查看已下载镜像 docker images
二、创建相关目录
宿主机创建相关
mkdir -p /home/docker/mysql/mysql8/conf # 配置文件目录 mkdir -p /home/docker/mysql/mysql8/data # 数据目录 mkdir -p /home/docker/mysql/mysql8/log # 日志目录
宿主机新增配置文件
# 配置文件
vim /home/docker/mysql/mysql8/conf/my.cnf
配置文件内容
# Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 2 of the License. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # The MySQL Server configuration file. # # For explanations see # http://dev.mysql.com/doc/mysql/en/server-system-variables.html [client] default-character-set = utf8mb4 [mysqld] pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql # 限制导入导出文件目录的, 可自行搜索, 我暂时没有用到过, 下面这样表示不限制目录 secure-file-priv = character_set_server = utf8mb4 collation_server = utf8mb4_bin # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 # Custom config should go here !includedir /etc/mysql/conf.d/ # 这里是配置加密方式的 # 启动警告 'default_authentication_plugin' is deprecated and will be removed in a future release. Please use authentication_policy instead. default_authentication_plugin= mysql_native_password
三、创建并运行容器
docker run \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=root \ -v /home/docker/mysql/mysql8/data:/var/lib/mysql:rw \ -v /home/docker/mysql/mysql8/log:/var/log/mysql:rw \ -v /home/docker/mysql/mysql8/conf/my.cnf:/etc/mysql/my.cnf:rw \ -v /etc/localtime:/etc/localtime:ro \ --name mysql801 \ --restart=always \ -d mysql:8.0.27 -p 3306:3306 : 端口映射, 前宿主机后容器 -e MYSQL_ROOT_PASSWORD=root : 指定数据库root用户的密码 -v /home/docker/mysql/mysql8/data:/var/lib/mysql:rw : 容器目录与宿主机目录的映射/挂载, 后面是指定读写权限 -v /home/docker/mysql/mysql8/log:/var/log/mysql:rw : 同上 -v /home/docker/mysql/mysql8/conf/my.cnf:/etc/mysql/my.cnf:rw : 同上 -v /etc/localtime:/etc/localtime:ro : 时区文件 --name mysql8 : 容器名称 --restart=always : docker重启时容器也重启, 类似开机启动的意思 -d mysql:8.0.27
查看日志
docker logs 容器ID/容器名称
docker logs mysql801
登录容器
docker exec -it 容器ID/容器名称 /bin/bash
docker exec -it mysql801 /bin/bash
四、docker-compose
docker-compose 创建的容器会创建不同的netwrok且和直接使用network创建的不一致,那么各容器的互相访问就成为问题
sudo docker network create demo_net
sudo docker network ls
docker-compose.yml
version: '3'
services:
mysql8.0:
# 镜像名
image: mysql:8.0.27
# 容器名(以后的控制都通过这个)
container_name: mysql8
# 重启策略
restart: always
environment:
# 时区上海
TZ: Asia/Shanghai
# root 密码
MYSQL_ROOT_PASSWORD: root
# 初始化数据库(后续的初始化sql会在这个库执行)
# MYSQL_DATABASE: nacos_config
# 初始化用户(不能是root 会报错, 后续需要给新用户赋予权限)
# MYSQL_USER: nacos
# 用户密码
# MYSQL_PASSWORD: nacos
# 映射端口
ports:
- 3306:3306
volumes:
# 数据挂载
- ./data/:/var/lib/mysql/
# 配置挂载
- ./conf/:/etc/mysql/conf.d/
# 日志
- ./log/:/var/log/mysql/
# 初始化目录挂载
- ./init/:/docker-entrypoint-initdb.d/
# 系统时区信息和本地一致(任何Linux容器都是这样吗)
- /etc/localtime:/etc/localtime:ro
command:
# 将mysql8.0默认密码策略 修改为 原先 策略 (mysql8.0对其默认策略做了更改 会导致密码无法匹配)
# 下面的一些配置也是可以在 my.cnf 中的,若是配置冲突会启动失败
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
# --lower_case_table_names=1
networks:
- demo_net
networks:
demo_net:
external: true # 来自外部