docker 安装mysql 实战文档_MySql 及 Wordpress Docker实战案例 -- Docker从入门到精通摘记...

本文档详细介绍了如何使用Docker在Ubuntu环境中安装和运行MySQL 5.7.31,包括下载镜像、运行容器、设置root密码、端口映射以及数据持久化。此外,还提到了在Vagrant中配置端口映射和连接MySQL的注意事项,以及遇到的一些常见问题和解决方法。
摘要由CSDN通过智能技术生成

完成中.

I. Mysql

使用 docker pull 下载成熟的 mysql 5.7.31

## 下载

$ sudo docker pull mysql:5.7.31

## 检查下载的镜像并获得镜像 ID: 718a6da099d8

$ root@ubuntu-xenial:/home/vagrant# sudo docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

mysql 5.7.31 718a6da099d8 4 weeks ago 448MB

## 运行镜像ID 718a6da099d8

$ sudo docker run -p 3306:3306 -d f6509bac4980 ### 小p参数定义端口为 3306

在 Description 页面查看安装说明

## 官方给与的安装命令行

$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

运行容器

## 运行 mysql 容器并设置 root 密码

$ root@ubuntu-xenial:/home/vagrant# sudo docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=my-secret-pw -d 718a6da099d8

d4ee3ed775ad2ab15011abacf6372392ef25065ccf670d3bedb453b981520403

### mysql的 root 用户密码就是:my-secret-pw

### -d 后台运行

### -p 自定义端口, 前面的 3306 是本地的, 后面的 3306 是容器的. 大 P 参数是随机端口

## 获得容器ID d4ee3ed775ad

$ root@ubuntu-xenial:/home/vagrant# sudo docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

d4ee3ed775ad 718a6da099d8 "docker-entrypoint.s…" 7 seconds ago Up 5 seconds 0.0.0.0:3306->3306/tcp, 33060/tcp boring_euclid

## 进入容器并登录 mysql

$ root@ubuntu-xenial:/home/vagrant# sudo docker exec -it d4ee3ed775ad /bin/bash

### exec 方式进入容器, 并设置命令行模式为 /bin/bash

$ root@d4ee3ed775ad:/# mysql -u root -p ### 登录 mysql,密码见上方.

Enter password:

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 11

Server version: 5.7.31 MySQL Community Server (GPL)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases; ### 查看数据库

+--------------------+

| Database |

+--------------------+

| information_schema |

| mysql |

| performance_schema |

| sys |

+--------------------+

4 rows in set (0.00 sec)

因为我们使用的是虚拟机,‍‍所以我们还需要‍‍在本机和我们虚拟机之间做一次端口的映射。‍‍

‍首先我们要来修改我们的vagrant配置文件

## 在 macOS 系统 home 目录下修改 Vagrantfile 配置文件

$ maskdeiMac:~ mask$ pwd

/Users/mask

$ maskdeiMac:~ mask$ ls Vagrantfile

Vagrantfile

## 使用 vim 编辑 Vagrantfile 的内容

$ maskdeiMac:~ mask$ vim Vagrantfile

## 增加一行

# NOTE: This will enable public access to the opened port

config.vm.network "forwarded_port", guest: 8080, host: 8280 ### 之前网页hi失败的实验

config.vm.network "forwarded_port", guest: 3306, host: 3309 ### mysql 映射

### 把本机的 3309 映射到虚拟机的 3306 端口

## 保存 Vagrantfile 后重启 vagrant

$ vagrant reload

因为我们并没有把 Docker ‍‍我们的道口容器设置成随‍‍我们的虚拟机重启而重启,所以每次我们都要去‍‍重新启动一下。‍‍但是如果大家‍‍如果希望可是可以把它做到‍‍随着我们机器的启动而自动重启的

## 重新启动 docker

$ vagrant@ubuntu-xenial:~$ sudo docker restart d4ee3ed775ad

d4ee3ed775ad

## 查看是否启动了容器

$ vagrant@ubuntu-xenial:~$ sudo docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

d4ee3ed775ad 718a6da099d8 "docker-entrypoint.s…" About an hour ago Up 18 seconds 0.0.0.0:3306->3306/tcp, 33060/tcp boring_euclid

## 使用第三方工具链接 mysql

所用工具为 IDEA

MySQL 访问之 端口映射实验 2

先上结果

做了三步:

1. 端口安排 --- 更改 VagrantFile 的配置

## 映射物理机和虚拟机机的端口

$ 增加一行 config.vm.network "forwarded_port", guest: 3307, host: 3310

把虚拟机 guest 的 3307 端口映射到 host 物理机的 3310 端口

2. 启动带端口映射的 mysql 容器

$ sudo docker run -p 3307:3306 -v /tmp/mysqldemo:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d --name=mysqldemo5 718a6da099d8

### 把 docker 容器 3306 端口映射到虚拟机 3307 端口

3. 第三方 mysql 工具连接"mysql 容器"

上图就是连接成功的示例: IDEA 中安装数据库插件 Database Navigator

## 数据持久化问题

数据的持久化问题。‍‍我们知道如果说我们的容器销毁的时候,‍‍我们的数据也会丢失,‍‍所以为了解决这个问题,我们可以使用‍‍ volume来把我们的数据卷进行挂载,‍‍形成本地到容器之间的一个映射,‍‍从而‍‍实现把数据保存到本地的目的

## 1. 建立对应的本地文件夹

$ mkdir -p /tmp/mysqldemo ### 就是建立在Mac电脑本机的根目录下.

$ ls /tmp/mysqldemo ### 返回是空的

## 2. 映射新端口 3307 以及目录

$ vagrant@ubuntu-xenial:~$ sudo docker run -p 3307:3306 -v /tmp/mysqldemo:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d --name=mysqldemo2 718a6da099d8

8477eafb5063ef57115f628c6d4620caba0ec7efd7c4f762528f0456b254a4d7

$ vagrant@ubuntu-xenial:~$ sudo docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

8477eafb5063 718a6da099d8 "docker-entrypoint.s…" 3 seconds ago Up 3 seconds 33060/tcp, 0.0.0.0:3307->3306/tcp mysqldemo2

d4ee3ed775ad 718a6da099d8 "docker-entrypoint.s…" About an hour ago Up 23 minutes 0.0.0.0:3306->3306/tcp, 33060/tcp boring_euclid

## 3. 检查两个目录的内容是否一致.

## Vagrant 这个虚拟机的本地目录 /tmp/mysqldemo

和 启动的容器 /var/lib/mysql 容器目录

见图: vagrant 这个虚拟机的本地目录 /tmp/mysqldemo 和 启动的容器 /var/lib/mysql 是一致的, 包括内容一致.

II. Wordpress

mysqldemo5

## 链接之前创建的 mysql 数据库, 数据库密码是 123456

$ sudo docker run --name wordpress-1 --link mysqldemo5:db -p 8765:80 -d wordpress

### 1. --name 给 wordpress 容器命名为 wordpress-1

### 2. --link 链接到之前创建的数据库容器 mysqldemo5, 并且更名为 db

### 3. -d 后台运行.

### 4. wordpress 是镜像名字, 镜像的 ID 为e492f6febf4b

$ vagrant@ubuntu-xenial:~$ sudo docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

wordpress latest e492f6febf4b 24 hours ago 546MB

guest: 8765, host: 8765

47a65cfe4785

25b1885ec450

设置 Vagrantfile 中的映射关系时, 注意

1. vim 设置完保存退出

2. 在 termina 原始状态下输入 vagrant reload

3. 重新启动 docker 时, 要先启动 mysql 容器,再启动 wordpress 容器.因为彼此依存关系

III. Mongodb

MongoDB Compass

一些坑

1. 遇到报错

## 使用 docker pull 命令遇到报错:

$ vagrant@ubuntu-xenial:~$ sudo docker pull mysql:5.7.31

Error response from daemon: Get https://registry-1.docker.io/v2/: dial

tcp: lookup registry-1.docker.io on 10.0.2.3:53:

read udp 10.0.2.15:46077->10.0.2.3:53: i/o timeout

解决办法:

## 使用 root 权限更改 host 文件

$ vi /etc/resolv.conf

## 增加或修改为下面一行地方内容

## nameserver 8.8.8.8 ### 我是增加了这条.

2. 从非官方仓库下载镜像的时候,有时候会提示“Error:Invalid registry endpoint https://dl.dockerpool.com:5000/v1......”,这是为什么?

## Docker从1.3.0版本以后,加强了对镜像安全的验证,需要手动添加对非官方仓库的信任。

编辑Docker配置文件,在其中添加:

DOCKER_OPTS="--insecure-registry dl.dockerpool.com:5000"

之后,重启Docker服务即可。23节测试

3. docker 无法启动时排错方法一:

## 运行容器报错

$ root@ubuntu-xenial:/home/vagrant# sudo docker run 718a6da099d8 -d -p 3306:3306

2020-09-04 05:26:42+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.31-1debian10 started.

2020-09-04 05:26:42+00:00 [ERROR] [Entrypoint]: mysqld failed while attempting to check config

command was: mysqld -d -p 3306:3306 --verbose --help

2020-09-04T05:26:42.830556Z 0 [ERROR] mysqld: unknown option '-d'

2020-09-04T05:26:42.832894Z 0 [ERROR] Aborting

## 通过 log 查找问题所在

$ root@ubuntu-xenial:/home/vagrant# sudo docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

d2b387f9433d 718a6da099d8 "docker-entrypoint.s…" 38 seconds ago Exited (1) 37 seconds ago serene_joliot

$ sudo docker logs d2b387f9433d

2020-09-04 05:26:42+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.31-1debian10 started.

2020-09-04 05:26:42+00:00 [ERROR] [Entrypoint]: mysqld failed while attempting to check config

command was: mysqld -d -p 3306:3306 --verbose --help

2020-09-04T05:26:42.830556Z 0 [ERROR] mysqld: unknown option '-d'

2020-09-04T05:26:42.832894Z 0 [ERROR] Aborting

### log里说 -d 参数错误. 发现参数的位置是有讲究的

$ sudo docker run -p 3306:3306 -d 718a6da099d8 ### 可以运行

$ sudo docker run 718a6da099d8 -d -p 3306:3306 ### 则报错

sudo docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=my-secret-pw -d 718a6da099d8

4. 持续观察容器的 log 输出

$ sudo docker logs -f d4ee3ed775ad

5. 一个结论: 貌似是错误结论...因为新的发现是 vagrant 这个虚拟机的本地目录 /tmp/mysqldemo 和 启动的容器 /var/lib/mysql 是一致的, 包括内容一致.

vagrant up 登录的界面, 它的根目录, 就是mac 电脑本机的根目录.

然而, 在 ubuntu 界面中, /tmp/mysqldemo 有一堆不知出处的文件, 是mysql系统的.

但是本机 mac 电脑查看 /tmp/mysqldemo 中, 空的, 空的,空的.

## 证据:

$ vagrant@ubuntu-xenial:/tmp$ ls -al

total 32

drwxrwxrwt 8 root root 4096 Sep 4 07:22 .

drwxr-xr-x 24 root root 4096 Sep 4 06:36 ..

drwxrwxrwt 2 root root 4096 Sep 4 06:36 .ICE-unix

drwxrwxrwt 2 root root 4096 Sep 4 06:36 .Test-unix

drwxrwxrwt 2 root root 4096 Sep 4 06:36 .X11-unix

drwxrwxrwt 2 root root 4096 Sep 4 06:36 .XIM-unix

drwxrwxrwt 2 root root 4096 Sep 4 06:36 .font-unix

drwxr-xr-x 5 999 root 4096 Sep 4 07:01 mysqldemo ### 创建时间为 7:01

$ vagrant@ubuntu-xenial:/tmp$ date

Fri Sep 4 07:25:08 UTC 2020 ### ubuntu 系统时间当时为 7:25

6. wordpress 最终可以登陆, 但是无法登陆 mysql 数据库.

实验了 47a65cfe4785--容器 id, mysqldemo5, db 作为数据库名,

账户root, 密码 123456 都可以登录到 mysql 的数据里, 但是不能登陆 wordpress 的 mysql 数据库.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值