import{_ as p}from"./chunks/ArticleMetadata.Sb1DYAHo.js";import{_ as t,D as e,o as n,c as r,I as d,w as o,k as l,a as c,R as y,b as g,e as C}from"./chunks/framework.FVQzxbLi.js";import"./chunks/md5.RtphNWHi.js";const M=JSON.parse('{"title":"Docker 安装 MySQL 详细步骤","description":"","frontmatter":{"title":"Docker 安装 MySQL 详细步骤","author":"查尔斯","date":"2022/10/30 17:36","categories":["MySQL快速入门"],"tags":["MySQL","Docker","容器"],"showComment":false},"headers":[],"relativePath":"courses/mysql/03-附录/02-Docker安装MySQL.md","filePath":"courses/mysql/03-附录/02-Docker安装MySQL.md","lastUpdated":1669526061000}'),D={name:"courses/mysql/03-附录/02-Docker安装MySQL.md"},F=l("h1",{id:"docker-安装-mysql-详细步骤",tabindex:"-1"},[c("Docker 安装 MySQL 详细步骤 "),l("a",{class:"header-anchor",href:"#docker-安装-mysql-详细步骤","aria-label":'Permalink to "Docker 安装 MySQL 详细步骤"'},"​")],-1),A=y(`

笔者说

笔者下面的步骤及配置是基于指定版本的实践,大多数程序大多数情况下在相差不大的版本时可以直接参考。(当然了,即使是非 Docker 方式安装程序也是一样道理)

拉取镜像

笔者说

拉取镜像时需要明确镜像版本(Tag)。

不指定版本(Tag)就拉取镜像,那拉取下来的镜像版本(Tag)默认是 latest(最新的)。latest 会跟随 Docker Registry 中的记录变化,现在拉取下来的 latest 是 x1 版本,但隔了一段时间后你在其他机器上再拉取 latest 可能就是 x2 版本了。

变化的版本,不利于生产环境部署的稳定。无论是后续在其他环境部署还是扩容集群等场景均要求根据架构要求指定好版本。

shell
docker pull mysql:8.0.29

运行容器

笔者说

下方的配置,切记要根据个人实际情况来修改。

shell
# MYSQL_ROOT_PASSWORD:root 用户密码
# MYSQL_DATABASE:初始化数据库
# MYSQL_USER:初始化普通用户
# MYSQL_PASSWORD:初始化普通用户密码
docker run -d \\
--name mysql mysql:8.0.29 \\
--restart=always \\
-e TZ=Asia/Shanghai \\
-e MYSQL_ROOT_PASSWORD=123456 \\
-e MYSQL_DATABASE=test \\
-e MYSQL_USER=test \\
-e MYSQL_PASSWORD=123456 \\
-p 3306:3306 \\
-v /opt/disk/docker/volumes/mysql/conf:/etc/mysql/conf.d \\
-v /opt/disk/docker/volumes/mysql/data:/var/lib/mysql \\
-v /opt/disk/docker/volumes/mysql/logs:/logs \\
# 使用该参数,容器内的 root 用户才拥有真正的 root 权限
--privileged=true

验证

服务器开放好相应端口或设置好安全组规则后,直接用 Navicat 连接即可。

Docker Compose脚本

如果你是用的 docker-compose 来安装,下方附上相应 docker-compose.yml 脚本内容。

yaml
version: '3'
services:
  mysql:
    container_name: mysql
    image: mysql:8.0.29
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: 123456
      MYSQL_DATABASE: test
      MYSQL_USER: test
      MYSQL_PASSWORD: 123456
    ports:
      - 3306:3306
    volumes:
      - /opt/disk/docker/volumes/mysql/conf:/etc/mysql/conf.d
      - /opt/disk/docker/volumes/mysql/data:/var/lib/mysql
      - /opt/disk/docker/volumes/mysql/logs:/logs
    privileged: true

编写好 docker-compose.yml 脚本后,在脚本同级目录执行下方命令即可。

shell
docker-compose up -d

附:安装MariaDB

运行容器

shell
docker run -d \\
--name mariadb mariadb \\
--restart=always \\
-e TZ=Asia/Shanghai \\
-e MYSQL_ROOT_PASSWORD=123456 \\
-e MYSQL_DATABASE=test \\
-e MYSQL_USER=test \\
-e MYSQL_PASSWORD=123456 \\
-p 3306:3306 \\
-v /opt/disk/docker/volumes/mysql/conf:/etc/mysql/conf.d \\
-v /opt/disk/docker/volumes/mysql/data:/var/lib/mysql \\
--privileged=true

Docker Compose脚本

yaml
version: '3'
services:
  mariadb:
    container_name: mariadb
    image: mariadb
    restart: always
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: 123456
      MYSQL_DATABASE: test
      MYSQL_USER: test
      MYSQL_PASSWORD: 123456
    ports:
      - 3306:3306
    volumes:
      - /opt/disk/docker/volumes/mysql/conf:/etc/mysql/conf.d
      - /opt/disk/docker/volumes/mysql/data:/var/lib/mysql
    privileged: true
`,22);function m(s,B,u,v,E,S){const h=p,k=e("ClientOnly");return n(),r("div",null,[F,d(k,null,{default:o(()=>{var i,a;return[(((i=s.$frontmatter)==null?void 0:i.aside)??!0)&&(((a=s.$frontmatter)==null?void 0:a.showArticleMetadata)??!0)?(n(),g(h,{key:0,article:s.$frontmatter},null,8,["article"])):C("",!0)]}),_:1}),A])}const f=t(D,[["render",m]]);export{M as __pageData,f as default};