前言

最近发现Docker容器技术非常火,恰好刚想重装服务器上的MySQL,就想把MySQL搭建在Docker运行使用,赶紧学习下

Docker

Docker是什么

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

为什么要用Docker

1、简化程序:
Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管理。方便快捷已经是 Docker的最大优势,过去需要用数天乃至数周的 任务,在Docker容器的处理下,只需要数秒就能完成。

2、避免选择恐惧症/简化部署工作:
如果你有选择恐惧症,还是资深患者。Docker 帮你,打包你的纠结!比如 Docker 镜像;Docker 镜像中包含了运行环境和配置,所以 Docker 可以简化部署多种应用实例工作。比如 Web 应用、后台应用、数据库应用、大数据应用比如 Hadoop 集群、消息队列等等都可以打包成一个镜像部署。

3、节省开支:
一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker 改变了高性能必然高价格的思维定势。Docker 与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式。

Docker用在哪

  • Web 应用的自动化打包和发布。
  • 自动化测试和持续集成、发布。
  • 在服务型环境中部署和调整数据库或其他的后台应用。
  • 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。

Docker怎么用

### 检索镜像
Docker search 镜像名  
docker search redis  ### 检索redis

### 下载镜像 / 拉取镜像
Docker pull 镜像名  
docker pull redis  ### 下载redis的镜像

### 查看本地镜像列表
docker images 

Docker rmi image-id (删除指定ID的镜像)
### 运行镜像为容器方法之一
Docker run --name container-name -d image-name 
注: --name 是为容器取名称 -d(detached)控制台不再阻碍 最后的指定运行哪个镜像
docker run --name test-redis -d redis  ### 运行redis

### 获取容器列表doc
Docker ps  

### 查看运行和停止状态的容器
Docker ps -a  

### 停止容器 可以通过容器名称或者容器Id
Docker stop container-name/container-id 

### 启动容器: docker start container-name/container-id  可以通过容器名称或者容器id
docker start test-redis

### 删除单个容器
docker rm container-id

### 查看当前容器日志:
docker logs container-name/container-id

搭建MySQL

1. 查找Mysql镜像

docker search mysql

2.拉取MySQL镜像,因工作需求,我用的是MySQL5.7

docker pull mysql:5.7

3.查看本地镜像

docker images 或者 docker images |grep mysql

4.运行MySQL镜像
特别注意

MySQL(5.7.19)的默认配置文件是 /etc/mysql/my.cnf 文件。如果想要自定义配置,建议向 /etc/mysql/conf.d 目录中创建 .cnf 文件。新建的文件可以任意起名,只要保证后缀名是 cnf 即可。

docker run -p 3306:3306 --name mysql -v /opt/docker_v/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
### 下面这条适用5.6版本
docker run -p 3306:3306 --name mymysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
第四部参数说明
  • **-p 3306:3306:**将容器的3306端口映射到主机的3306端口
  • **-v /opt/docker_v/mysql/conf:/etc/mysql/conf.d:**将主机/opt/docker_v/mysql/conf目录挂载到容器的/etc/mysql/conf.d
  • **-e MYSQL_ROOT_PASSWORD=123456:**初始化root用户的密码
  • -d: 后台运行容器,并返回容器ID
5.进入MySQL容器

docker exec -it mysql bash

问题

Access denied for user ‘root’@‘localhost’ (using password: YES)

密码并没错。。

解决

找到我们在运行是的.cnf文件并进行编辑

[mysqld]
skip-grant-tables

然后重新启动容器即可

docker restart 6534d1f69ae0(CONTAINER ID)

就可以通过mysql -uroot -p登录啦,不需要密码

然后mysql服务中

use mysql;

update user set authentication_string='' where user='root';

flush privileges;

退出mysql,把刚才在.cnf文件中的配置注释掉,重启mysql

# 重设密码
alter user 'root'@'localhost' IDENTIFIED BY '123456';

问题解决!

6.设置外网访问用户
CREATE USER 'lucas'@'%' IDENTIFIED WITH mysql_native_password BY '123456789!';
## 赋权,不推荐给太大的权限
GRANT ALL PRIVILEGES ON *.* TO 'lucas'@'%';
GRANT select, insert, update, delete ON *.* to lucas@'%';
7.使用SQLyog测试(mysql管理工具)

1560940121527

总结

很明显,相比以前安装在linux,在docker上操作变的更简单也更容易管理了,也更方便管理

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐