引入
在部署毕节服务器时遇到了个问题:
因为在三台服务器做好ovirt-engine超融合后,在主节点服务器上部署可视化平台需要安装mysql5.7,但是安装mysql时需要卸载一些依赖,但是由于怕影响原有的postgresql数据库和ovirt-engine的服务组件,选择了用docker容器部署mysql数据库。
在顺利创建好容器,配置好mysql远程连接后,发现用navicat死活连不上,部署mysql8也连不上,能改的配置文件都改了,路由也开放了,端口也开放了,就是不得行。非常怀疑是ovirt-engine超融合的一些设置影响了docker容器和宿主机的网络沟通。
后面没办法就创建了台虚拟机作为mysql服务器。
隔了一天偶然翻博客发现docker容器有个主机模式,这玩应好像直接用的宿主机的网络和端口。于是尝试着在自己公司部署了一下,还真行。然后就想着直接部署好创建一个自己的镜像,以后方便点。于是就有了这篇部署记录。
了解Docker的资源隔离和主机模式
此模式下 dockers 容器与宿主机在同一个网络中,但没有独立IP地址。
docker使用了Linux的Namespaces技术来进行资源隔离,如:
PID Namespace隔离进程Mount Namespace隔离文件系统Network Namespace隔离网络等一个Docker容器一般会分配一个独立的Network Namespace。但如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。
创建 centos7 容器
创建mysql数据目录
mkdir -p /usr/mysql/data创建容器
docker run -dit –name mysql5.7 –privileged=true –network=host -v /usr/mysql/data:/var/lib/mysql centos:centos7 /usr/sbin/init因为用了主机模式–network=host,所以就不用映射端口了。
进入容器
docker exec -it mysql5.7 /bin/bash安装必要的工具
yum install -y wget部署mysql5.7
创建Docker Hub仓库
注册登录创建自己的仓库,可以是公共也可以是私有
注意自己的仓库命名,最好是见名知义,因为仓库名就是后面镜像的名称
在服务器上登录你的 docker
docker login生成镜像
创建自己的镜像
docker commit -m “centos7 with mysql5.7” -a “echoo” a3dee73dbafa cent7sql:5.7-m 描述信息
-a 作者信息 a3dee73dbafa 容器id
cent7sql:5.7 镜像名:版本标签
注意:当你登录了自己的 docker后,查看镜像你会发现镜像名多了点东西 如docker.io/centos,这里的docker.io就是Docker Hub的公共用户名,centos则是镜像仓库的名字。 此时我这个镜像名是不符合规则的,如果直接推送会报错,必须按照用户名/仓库名:版本标签 这样的规则命名,这就是为啥上面创建仓库的时候说最好要见名知义。
更改镜像名字(重新打一个标签)
docker tag cent7sql:5.7 echoo2787/centos7:sql5.7这样的命名就可以啦
提交镜像
docker push echoo2787/centos7:sql5.7这个命令在创建仓库完成后那个页面右边可以找到
等待推送完成就好,如果报拒绝错误,检查是不是镜像命名和要求不一致。
暂无评论内容