为什么80%的码农都做不了架构师?>>>   

概述

我是一直想把所有的程序都跑在docker里面,这样一方面是为了便于管理,另外一方面也可以增强自己对docker的理解,所以今天我就想学习一下最重要的数据库部分

让mysql数据库在docker下跑起来

首先就是pull镜像下来了 docker pull mysql:5.6 从上面看出,我是使用了5.6版本的mysql,实际上是5.6.40,在pull镜像的时候我推荐加上镜像的tag,少用latest标签 之后就是让他跑起来 docker run --name mysql -e MYSQL_ROOT_PASSWORD="woyaoxuehuilinux" -d mysql:5.6 解释一下上面的参数run就是运行docker镜像的命令,--name就是给容器取个名字叫mysql,-e就是设置容器里的环境变量,我们设置了mysql的密码环境变量,这个变量会传入容器里面来设置mysql的密码,-d就是把容器运行在后台,后面加的就是镜像的名字了

pull一个wordpress镜像,让它连接mysql容器

在pull wordpress镜像之前,我们先做一个实验,首先我们先看一下当前mysql容器的ip,我们可以输入下面的命令查看mysql容器现在的ip sudo docker inspect 7c6a577b0d51 输出可能有点多,那么我们就过滤一下,输入下面的命令 sudo docker inspect 7c6a577b0d51 |grep IPAddress

➜  ~ sudo docker inspect 7c6a577b0d51 |grep IPAddress"SecondaryIPAddresses": null,"IPAddress": "172.17.0.3","IPAddress": "172.17.0.3",

可以看到ip是172.17.0.3,如果我们把这个容器停止了删除了,再用这个镜像去生成一个容器,ip地址还会是这个吗?ip是肯定会变的,但是我们的应用是不允许数据库的ip变来变去的,不然就会连接不上了,所以我们怎么做才可以让数据库在变了ip的情况下还可以始终和应用连接着呢?docker其实完美提供了解决方案,首先我们pull下wordpress,作为我们的应用 docker pull wordpress:4.9.5-php5.6-apache 之后运行起来 docker run --name wordpress --link mysql:mysql -p8080:80 -d wordpress:4.9.5-php5.6-apache 解释一下参数--link,--link其实就是docker把两个容器之间建立连接,实际上就是修改容器中hosts文件来达到这种效果的,简单来说,我应用连接数据库ip可能会变,但是我的域名是不会变的把,那么我应用就使用数据库的域名来连接

root@e323ea2a7f99:/var/www/html# cat /etc/hosts
127.0.0.1   localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.3  mysql 81322690e4f7
172.17.0.4  e323ea2a7f99

如果你想退出docker容器那么输入ctrl+d,之后你就可以访问服务器的8080端口来访问wordpress了

如果容器挂了数据库不就没了?

如标题,我们的容器如果删了,那么我们的数据不就也没有了,那么有没有一种方法把容器中的数据存在容器外面,有,我们换一种方式来运行mysql容器 首先在本地新建一个文件夹用来存放mysql的数据文件 mkdir /data 之后用下面的命令来运行容器 docker run --name mysql-data -v /data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD="woyaoxuehuilinux" -d mysql:5.6 -v的意思就是把容器中的目录和宿主机中的目录做映射,我们只要把容器中mysql的数据目录映射到本地,将来就算这个容器被删除了,那么数据也还是在本地对吧,同样的,我们新建一个wordpress容器连接上mysql容器,这样会在mysql数据库中新建一个wordpress数据库 docker run --name wordpress-data --link mysql-data:mysql -p 8080:80 -d wordpress:4.9.5-php5.6-apache 之后登录数据库检查一下数据库是不是创建成功

➜  ~ docker exec -it b3fdafa94f56 /bin/bash
root@b3fdafa94f56:/# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.6.39 MySQL Community Server (GPL)Copyright (c) 2000, 2018, 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 |
| wordpress          |
+--------------------+
4 rows in set (0.00 sec)mysql>

没错创建成功了

➜  ~ ls /data
auto.cnf  ib_logfile0  ib_logfile1  ibdata1  mysql  performance_schema  wordpress

宿主机中的/data目录也有wordpress这个目录 之后我们访问ip:8080来安装wordpress并且发布一篇文章 完成之后删除mysql-data这个容器 docker stop mysql-data docker rm mysql-data 这个时候访问一下我们的wordpress网站,发现报错 Error establishing a database connection 说明数据库是彻底的挂了 接着我们重新生成容器 docker run --name mysql-data -v /data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD="woyaoxuehuilinux" -d mysql:5.6 网站是不是又可以访问了呢?而且docker容器启动很快,如果即使发现就可以在几分钟的时间去完成应用的恢复

使用容器中的客户端去连接别的mysql数据库

有时候docker容器还有一个更好玩的地方,比如我有一天突然要远程连接一台远程的mysql服务器,但是我本地没有mysql的客户端怎么办?不怕,docker帮助你,首先我们要知道远程的MySQL服务器的ip,比如我选择的是容器中的mysql,ip是172.17.0.3

docker run -it --rm mysql:5.6 mysql -h172.17.0.3 -uroot -p

➜  ~ docker run -it --rm mysql:5.6 mysql -h172.17.0.3 -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 5.6.39 MySQL Community Server (GPL)Copyright (c) 2000, 2018, 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 |
| wordpress          |
+--------------------+
4 rows in set (0.00 sec)mysql>

上面的--rm的意思就是当容器运行结束之后就自动删除

还有一种连接方法,你可以想一下,两个都是容器,那么就没有一种更简单的方法去连接吗?,实际上真的有,我们上面说了--link我们可以这样做 docker run -it --link mysql-data:mysql --rm mysql:5.6 sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'

你只要回车,连密码吗都可以不用输入,就是命令有点长,所以当你知道mysql密码的时候,推荐使用第一种,如果你不知道那么第二种比较方便

欢迎关注Bboysoul的博客www.bboysoul.com Have Fun

转载于:https://my.oschina.net/u/3778921/blog/1798740

在docker中使用MySQL数据库相关推荐

  1. mysql显示表已存在_「Docker系列」 如何在Docker中部署MySQL数据库?

    Docker为部署和测试应用程序和数据库提供了许多优势,这些应用程序和数据库是应用程序不可或缺的一部分,因此很值得学习如何在Docker容器中部署和运行数据库. 本文中,我们会重点关注如下重点: 为M ...

  2. Docker中部署mysql数据库

    场景 Docker中容器数据持久化-数据卷的简单使用: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/99194088 实现 拉取 ...

  3. 如何在Docker中安装MySQL数据库

    1.Docker环境 视频教程:https://www.bilibili.com/video/BV1xv4y1S7kA 2.搜索镜像 https://hub.docker.com/网站搜索MySQL, ...

  4. docker容器mysql头文件_在Docker容器中使用MySQL数据库

    开发过程中经常需要安装.调试mysql数据库,还需要在各种操作系上安装包依赖,实在是繁琐,因此就研究了一下如何在docker上运行一个mysql镜像,省却了我安装.找依赖的问题. 注:本文所有内容均在 ...

  5. Docker中部署Mysql8数据库

    场景 Docker中部署mysql数据库: Docker中部署mysql数据库_BADAO_LIUMANG_QIZHI的博客-CSDN博客 上面安装过mysql5.7,下面介绍安装Mysql8. 注: ...

  6. Docker中部署mysql后SpringBoot连接时提示表不存在(修改表名忽略大小写)

    场景 Docker中部署mysql数据库: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/99213563 在上面使用Docker ...

  7. cmd查看mysql数据库表_cmd中查看MySQL数据库表数据及结构

    0. 1 .cmd进入mysql安装的bin目录(C:\Program Files\XXXXXX\MySQL Server 5.6\bin) mysql -hlocalhost -uroot -p 回 ...

  8. 以两台Linux主机在docker中实现mysql主主备份以用nginx实现mysql高可用

    使用nginx反向代理主主备份的两台mysql,连接时连接nginx,当其中一台myql停止后,仍然可以正常使用,如果使用k8s 会简单许多.所谓主主复制就是在主从复制的基础上掉了个头. 请博主买块糖 ...

  9. 如何在docker中运行MySQL实例(转载)

    如何在docker中运行MySQL实例 转自:https://blog.csdn.net/siying8419/article/details/79670246 通常初学者学习docker时,不太清楚 ...

最新文章

  1. Codeforces 460E Roland and Rose(暴力)
  2. GAN的基本原理与入门应用!
  3. ADO.NET Entity Framework 深入分析, Part 5
  4. 打通两台机器的ssh功能
  5. SGU traffic light
  6. sql修改链接服务器名称,SQL Server 创建链接服务器的脚本,自定义链路服务器的简短名称...
  7. UE4 Roadmap
  8. 如何开始一个深度学习项目
  9. .Net QQ互联教程 1
  10. db2 jdbc 连接池_jdbc连接db2后getString(XXX)出来的字符串是乱码
  11. 第一章 SQL Server 2005概述文档信息
  12. jsp的mysql数据库分页查询_Jsp如何实现分页功能(使用MySQL数据库)
  13. iphonex时间显示蓝色_iphonex时间显示蓝色
  14. 欢迎体验 | Android 12 开发者预览版 3
  15. 创业公司一年工作总结!
  16. java中求矩形面积,java求矩形面积
  17. (HTML+CSS+JS)仿小米官网首页 含源码
  18. 【PR学习笔记】PR学习笔记之PR快捷键
  19. 嵌入式linux备份flash,嵌入式Linux裸机开发(十一)——Nandflash
  20. 关于汇编指令ldr和str的理解

热门文章

  1. github上搭建个人博客
  2. JavaScript实现存储HTML字符串
  3. 文件和存储管理学习笔记-动态磁盘管理
  4. AVAudioPlayer播放音频
  5. Flex+fluorineFx +ASP.NET开发的IIS部署
  6. 有感于“政府傍大款”----谈中小企业融资问题
  7. 检索数据表中重复的记录
  8. 如何找回由于IO设备错误移动磁盘的文件
  9. 常用排序算法 - 稳定性和复杂度分析
  10. Libgdx New 3D API 教程之 -- 使用Libgdx加载模型