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