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 # 来自外部

 

posted @ 2022-01-09 02:13  YangDanMua  阅读(2735)  评论(0编辑  收藏  举报