在docker中使用MySQL数据库
概述
我是一直想把所有的程序都跑在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容器现在的ipsudo 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
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Docker解读(什么是容器)
一、What Is A Container 容器映像是一个软件的轻量级独立可执行软件包,包含运行它所需的一切:代码,运行时,系统工具,系统库,设置。不管环境如何,集装箱化软件都可以运行相同的Linux和Windows应用程序。容器将软件与其周围环境隔离开来,例如开发环境和登台环境之间的差异,并有助于减少在同一基础架构上运行不同软件的团队之间的冲突。 二、Docker容器的特点 1.轻量级 在一台机器上运行的Docker容器共享该机器的操作系统内核; 他们立即开始并使用更少的计算和内存。图像由文件系统层构建并共享公用文件。这最大限度地减少了磁盘使用量,图像下载速度更快。 2.标准 Docker容器基于开放标准,可在所有主要Linux发行版,Microsoft Windows以及任何基础架构(包括虚拟机,裸机和云中)上运行。 3.安全 Docker容器将应用程序彼此隔离并从底层基础架构中分离出来。Docker提供了最强大的默认隔离功能,可以将应用程序问题限制在一个容器中,而不是整个机器上。 三、比较容器和虚拟机 容器和虚拟机具有相似的资源隔离和分配优势,但功能不同,因为容器虚拟化操作系统而...
- 下一篇
在树莓派上搭建docker仓库
概述 搭建docker仓库要使用官方的registry镜像,但是官方的registry镜像是不支持arm的,所以不能使用官方的registry镜像,但是还是有人制作出了适用于树莓派的registry镜像 操作 搭建镜像仓库其实很简单,首先pull下arm版本的registry镜像docker pull budry/registry-arm接着创建一个目录用来存储镜像文件mkdir registry接着运行容器docker run --name registry-arm -d -p 5000:5000 -v /root/registry:/var/lib/registry --restart always budry/registry-arm之后在要使用仓库的docker主机中配置仓库就好了比如我在另外一个树莓派中配置 { "registry-mirrors": [""], "insecure-registries": ["192.168.1.7:5000"] } 修改完成之后重启docker接着pull一个镜像下来docker pull ubuntu:16.04给这个镜像重新命名doc...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS8编译安装MySQL8.0.19
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS7,8上快速安装Gitea,搭建Git服务器