如何用docker mysql高可用搭建mysql

Docker运行Mysql7 months ago通过 docker run -it -p
ubuntu /bin/bash进入容器,此处的命令含义可以在中了解。安装配置mysql在容器中的操作:apt-get update && apt-get install mysql-server -y
配置mysql,使得可以远程登陆。首先修改帮顶地址vi /etc/f
将bind-address = 127.0.0.1改为bind-address = 0.0.0.0保存后,从终端进入mysql:service mysql start
mysql -u root -p -A
-u是指定用户,-p是密码登陆的意思,输入密码后登陆,(-A没太理解,但是后面从宿主机登陆的时候,好像没加出问题了,欢迎留言写下你的观点)。进入后通过create database a_new_sql来创建新的数据库,use a_new_sql来使用这个数据库。进入数据库后,执行以下命令赋予权限:grant all on * to 'root'@'%' identified by 'mysecret';
表示将当前数据库(on *代表的含义)的所有权限(all)赋予(grant)给用户root('root'),允许它从任意地点登陆(@'%'),它的登陆密码是mysecret(identified by ‘mysecret’)exit退出mysql的命令行,回到容器的命令行。在宿主机连接:mysql -u root -p -h 127.0.0.1
输入密码后登陆成功。在mysql-workbench等可视化工具里也是一样的登陆方法。Reference2收藏分享举报文章被以下专栏收录学习Linux的一些经验推荐阅读{&debug&:false,&apiRoot&:&&,&paySDK&:&https:\u002F\\u002Fapi\u002Fjs&,&wechatConfigAPI&:&\u002Fapi\u002Fwechat\u002Fjssdkconfig&,&name&:&production&,&instance&:&column&,&tokens&:{&X-XSRF-TOKEN&:null,&X-UDID&:null,&Authorization&:&oauth c3cef7c66aa9e6a1e3160e20&}}{&database&:{&Post&:{&&:{&isPending&:false,&contributes&:[{&sourceColumn&:{&lastUpdated&:,&description&:&从我博客搬运过来的关于Linux的文章,各种关于Linux的大杂烩。&,&permission&:&COLUMN_PUBLIC&,&memberId&:1085937,&contributePermission&:&COLUMN_PUBLIC&,&translatedCommentPermission&:&all&,&canManage&:true,&intro&:&学习Linux的一些经验&,&urlToken&:&findhao-linux&,&id&:31219,&imagePath&:&v2-bfc31c1af8c0e546d518.jpg&,&slug&:&findhao-linux&,&applyReason&:&0&,&name&:&FindHao的Linux魔法书&,&title&:&FindHao的Linux魔法书&,&url&:&https:\u002F\\u002Ffindhao-linux&,&commentPermission&:&COLUMN_ALL_CAN_COMMENT&,&canPost&:true,&created&:,&state&:&COLUMN_NORMAL&,&followers&:244,&avatar&:{&id&:&v2-bfc31c1af8c0e546d518&,&template&:&https:\u002F\\u002F{id}_{size}.jpg&},&activateAuthorRequested&:false,&following&:false,&imageUrl&:&https:\u002F\\u002Fv2-bfc31c1af8c0e546d518_l.jpg&,&articlesCount&:22},&state&:&accepted&,&targetPost&:{&titleImage&:&https:\u002F\\u002Fv2-65c0be20d5cb4abfbd0f2b_r.png&,&lastUpdated&:,&imagePath&:&v2-65c0be20d5cb4abfbd0f2b.png&,&permission&:&ARTICLE_PUBLIC&,&topics&:[5,9511],&summary&:&Introduction原文 : \u003Ca href=\&https:\u002F\\u002F?target=http%3A\u002F\u002Fwww.findspace.name\u002Feasycoding\u002F1701\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003EDocker运行Mysql - FindSpace\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E更多关于Docker内容请查看\u003Ca href=\&https:\u002F\\u002F?target=http%3A\u002F\u002Fwww.findspace.name\u002Feasycoding\u002F1698\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003EDocker学习笔记目录\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E 本章主要说明了如何在docker中的linux中启用mysql服务。 我的需求是在宿主机上写代码,适用mysql数据库,不想在宿主机上安装,把数据库直接放到docker里。 由…&,&copyPermission&:&ARTICLE_COPYABLE&,&translatedCommentPermission&:&all&,&likes&:0,&origAuthorId&:0,&publishedTime&:&T17:09:18+08:00&,&sourceUrl&:&&,&urlToken&:,&id&:2634111,&withContent&:false,&slug&:,&bigTitleImage&:false,&title&:&Docker运行Mysql&,&url&:&\u002Fp\u002F&,&commentPermission&:&ARTICLE_ALL_CAN_COMMENT&,&snapshotUrl&:&&,&created&:,&comments&:0,&columnId&:31219,&content&:&&,&parentId&:0,&state&:&ARTICLE_PUBLISHED&,&imageUrl&:&https:\u002F\\u002Fv2-65c0be20d5cb4abfbd0f2b_r.png&,&author&:{&bio&:&不安分的Coder&,&isFollowing&:false,&hash&:&b2e0f40eed0dacc9d9e98014&,&uid&:48,&isOrg&:false,&slug&:&findhao&,&isFollowed&:false,&description&:&科研狗,不安分的coder。 个人主页:https:\u002F\u002Fwww.findhao.net&,&name&:&Find Hao&,&profileUrl&:&https:\u002F\\u002Fpeople\u002Ffindhao&,&avatar&:{&id&:&7e9b88f39ccb115fb3bf0b3eed514333&,&template&:&https:\u002F\\u002F50\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false},&memberId&:1085937,&excerptTitle&:&&,&voteType&:&ARTICLE_VOTE_CLEAR&},&id&:598593}],&title&:&Docker运行Mysql&,&author&:&findhao&,&content&:&\u003Ch1\u003EIntroduction\u003C\u002Fh1\u003E\u003Cp\u003E原文 : \u003Ca href=\&http:\u002F\\u002F?target=http%3A\u002F\u002Fwww.findspace.name\u002Feasycoding\u002F1701\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003EDocker运行Mysql - FindSpace\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E\u003C\u002Fp\u003E\u003Cp\u003E更多关于Docker内容请查看\u003Ca href=\&http:\u002F\\u002F?target=http%3A\u002F\u002Fwww.findspace.name\u002Feasycoding\u002F1698\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003EDocker学习笔记目录\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E\u003Cbr\u003E本章主要说明了如何在docker中的linux中启用mysql服务。\u003Cbr\u003E我的需求是在宿主机上写代码,适用mysql数据库,不想在宿主机上安装,把数据库直接放到docker里。\u003Cbr\u003E由于我的docker 拉取ubuntu:latest时16.04尚未发布,所以本文的基准镜像是ubuntu 14.04,其他linux版本理论上也适用。\u003C\u002Fp\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-text\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003EREPOSITORY TAG
SIZE\nubuntu
latest b7c
6 weeks ago
188 MB\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E通过 docker run -it -p
ubuntu \u002Fbin\u002Fbash进入容器,此处的命令含义可以在\u003Ca href=\&http:\u002F\\u002F?target=http%3A\u002F\u002Fwww.findspace.name\u002Feasycoding\u002F1700\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003EDcoker初体验\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E中了解。\u003C\u002Fp\u003E\u003Ch1\u003E安装配置mysql\u003C\u002Fh1\u003E\u003Cp\u003E在容器中的操作:\u003C\u002Fp\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-text\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003Eapt-get update && apt-get install mysql-server -y\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E配置mysql,使得可以远程登陆。\u003Cbr\u003E首先修改帮顶地址\u003C\u002Fp\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-text\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003Evi \u002Fetc\f\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E将bind-address = 127.0.0.1改为\u003C\u002Fp\u003E\u003Cblockquote\u003E\u003Cp\u003Ebind-address = 0.0.0.0\u003C\u002Fp\u003E\u003C\u002Fblockquote\u003E\u003Cp\u003E保存后,从终端进入mysql:\u003C\u002Fp\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-text\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003Eservice mysql start\nmysql -u root -p -A\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E-u是指定用户,-p是密码登陆的意思,输入密码后登陆,(-A没太理解,但是后面从宿主机登陆的时候,好像没加出问题了,欢迎留言写下你的观点)。进入后通过create database a_new_sql来创建新的数据库,use a_new_sql来使用这个数据库。\u003Cbr\u003E进入数据库后,执行以下命令赋予权限:\u003C\u002Fp\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-text\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003Egrant all on * to 'root'@'%' identified by 'mysecret';\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E表示将当前数据库(on *代表的含义)的所有权限(all)赋予(grant)给用户root('root'),允许它从任意地点登陆(@'%'),它的登陆密码是mysecret(identified by ‘mysecret’)\u003Cbr\u003Eexit退出mysql的命令行,回到容器的命令行。\u003Cbr\u003E在宿主机连接:\u003C\u002Fp\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-text\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003Emysql -u root -p -h 127.0.0.1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E输入密码后登陆成功。在mysql-workbench等可视化工具里也是一样的登陆方法。\u003C\u002Fp\u003E\u003Ch1\u003EReference\u003C\u002Fh1\u003E\u003Cp\u003E\u003Ca href=\&http:\u002F\\u002F?target=http%3A\u002F\u002Fjamyy.us.to\u002Fblog\u002F\u002F6500.html\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003EDocker 安裝與操作\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E\u003Cbr\u003E\u003Ca href=\&http:\u002F\\u002F?target=http%3A\u002F\u002Fblog.chinaunix.net\u002Fuid--id-3445261.html\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003Elinux下mysql的远程连接\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E\u003C\u002Fp\u003E&,&updated&:new Date(&T09:09:18.000Z&),&canComment&:false,&commentPermission&:&anyone&,&commentCount&:0,&collapsedCount&:0,&likeCount&:2,&state&:&published&,&isLiked&:false,&slug&:&&,&isTitleImageFullScreen&:false,&rating&:&none&,&titleImage&:&https:\u002F\\u002Fv2-65c0be20d5cb4abfbd0f2b_r.png&,&links&:{&comments&:&\u002Fapi\u002Fposts\u002F2Fcomments&},&reviewers&:[],&topics&:[{&url&:&https:\u002F\\u002Ftopic\u002F&,&id&:&&,&name&:&Docker&},{&url&:&https:\u002F\\u002Ftopic\u002F&,&id&:&&,&name&:&Linux&},{&url&:&https:\u002F\\u002Ftopic\u002F&,&id&:&&,&name&:&虚拟化&}],&adminClosedComment&:false,&titleImageSize&:{&width&:475,&height&:115},&href&:&\u002Fapi\u002Fposts\u002F&,&excerptTitle&:&&,&column&:{&slug&:&findhao-linux&,&name&:&FindHao的Linux魔法书&},&tipjarState&:&inactivated&,&annotationAction&:[],&sourceUrl&:&&,&pageCommentsCount&:0,&hasPublishingDraft&:false,&snapshotUrl&:&&,&publishedTime&:&T17:09:18+08:00&,&url&:&\u002Fp\u002F&,&lastestLikers&:[{&bio&:&很幸福&,&isFollowing&:false,&hash&:&37eff598a274a7b2b00f0&,&uid&:633500,&isOrg&:false,&slug&:&wei-yi-xun-2-39&,&isFollowed&:false,&description&:&想做出一点点东西来,想这个世界因为我而多一点点的精彩。\nPromising to be a Permanet Head Damage(笑)&,&name&:&Eason&,&profileUrl&:&https:\u002F\\u002Fpeople\u002Fwei-yi-xun-2-39&,&avatar&:{&id&:&v2-fba931cc5a88fcba0ddb42e&,&template&:&https:\u002F\\u002F50\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false},{&bio&:&.net 程序员,snda工作,擅长前端&,&isFollowing&:false,&hash&:&83fe9f93dbcca7c&,&uid&:00,&isOrg&:false,&slug&:&chen-tao-62&,&isFollowed&:false,&description&:&&,&name&:&陈涛&,&profileUrl&:&https:\u002F\\u002Fpeople\u002Fchen-tao-62&,&avatar&:{&id&:&da8e974dc&,&template&:&https:\u002F\\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false}],&summary&:&Introduction原文 : \u003Ca href=\&https:\u002F\\u002F?target=http%3A\u002F\u002Fwww.findspace.name\u002Feasycoding\u002F1701\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003EDocker运行Mysql - FindSpace\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E更多关于Docker内容请查看\u003Ca href=\&https:\u002F\\u002F?target=http%3A\u002F\u002Fwww.findspace.name\u002Feasycoding\u002F1698\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003EDocker学习笔记目录\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E 本章主要说明了如何在docker中的linux中启用mysql服务。 我的需求是在宿主机上写代码,适用mysql数据库,不想在宿主机上安装,把数据库直接放到docker里。 由…&,&reviewingCommentsCount&:0,&meta&:{&previous&:{&isTitleImageFullScreen&:false,&rating&:&none&,&titleImage&:&https:\u002F\\u002F50\u002Fv2-0a203deafaa4b997e349e5c_xl.jpg&,&links&:{&comments&:&\u002Fapi\u002Fposts\u002F2Fcomments&},&topics&:[{&url&:&https:\u002F\\u002Ftopic\u002F&,&id&:&&,&name&:&Linux&},{&url&:&https:\u002F\\u002Ftopic\u002F&,&id&:&&,&name&:&Docker&},{&url&:&https:\u002F\\u002Ftopic\u002F&,&id&:&&,&name&:&虚拟化&}],&adminClosedComment&:false,&href&:&\u002Fapi\u002Fposts\u002F&,&excerptTitle&:&&,&author&:{&bio&:&不安分的Coder&,&isFollowing&:false,&hash&:&b2e0f40eed0dacc9d9e98014&,&uid&:48,&isOrg&:false,&slug&:&findhao&,&isFollowed&:false,&description&:&科研狗,不安分的coder。 个人主页:https:\u002F\u002Fwww.findhao.net&,&name&:&Find Hao&,&profileUrl&:&https:\u002F\\u002Fpeople\u002Ffindhao&,&avatar&:{&id&:&7e9b88f39ccb115fb3bf0b3eed514333&,&template&:&https:\u002F\\u002F50\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false},&column&:{&slug&:&findhao-linux&,&name&:&FindHao的Linux魔法书&},&content&:&\u003Cp\u003E原文:\u003Ca href=\&http:\u002F\\u002F?target=http%3A\u002F\u002Fwww.findspace.name\u002Feasycoding\u002F1700\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003EDocker初体验 - FindSpace\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E\u003C\u002Fp\u003E\u003Ch1\u003EIntroduction\u003C\u002Fh1\u003E\u003Cp\u003E更多关于Docker内容请查看\u003Ca href=\&http:\u002F\\u002F?target=http%3A\u002F\u002Fwww.findspace.name\u002Feasycoding\u002F1698\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003EDocker学习笔记目录\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E\u003C\u002Fp\u003E\u003Cp\u003E简单记录下自己用docker的一些经历和经验。并不对docker进行介绍,可自行查阅下面的链接。\u003Cbr\u003E先发一些阅读的的东西。\u003Cbr\u003E推荐这个简短的小教程:\u003Cbr\u003E\u003Ca href=\&http:\u002F\\u002F?target=http%3A\\u002Fstatic\u002Fbooks\u002Fdocker_practice\u002Findex.html\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003EDocker 从入门到实践\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E\u003Cbr\u003E这是官方的文档:\u003Cbr\u003E\u003Ca href=\&http:\u002F\\u002F?target=https%3A\u002F\\u002Fmac\u002F\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003EDocker Documents\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E\u003Cbr\u003E后面的一些安装也是按照官方文档里说的进行。\u003Cbr\u003E\u003Ca href=\&http:\u002F\\u002F?target=http%3A\u002F\\u002F%3Fp%3D2726\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003E利用Docker构建开发环境\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E\u003C\u002Fp\u003E\u003Ch1\u003E安装\u003C\u002Fh1\u003E\u003Cp\u003E我的运行环境:\u003Cbr\u003EDebian 8 Jessie x86_64\u003Cbr\u003E\u003Ca href=\&http:\u002F\\u002F?target=https%3A\u002F\\u002Flinux\u002Fstep_one\u002F\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003E参考官方文档\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E\u003C\u002Fp\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-text\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E wget -qO- https:\u002F\\u002F | sh\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E系统会要求你输入sudo的密码,然后会安装docker和它的依赖包。\u003Cbr\u003E注意在安装完成的时候,终端里会有个提示,大概意思就是如果你想让普通用户也可以运行docker命令,需要把你的用户添加到docker group里,\u003C\u002Fp\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-text\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003Esudo usermod -aG docker username\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Ch1\u003E获取镜像\u003C\u002Fh1\u003E\u003Cp\u003E先从\u003Ca href=\&http:\u002F\\u002F?target=https%3A\u002F\\u002Fexplore\u002F\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003E官网的hub\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E查看都有哪些镜像可以用\u003Cbr\u003E比如点到debian的详细信息,可以看到支持很多版本:8.3,8,7,等等。右边有提示命令:\u003C\u002Fp\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-text\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003Edocker pull debian\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E默认都是latest版本,想要下载指定版本可以通过在后面添加:version:\u003C\u002Fp\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-text\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003Edocker pull debian:stretch\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E等待下载完成即可\u003C\u002Fp\u003E\u003Ch1\u003E管理镜像\u003C\u002Fh1\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-text\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003Edocker images\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E在列出信息中,可以看到几个字段信息\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E来自于哪个仓库,比如 ubuntu\u003C\u002Fli\u003E\u003Cli\u003E镜像的标记,比如 14.04\u003C\u002Fli\u003E\u003Cli\u003E它的 ID 号(唯一)\u003C\u002Fli\u003E\u003Cli\u003E创建时间\u003C\u002Fli\u003E\u003Cli\u003E镜像大小\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003E其中镜像的 ID 唯一标识了镜像,注意到 ubuntu:14.04 和 ubuntu:trusty 具有相同的镜像 ID,说明它们实际上是同一镜像。\u003C\u002Fp\u003E\u003Cp\u003ETAG 信息用来标记来自同一个仓库的不同镜像。例如 ubuntu 仓库中有多个镜像,通过 TAG 信息来区分发行版本,例如 10.04、12.04、12.10、13.04、14.04 等。\u003C\u002Fp\u003E\u003Ch1\u003E进入镜像\u003C\u002Fh1\u003E\u003Cp\u003E下面的命令指定使用镜像debian:stretch来启动一个容器。\u003C\u002Fp\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-text\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003Edocker run -t -i debian:stretch \u002Fbin\u002Fbash\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E如果不指定具体的标记,则默认使用 latest 标记信息。-t是指明tag,-i是绑定tty到当前的命令行终端。不然的话,就直接运行一下就结束了,不能产生交互效果。\u003Cbr\u003E默认里面啥也没有,所以先apt update,然后装自己需要的就行。因为默认的镜像源很慢,所以跟修改普通的一个系统一样,修改sourcelist,再重新update。\u003C\u002Fp\u003E\u003Ch1\u003E进入容器\u003C\u002Fh1\u003E\u003Cp\u003E可以通过docker ps -a获取当前所有的容器,包括已经退出的。获得容器的ID之后,可以通过\u003C\u002Fp\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-text\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003Edocker start -i contain_id\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Ch1\u003E后台运行\u003C\u002Fh1\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-text\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E# docker run -d ubuntu \u002Fbin\u002Fsh -c \& sleep 2; done\&\nae60c4b642058fefcc61ada85a610914bed9f5df0e2aa147100eab85cea785dc\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E它将直接把启动的container挂起放在后台运行,并且会输出一个CONTAINER ID,通过docker ps可以看到这个容器的信息,可在container外面查看它的输出docker logs ae60c4b64205,也可以通过docker attach ae60c4b64205连接到这个正在运行的终端,此时在Ctrl+C退出container就消失了,按Ctrl+P 然后Ctrl+Q可以退出到宿主机,而保持container仍然在运行\u003Cbr\u003E另外,如果-d启动但后面的命令执行完就结束了,如\u002Fbin\u002Fbash、echo test,则container做完该做的时候依然会终止。而且-d不能与--rm同时使用\u003Cbr\u003E可以通过这种方式来运行memcached、apache等。\u003C\u002Fp\u003E\u003Ch1\u003E卸载\u003C\u002Fh1\u003E\u003Cp\u003E官网文档给的很详细,\u003Cbr\u003ETo uninstall the Docker package:\u003C\u002Fp\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-text\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003Esudo apt-get purge docker-engine\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cp\u003ETo uninstall the Docker package and dependencies that are no longer needed:\u003C\u002Fp\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-text\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003Esudo apt-get autoremove --purge docker-engine\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cp\u003EThe above commands will not remove images, containers, volumes, or user created configuration files on your host. If you wish to delete all images, containers, and volumes run the following command:\u003C\u002Fp\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-text\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003Erm -rf \u002Fvar\u002Flib\u002Fdocker\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cp\u003EYou must delete the user created configuration files manually.\u003C\u002Fp\u003E\u003Ch1\u003E与宿主机共享数据\u003C\u002Fh1\u003E\u003Cp\u003E\u003Ca href=\&http:\u002F\\u002F?target=https%3A\u002F\\u002Fengine\u002Fuserguide\u002Fdockervolumes\u002F%23mount-a-host-directory-as-a-data-volume\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003E官网挂载宿主机文件夹到docker的说明\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E\u003Cbr\u003E简单解释:\u003C\u002Fp\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-text\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003Edocker run -v \u002FUsers\u002F&path&:\u002F&container path&\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E符合from to的参数规则,先写from路径,冒号,to路径,注意每个路径后面没有\u002F,如果路径不存在,docker会自动创建。注意,这个参数最好写在前面,起码是在-ti参数前面。\u003Cbr\u003E默认挂载是rw模式,可读可写。\u003C\u002Fp\u003E\u003Ch1\u003E端口绑定\u003C\u002Fh1\u003E\u003Cp\u003E我们使用-P标记创建一个容器,将容器的内部端口随机映射到主机的高端口4。这时我们可以使用docker ps来看到端口5000绑定主机端口49155。\u003C\u002Fp\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-text\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E$ sudo docker ps nostalgic_morse\nCONTAINER ID
NAMES\nbcf5
training\u002Fwebapp:latest
python app.py 5 seconds ago
Up 2 seconds
0.0.0.0:4\u002Ftcp
nostalgic_morse\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E我们也可以使用-p标识来指定容器端口绑定到主机端口,:前是宿主机端口,后是容器端口\u003C\u002Fp\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-text\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003Edocker run -it -p
ubuntu \u002Fbin\u002Fbash\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Ch1\u003E删除容器或者镜像\u003C\u002Fh1\u003E\u003Cp\u003E删除任何容器之前,要保证它已经停止了,通过docker stop contain_id,否则会提示你未停止,不能删除。\u003Cbr\u003E删除容器:\u003C\u002Fp\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-text\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003Edocker rm container_id\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E删除任何镜像之前,要保证没有任何容器是基于它构建的。\u003Cbr\u003E删除镜像:\u003C\u002Fp\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-text\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003Edocker rmi image_id_or_name\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Ch1\u003EReference\u003C\u002Fh1\u003E\u003Cp\u003E\u003Ca href=\&http:\u002F\\u002F?target=https%3A\\u002Fa\u002F1601\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003Edocker专题(2):docker常用管理命令(上)\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E\u003Cbr\u003E\u003Ca href=\&http:\u002F\\u002F?target=http%3A\u002F\\u002Fdocker\u002Fuserguide\u002Fdockerlinks.html\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003E连接容器\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E\u003C\u002Fp\u003E\u003Cp\u003E\u003Ca href=\&http:\u002F\\u002F?target=https%3A\u002F\u002Fyeasy.gitbooks.io\u002Fdocker_practice\u002Fcontent\u002F\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003EDocker —— 从入门到实践\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E\u003C\u002Fp\u003E\u003Cp\u003E\u003Ca href=\&http:\u002F\\u002F?target=https%3A\u002F\u002Fwww.oschina.net\u002Ftranslate\u002Fhow-is-docker-io-different-from-a-normal-virtual-machine\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003EDocker 和一个正常的虚拟机有何区别?\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E\u003Cbr\u003E\u003Ca href=\&http:\u002F\\u002F?target=http%3A\u002F\u002Flab.howie.tw\u002F\u002Fdocker-docker-lxc-hypervisor.html\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003E初探Docker – Docker 跟 LXC 以及一般Hypervisor有何差別?\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E\u003Cbr\u003E\u003Ca href=\&http:\u002F\\u002F?target=https%3A\\u002FDeanXu\u002FDocker-introduce\u002Fblob\u002Fmaster\u002FREADME.md\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003E全面了解Docker\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E\u003C\u002Fp\u003E&,&state&:&published&,&sourceUrl&:&&,&pageCommentsCount&:0,&canComment&:false,&snapshotUrl&:&&,&slug&:,&publishedTime&:&T15:41:53+08:00&,&url&:&\u002Fp\u002F&,&title&:&Docker初体验&,&summary&:&原文:\u003Ca href=\&http:\u002F\\u002F?target=http%3A\u002F\u002Fwww.findspace.name\u002Feasycoding\u002F1700\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003EDocker初体验 - FindSpace\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003EIntroduction更多关于Docker内容请查看\u003Ca href=\&http:\u002F\\u002F?target=http%3A\u002F\u002Fwww.findspace.name\u002Feasycoding\u002F1698\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003EDocker学习笔记目录\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E简单记录下自己用docker的一些经历和经验。并不对docker进行介绍,可自行查阅下面的链接。 先发一些阅读的的东西。 推荐这个简短的小教程: \u003Ca href=\&http:\u002F\\u002F?target=http%3A\\u002Fstatic\u002Fbooks\u002Fdocker_practice\u002Findex.html\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003EDocker 从入门到实践\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E 这…&,&reviewingCommentsCount&:0,&meta&:{&previous&:null,&next&:null},&commentPermission&:&anyone&,&commentsCount&:0,&likesCount&:3},&next&:{&isTitleImageFullScreen&:false,&rating&:&none&,&titleImage&:&https:\u002F\\u002F50\u002Fv2-b6ef5a38bddec196a389244_xl.jpg&,&links&:{&comments&:&\u002Fapi\u002Fposts\u002F2Fcomments&},&topics&:[{&url&:&https:\u002F\\u002Ftopic\u002F&,&id&:&&,&name&:&掌阅 iReader&},{&url&:&https:\u002F\\u002Ftopic\u002F&,&id&:&&,&name&:&Linux&},{&url&:&https:\u002F\\u002Ftopic\u002F&,&id&:&&,&name&:&黑客 (Hacker)&}],&adminClosedComment&:false,&href&:&\u002Fapi\u002Fposts\u002F&,&excerptTitle&:&&,&author&:{&bio&:&不安分的Coder&,&isFollowing&:false,&hash&:&b2e0f40eed0dacc9d9e98014&,&uid&:48,&isOrg&:false,&slug&:&findhao&,&isFollowed&:false,&description&:&科研狗,不安分的coder。 个人主页:https:\u002F\u002Fwww.findhao.net&,&name&:&Find Hao&,&profileUrl&:&https:\u002F\\u002Fpeople\u002Ffindhao&,&avatar&:{&id&:&7e9b88f39ccb115fb3bf0b3eed514333&,&template&:&https:\u002F\\u002F50\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false},&column&:{&slug&:&findhao-linux&,&name&:&FindHao的Linux魔法书&},&content&:&\u003Ch1\u003E1. Introduction\u003C\u002Fh1\u003E\u003Cp\u003E最近把原来的499 kindle卖掉了,换成了国内掌阅出的ireader plus(999),掌阅的性价比的确高一点,比(800)kwp3配置看起来高了一些。然而书城资源上,kindle的生态比掌阅好了很多。\u003Cbr\u003E我的主要阅读是非休闲的书籍,而且专业书籍一般也不从kindle上买,所以ireader plus更适合我的情况。\u003Cbr\u003E但是,ireaderp官方没有放出附件包,提供的服务也不能和kindle比,比如邮件推送,比如公众号推送等等。\u003Cbr\u003E了解到ireader是基于android 4.4进行“深度定制”的,但是和pc在相连的时候,是通过MTP协议,而且默认是关闭了usb调试的,万能的国民发现在开机时候,某个时刻点击右上角会弹出android系统自己的设置,并开启usb调试,这样,就可以通过adb连接pc。\u003Cbr\u003E但是点击的时机把握太重要了,我点了好多好多次,只点出来一次。\u003Cbr\u003E开启usb调试以后,就可以通过adb安装apk,ireader的一个破解群,也提供了一个桌面apk和切换桌面的epub文档。而我唯一点出的一次,竟然鬼使神差在系统设置里把桌面设置成了掌阅默认的。也就没法切换了。\u003Cbr\u003E于是想通过别的方法来开启。\u003C\u002Fp\u003E\u003Ch1\u003E2. 开启usb调试的探索\u003C\u002Fh1\u003E\u003Ch2\u003E探索1\u003C\u002Fh2\u003E\u003Cp\u003E通过MTP挂载的文件里,发现有个jar包,从文件夹路径以及名字上判断是蓝牙语音读书的插件包。然而反编译以后,并没有发现可以利用的点。\u003C\u002Fp\u003E\u003Ch2\u003E探索2\u003C\u002Fh2\u003E\u003Cp\u003E尽管没有开放出固件,但是万能的国民开启了usb调试以后,就可以获取到ota包。\u003Cbr\u003E同时在mtp挂载里,查看ota_log文件,发现ota包存放的位置是\u002Fstorage\u002Femulated\u002F0\u002Fadupsfota\u002Fupdate.zip,在群里问侃侃,说mtp挂载的应该是\u002Fstorage\u002Femulated\u002F0\u002F,我尝试直接建立文件夹,并把ota包放进去,无法检测到。推测是文件夹权限的问题,但是如果的确挂载的是\u002Fstorage\u002Femulated\u002F0\u002F,而且之前升级时自动新建了一个adupsfota\u002F文件夹的话,应该会冲突,不允许我建立的。这里依旧疑惑。\u003C\u002Fp\u003E\u003Ch2\u003E探索3\u003C\u002Fh2\u003E\u003Cp\u003E既然是通过ota,那么直接分析出整个ota的过程,通过伪造假的ota服务器来进行升级不就行吗,升级成自己修改过设置的包,而且我认为掌阅的开发人员在调试的时候,不会是手动找时机点右上角的设置吧。\u003Cbr\u003E下文皆是基于此项探索进行的。\u003C\u002Fp\u003E\u003Ch1\u003E3. 抓包\u003C\u002Fh1\u003E\u003Cp\u003E既然要探查ota过程流量,而ireaderp是通过wifi连接的,那么就需要建立热点,并抓取热点的流量进行分析。由于我的系统是debian sid(tesing),网上流传的小米wifi的驱动无法编译,linux内核太新了,提示错误code model kernel does not support PIC mode,在简单搜索以后放弃解决这个问题,直接切换到别人的win下面去。小米wifi建立热点,用wireshark神器抓包分析。\u003C\u002Fp\u003E\u003Ch2\u003E3.1 分析小米wifi的流量数据\u003C\u002Fh2\u003E\u003Cp\u003E由于自己建立的热点数据流量很少,只有13条,其中前6条是ireaderp android系统的服务行为,连接谷歌。后面才是在系统里点击更新时产生的流量。\u003Cbr\u003E但是很明显这里的流量都是单向的,从小米wifi(10.0.2.*)到ota服务器(43.254.53.99)。而且三步握手数据也不全面,但是可以看到有个HTTP响应数据,点开数据查看,会发现响应的内容如下:\u003C\u002Fp\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-text\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E{\&flag\&:{\&LUrl\&:\&no\&,\&isInner\&:1,\&isupgrade\&:1,\&displayApp\&:0,\&rand\&:\&\&,\&updateStep\&:0,\&DUrl\&:\&http:\u002F\\u002Fota\u002F\&,\&mid\&:\&19WF8361\&,\&connfreq\&:\&2940\&},\&status\&:1010}\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E而之前在探索1中,找可用的数据时,system\u002Fbuild.prop文件里有很多有用的信息,比如版本号等等。跟这里的信息一联系,有很多可圈可点之处。而且很明显\u003Ca href=\&http:\u002F\\u002F?target=http%3A\u002F\\u002Fota\u002F\& class=\& external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003E\u003Cspan class=\&invisible\&\u003Ehttp:\u002F\u002F\u003C\u002Fspan\u003E\u003Cspan class=\&visible\&\\u002Fot\u003C\u002Fspan\u003E\u003Cspan class=\&invisible\&\u003Ea\u002F\u003C\u002Fspan\u003E\u003Cspan class=\&ellipsis\&\u003E\u003C\u002Fspan\u003E\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E是下载ota包的连接。\u003Cbr\u003E\u003C\u002Fp\u003E\u003Ch2\u003E3.2 分析pc上网卡的数据\u003C\u002Fh2\u003E\u003Cp\u003E小米wifi最后也是通过本机的有线网卡进行的数据转发,因此抓包本机的eth网卡。\u003Cbr\u003E通过筛选命令ip.src==43.254.52.99 or ip.dst==43.254.52.99可以获取到整个交互过程。同样数据不多,可以看到一条重要的HTTP POST数据,\u003C\u002Fp\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-text\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003EPOST \u002Fota\u002Fdetectdown\u002FdetectSchedule.do HTTP\u002F1.1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cp\u003EBingo!这就是检测版本号的链接。\u003Cbr\u003E在随后的一条就是咱们上面获取到的响应数据。\u003Cbr\u003E\u003Cbr\u003E同时通过dns筛选到底ireaderp是访问什么网址进行请求ota版本检查的,发现了\u003Ca href=\&http:\u002F\\u002F?target=http%3A\u002F\\& class=\& external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003E\u003Cspan class=\&invisible\&\u003Ehttp:\u002F\u002F\u003C\u002Fspan\u003E\u003Cspan class=\&visible\&\\u003C\u002Fspan\u003E\u003Cspan class=\&invisible\&\u003E\u003C\u002Fspan\u003E\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E,(实际上是访问的\u003Ca href=\&http:\u002F\\u002F?target=http%3A\u002F\\& class=\& external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003E\u003Cspan class=\&invisible\&\u003Ehttp:\u002F\u002F\u003C\u002Fspan\u003E\u003Cspan class=\&visible\&\\u003C\u002Fspan\u003E\u003Cspan class=\&invisible\&\u003E\u003C\u002Fspan\u003E\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E,只不过被重定向了)\u003Cbr\u003E\u003Cbr\u003E那么接下来只需要伪造服务器就可以了。\u003C\u002Fp\u003E\u003Ch1\u003E4. 伪造服务器\u003C\u002Fh1\u003E\u003Cp\u003E分析下整个访问的流程:\u003Cbr\u003Eireaderp(发送网址\u003Ca href=\&http:\u002F\\u002F?target=http%3A\u002F\\& class=\& external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003E\u003Cspan class=\&invisible\&\u003Ehttp:\u002F\u002F\u003C\u002Fspan\u003E\u003Cspan class=\&visible\&\\u003C\u002Fspan\u003E\u003Cspan class=\&invisible\&\u003E\u003C\u002Fspan\u003E\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E请求) —&小米wifi(转发这个请求) —&dns服务器(解析出域名的ip返回给)—&小米wifi和ota服务器进行三次握手建立链接(将请求的网址发给ota服务器)—&ota服务器(响应这个请求)—&小米wifi(转发返回的数据)—&ireaderp(自己的程序处理响应数据)\u003C\u002Fp\u003E\u003Cp\u003E这是我大概分析的流程,我们只需要在dns服务器这里,欺骗ireaderp即可。\u003C\u002Fp\u003E\u003Ch2\u003E4.1 dnsmasq\u003C\u002Fh2\u003E\u003Cp\u003E这个软件是很轻巧而且傻瓜式的配置,既可以作为dhcp的分发,也可以进行简单的dns服务。然而实际上最终我被它整乱了,放弃了使用。\u003Cbr\u003E本来我在本地pc的\u002Fetc\u002Fhosts里映射了那两个域名到本机,但是在测试过程中发现,dnsmasq不稳定,在其日志里,一会儿优先解析hosts文件,一会儿又通过正常的dns服务器解析。\u003Cbr\u003E不再赘述了(这句话饱含心酸)。\u003C\u002Fp\u003E\u003Ch2\u003E4.2 Bind9\u003C\u002Fh2\u003E\u003Cp\u003E放弃dnsmasq之后,搜索搭建dns服务器,发现主要是关于bind9配置的,便学习了简单的配置方法。\u003Cbr\u003E不贴说明介绍了,先贴下配置的地方吧。bind的主目录是\u002Fetc\u002Fbind\u002F,编辑named.conf.local文件,添加两个zones:\u003C\u002Fp\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-text\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003Ezone \&\&
{ file \&\u002Fetc\u002Fbind\\&; };\nzone \&\&
{ file \&\u002Fetc\u002Fbind\\&; };\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E然后对照里面的file新建两个文件,直接cp db.local \u003Ca href=\&http:\u002F\\u002F?target=http%3A\u002F\\& class=\& external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003E\u003Cspan class=\&invisible\&\u003Ehttp:\u002F\u002F\u003C\u002Fspan\u003E\u003Cspan class=\&visible\&\\u003C\u002Fspan\u003E\u003Cspan class=\&invisible\&\u003E\u003C\u002Fspan\u003E\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E用local模板建立即可。以\u003Ca href=\&http:\u002F\\u002F?target=http%3A\\& class=\& external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003E\u003Cspan class=\&invisible\&\u003Ehttp:\u002F\u002F\u003C\u002Fspan\u003E\u003Cspan class=\&visible\&\\u003C\u002Fspan\u003E\u003Cspan class=\&invisible\&\u003E\u003C\u002Fspan\u003E\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E为例,修改\u003Ca href=\&http:\u002F\\u002F?target=http%3A\u002F\\& class=\& external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003E\u003Cspan class=\&invisible\&\u003Ehttp:\u002F\u002F\u003C\u002Fspan\u003E\u003Cspan class=\&visible\&\\u003C\u002Fspan\u003E\u003Cspan class=\&invisible\&\u003E\u003C\u002Fspan\u003E\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E内容如下:\u003C\u002Fp\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-text\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E;\n; BIND data file for local loopback interface\n;\n$TTL
2 Serial\n
604800 Refresh\n
86400 Retry\n
2419200 Expire\n
604800 ) Negative Cache TTL\n;\n@
127.0.0.1\n*
你的dns服务器ip\nfota4
你的dns服务器ip\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E修改的地方可以对照着db.local来看。我的bind9版本是VERSION=9.10.3-P4-Debian。\u003Cbr\u003Esudo service bind9 restart来重启服务。\u003C\u002Fp\u003E\u003Ch2\u003E4.3 修改dns配置\u003C\u002Fh2\u003E\u003Cp\u003E修改本机的\u002Fetc\u002Fresolv.conf,添加你的dns服务器ip,注意这个文件是自动生成的,你做的修改在重启网络以后就会丢失。\u003Cbr\u003E尝试ping \u003Ca href=\&http:\u002F\\u002F?target=http%3A\u002F\\& class=\& external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003E\u003Cspan class=\&invisible\&\u003Ehttp:\u002F\u002F\u003C\u002Fspan\u003E\u003Cspan class=\&visible\&\\u003C\u002Fspan\u003E\u003Cspan class=\&invisible\&\u003E\u003C\u002Fspan\u003E\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E看看是不是你设置的dns服务器ip。如果不是,尝试修改你的dns服务器上的\u002Fetc\u002Fhosts文件映射域名到你的ota服务器ip。\u003Cbr\u003E用你的手机或者ireaderp测试,先记录下连接的wifi分配的ip,然后忘记这个网络,重新连接,设置静态地址,将dns服务器修改掉,连接以后,尝试去系统设置里更新。\u003C\u002Fp\u003E\u003Ch1\u003E5. 伪造服务器响应\u003C\u002Fh1\u003E\u003Cp\u003E搭建好了dns服务器以后,还需要搭建ota服务器,当然这两个可以是一个。由于我手头数据不多,只有上面那一个请求响应,所以只能先伪造上面那一个。\u003Cbr\u003E用python的tornado web框架写了简单的代码fake_server.py来伪造响应:\u003C\u002Fp\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-text\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003Eimport tornado.httpserver\nimport tornado.ioloop\nimport tornado.options\nimport tornado.web\n\nfrom tornado.options import define, options\ndefine(\&port\&, default=80, help=\&run on the given port\&, type=int)\n\nclass IndexHandler2(tornado.web.RequestHandler):\n
def get(self):\n
greeting = self.get_argument('greeting', 'Hello')\n
self.write(greeting + ', friendly user!')\n
def post(self):\n
self.write('{\&flag\&:{\&LUrl\&:\&no\&,\&isInner\&:1,\&isupgrade\&:1,\&displayApp\&:0,\&rand\&:\&\&,\&updateStep\&:0,\&DUrl\&:\&http:\u002F\\u002Fota\u002F\&,\&mid\&:\&19WF9362\&,\&connfreq\&:\&2990\&},\&status\&:1011}\\n')\n
print(\&get one\&);\nif __name__ == \&__main__\&:\n
tornado.options.parse_command_line()\n
app = tornado.web.Application(handlers=[(r\&\u002Fota\u002Fdetectdown\u002FdetectSchedule.do\&, IndexHandler)])\n
http_server = tornado.httpserver.HTTPServer(app)\n
http_server.listen(options.port)\n
tornado.ioloop.IOLoop.instance().start()\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E由于默认是绑定80端口需要sudo,sudo python3 fake_server.py。设置好ireaderp的dns网络配置以后,点击系统更新,会发现后台获取到了这次请求,(里面有一些杂乱的请求,不是ireaderp发出的)\u003Cbr\u003E\u003C\u002Fp\u003E\u003Ch1\u003E6. 修改ota包\u003C\u002Fh1\u003E\u003Cp\u003E修改ota包其实是中午做的,现在还存在问题,尝试伪造update.zip包不成功,解压查看的时候,我只发现了一个md5sum的校验文件,后来改完了配置,我也重新生成了md5sum,发送给别人测试(我的依旧没有开启usb调试),更新失败。这个问题尚未明朗。\u003C\u002Fp\u003E\u003Cp\u003E目前想法,通过修改build.prop,添加如下内容来自动开启usb调试。\u003C\u002Fp\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-text\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003Epersist.servICe.adb.enable=1\npersist.sys.usb.config=adb\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E然后使用abootimg进行了打包,参考\u003Ca href=\&http:\u002F\\u002F?target=https%3A\\u002Fa\u002F3645\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003E[android]system.img文件的打包和解包\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E。\u003C\u002Fp\u003E\u003Ch1\u003E7. 总结\u003C\u002Fh1\u003E\u003Cp\u003E整个过程,复习了我很多网络的知识,以及工具的使用。但是实在是太累了。从早上9.00在群里开始讨论这件事情,中午外卖,在宿舍一直坐到晚上6.00,然后去实验室继续做,最后总结文章,写到了第二天的0:30。只因为早上的讨论勾起了我的兴趣。\u003C\u002Fp\u003E\u003Ch1\u003EReference\u003C\u002Fh1\u003E\u003Cp\u003E\u003Ca href=\&http:\u002F\\u002F?target=http%3A\u002F\\u002Ff%3Fkz%3D\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003E有大神破解了iReader plus\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E\u003Cbr\u003E\u003Ca href=\&http:\u002F\\u002F?target=https%3A\\u002FTankXiao\u002Farchive\u002F\u002F10\u002F2711777.html\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003EWireshark基本介绍和学习TCP三次握手\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E\u003Cbr\u003E\u003Ca href=\&http:\u002F\\u002F?target=http%3A\u002F\\u002F%3Fp%3D10624\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003E烂泥:dnsmasq搭建简易DNS服务器\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E\u003Cbr\u003E\u003Ca href=\&http:\u002F\\u002F?target=https%3A\u002F\u002Fmy.oschina.net\u002Ffhck\u002Fblog\u002F117577\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003EUbuntu Bind9泛域名解析配置\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E\u003Cbr\u003E\u003Ca href=\&http:\u002F\\u002F?target=https%3A\\u002Fcobbliu\u002Farchive\u002F\u002F19\u002F2970311.html\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003EDNS开源服务器BIND最小配置详解\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E\u003Cbr\u003E\u003Ca href=\&http:\u002F\\u002F?target=https%3A\\u002Fa\u002F3645\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003E[android]system.img文件的打包和解包\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E\u003Cbr\u003E其实还有很多很多很多参考,但是实在浏览记录太多了,没有及时mark。\u003C\u002Fp\u003E&,&state&:&published&,&sourceUrl&:&&,&pageCommentsCount&:0,&canComment&:false,&snapshotUrl&:&&,&slug&:,&publishedTime&:&T10:29:24+08:00&,&url&:&\u002Fp\u002F&,&title&:&伪造掌阅ireader plus升级的服务器&,&summary&:&1. Introduction最近把原来的499 kindle卖掉了,换成了国内掌阅出的ireader plus(999),掌阅的性价比的确高一点,比(800)kwp3配置看起来高了一些。然而书城资源上,kindle的生态比掌阅好了很多。 我的主要阅读是非休闲的书籍,而且专业书籍一般也不从ki…&,&reviewingCommentsCount&:0,&meta&:{&previous&:null,&next&:null},&commentPermission&:&anyone&,&commentsCount&:2,&likesCount&:5}},&annotationDetail&:null,&commentsCount&:0,&likesCount&:2,&FULLINFO&:true}},&User&:{&findhao&:{&isFollowed&:false,&name&:&Find Hao&,&headline&:&科研狗,不安分的coder。 个人主页:https:\u002F\u002Fwww.findhao.net&,&avatarUrl&:&https:\u002F\\u002F50\u002F7e9b88f39ccb115fb3bf0b3eed514333_s.jpg&,&isFollowing&:false,&type&:&people&,&slug&:&findhao&,&bio&:&不安分的Coder&,&hash&:&b2e0f40eed0dacc9d9e98014&,&uid&:48,&isOrg&:false,&description&:&科研狗,不安分的coder。 个人主页:https:\u002F\u002Fwww.findhao.net&,&badge&:{&identity&:null,&bestAnswerer&:null},&profileUrl&:&https:\u002F\\u002Fpeople\u002Ffindhao&,&avatar&:{&id&:&7e9b88f39ccb115fb3bf0b3eed514333&,&template&:&https:\u002F\\u002F50\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false}},&Comment&:{},&favlists&:{}},&me&:{},&global&:{&experimentFeatures&:{&ge3&:&ge3_9&,&ge2&:&ge2_1&,&nwebStickySidebar&:&sticky&,&androidPassThroughPush&:&getui&,&newMore&:&new&,&liveReviewBuyBar&:&live_review_buy_bar_2&,&liveStore&:&ls_a2_b2_c1_f2&,&searchHybridTabs&:&without-tabs&,&isOffice&:&false&,&homeUi2&:&default&,&answerRelatedReadings&:&qa_recommend_with_ads_and_article&,&remixOneKeyPlayButton&:&headerButton&,&asdfadsf&:&asdfad&,&qrcodeLogin&:&qrcode&,&newBuyBar&:&livenewbuy3&,&isShowUnicomFreeEntry&:&unicom_free_entry_off&,&newMobileColumnAppheader&:&new_header&,&zcmLighting&:&zcm&,&favAct&:&default&,&appStoreRateDialog&:&close&,&mobileQaPageProxyHeifetz&:&m_qa_page_nweb&,&iOSNewestVersion&:&4.2.0&,&default&:&None&,&wechatShareModal&:&wechat_share_modal_show&,&qaStickySidebar&:&sticky_sidebar&,&androidProfilePanel&:&panel_b&,&nwebWriteAnswer&:&default&}},&columns&:{&next&:{},&findhao-linux&:{&following&:false,&canManage&:false,&href&:&\u002Fapi\u002Fcolumns\u002Ffindhao-linux&,&name&:&FindHao的Linux魔法书&,&creator&:{&slug&:&findhao&},&url&:&\u002Ffindhao-linux&,&slug&:&findhao-linux&,&avatar&:{&id&:&v2-bfc31c1af8c0e546d518&,&template&:&https:\u002F\\u002F{id}_{size}.jpg&}}},&columnPosts&:{},&columnSettings&:{&colomnAuthor&:[],&uploadAvatarDetails&:&&,&contributeRequests&:[],&contributeRequestsTotalCount&:0,&inviteAuthor&:&&},&postComments&:{},&postReviewComments&:{&comments&:[],&newComments&:[],&hasMore&:true},&favlistsByUser&:{},&favlistRelations&:{},&promotions&:{},&draft&:{&titleImage&:&&,&titleImageSize&:{},&isTitleImageFullScreen&:false,&canTitleImageFullScreen&:false,&title&:&&,&titleImageUploading&:false,&error&:&&,&content&:&&,&draftLoading&:false,&globalLoading&:false,&pendingVideo&:{&resource&:null,&error&:null}},&drafts&:{&draftsList&:[],&next&:{}},&config&:{&userNotBindPhoneTipString&:{}},&recommendPosts&:{&articleRecommendations&:[],&columnRecommendations&:[]},&env&:{&edition&:{},&isAppView&:false,&appViewConfig&:{&content_padding_top&:128,&content_padding_bottom&:56,&content_padding_left&:16,&content_padding_right&:16,&title_font_size&:22,&body_font_size&:16,&is_dark_theme&:false,&can_auto_load_image&:true,&app_info&:&OS=iOS&},&isApp&:false},&message&:{&newCount&:0},&pushNotification&:{&newCount&:0}}

我要回帖

更多关于 docker mysql 集群 的文章

 

随机推荐