Docker step by step --2 使用Docker快速部署Mysql
DockerHub
hub.docker.com有点像GitHub.com,github是所有程序的集合,github里面你可以创建你自己的代码仓库,搜索整个代码仓下载其他人的代码。而dockerhub是docker官方提供的一个镜像平台,你可以在此找到你需要的镜像,比如mysql、tomcat、nginx等,其中包括官方发布的镜像,以及各种非官方镜像,以及经过docker认证的第三方镜像,质量高的镜像都包括了安装使用说明,每个镜像都有显示下载人数,你也可以根据每个镜像下载的次数判断这个镜像的制作质量。
到hub.docker.com上搜索mysql
我们直接转到Docker官方Mysql镜像的下载页
右侧黑框中是拉取镜像的命令,复制后直接可以使用。
底下Description是说明信息,Reviews中有对此镜像的评论
页面下方Tags中说明了都有哪些版本的镜像以及拉去命令。
默认拉取最新的镜像:docker pull mysql
拉去mysql8.0镜像:docker pull mysql:8.0
拉去mysql5.7镜像:docker pull mysql:5.7
加速你的镜像下载
dockerhub虽好,但是对于国内用户可能存在一个问题,你在dockerhub上面找到合适的镜像,使用docker命令本地下载时默认访问的是
docker官方的服务节点,网速会比较慢,这个和我们安装docker时官方源速度慢是同类问题,我们需要改用国内的docker镜像节点。
此时需要修改配置文件(若没有就在此位置创建一个)
/etc/docker/daemon.json
内容改为:(网易的镜像地址)
{
"registry-mirrors": ["
https://hub-mirror.c.163.com"]
}
或者:(daocloud的镜像地址)
{
"registry-mirrors": ["
http://f1361db2.m.daocloud.io"]
}
或者:(阿里云的镜像地址)
{
"registry-mirrors": ["
https://opljue1q.mirror.aliyuncs.com"]
}
以上三个任何一个即可。
配置完国内镜像,重启一下docker:sudo systemctl restart docker
这时你在本地执行 docker pull mysql:5.7 是从你上面配置的源,即过内镜像拉取的数据。
比如我们要拉取mysql的5.7版本,执行:
sudo docker pull mysql:5.7
将mysql5.7镜像拉取到本地docker,拉取完成后,执行
sudo docker images 列表当前镜像
使用命令行搜索
除了在dockerhub上面搜索镜像,获取镜像信息,如果不想打开dockerhub网站,还可以使用命令行docker search 搜索可用镜像
以下是直接用docker search mysql搜索mysql相关镜像,结果中包括NAME镜像名称,STARS星标数(靠谱等级),OFFICIAL官方镜像标记,下载拉取镜像。
镜像基本操作
docker镜像是要占用空间的,如果要删除镜像,命令格式:
sudo docker image rm 镜像名:tag
比如要删除上面的镜像:ssudo docker image rm mysql:5.7
也可以直接用命令格式:sudo docker rmi imageid ,如:sudo docker rmi a4fdfd462add
即按照imageid进行删除,imageid使用sudo docker images可以看到。
启动容器
镜像下载好后只是静态资源,下一步就是根据镜像来启动容器。
(插入一个docker从镜像成为容器的插图)
如下图,通过带参数的docker run命令将你的mysql docker镜像运行为docker容器,并且理论上单个镜像可以运行多个不同的容器,只是他们的容器名称及ID不同,但是都源于一个镜像。
这里我们只运行一个。
启动容器docker run命令
sudo docker run --name mysql5.7 -p 13386:3306 -e MYSQL\_ROOT\_PASSWORD=123yes -d mysql:5.7
以上—name指定容器名称
-p指定映射的端口号,对外113386,docker容器内部3306
-e指定环境变量,这里是设置mysql的root密码,关于MYSQL\_ROOT\_PASSWORD的来历见官方文档
https://hub.docker.com/_/mysql 的
Environment Variables部分
-d是设定用来启动为容器的镜像名称,即上面镜像的repository:tag
注:使用官方镜像一定要注意参考官方镜像的文档,一般都有比较详细的使用说明文档。
mysql容器运行后,正如下图所示,对外端口是13386,远程电脑可以像登录一般mysql服务一样用mysq客户端登录访问,3306端口对于容器外部,包括容器宿主机是隐藏的。
关于docker run命令的更多参考:
或者执行sudo docker run —help
查看容器信息
用以下命令列表已经启动的容器
列表已启动的容器
sudo docker ps
另外加一个-a参数,列表所有容器(包括已经停止的、以及没启动成功的)
sudo docker ps -a
尝试用客户端连接位于docker容器中的mysql服务
命令行连接:
你可以在远程机器上,或者安装docker的宿主机上,用命令连接docker中的mysql:
如果是在宿主机登录容器中的mysql,对于宿主机相当于访问一个13386端口的本地mysql服务,并没有什么不同。
以下是在宿主机安装mysql客户端(上图的宿主机ubuntu)
sudo apt-get install mysql-client-core-8.0
本地命令行连接mysql (注意此处不能用localhost而要用127.0.0.1)
mysql -h127.0.0.1 -P13386 -uroot -p123yes
当然命令也可以在客户端远程链接,把127.0.0.1改为远程docker宿主机的地址或名称即可,
如在我的这台安装docker的宿主机(其实是个虚拟机上的ubuntu)的hostname是 vbox.ubuntu.com(上图的宿主机ubuntu的hostname),在远程机器上面可以用此命令登录mysql:sudo mysql -
hvbox.ubuntu.com -P13386 -uroot -p123yes
注:以上需要远程机器上面hosts文件加上vbox.ubuntu.com的ip地址域名映射。
远程客户端链接
最终使用肯定还是要用图形化客户端,比如mysql workbench这样的客户端,配置链接就可以了。
注:这是学习环境,正规使用,不建议开通远程root直接连。
如果远程客户端连接mysql有问题,可以先在远程客户端telnet docker宿主机:13386 测试端口是否能正常访问
用mysql workbench登录成功后,就像使用传统安装方式安装的mysql一样了去使用了。
启停容器命令:
停止容器:
docker stop 容器ID/容器名称
sudo docker stop mysql5.7
停止后,用docker ps -a 查看,可以看到STATU显示了容器的状态Exited
重启容器
docker start 容器ID/容器名称
sudo docker start 2c2b84eee83e
在容器内操作:
可以使用docker exec -it ,进入正在运行的容器,如上面的mysql5.7容器
sudo docker exec -it mysql5.7b /bin/bash
说明:mysql5.7是容器名称,你也可以
使用容器的id
/bin/bash 是指定容器后内的命令解释方式,也可以用/bin/sh ,最直观的是命令提示符显示会不同。
退出容器使用exit;即可。