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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM