解决Windows下无法对docker容器进行端口映射的问题

微信截图_20170427183208

 

在安装了一个Windows下安装了docker,并尝试在其中运行Nginx、owncloud等服务,但映射完毕之后,在主机的浏览器中,打开localhost:port无法访问对应的服务。

用百度尝试了下,始终找不到答案,难道这个问题大家都没遇到过么?于是使用Google,并用英文检索,一会就找到了对应的答案。

The reason you’re having this, is because on Linux, the docker daemon (and your containers) run on the Linux machine itself, so “localhost” is also the host that the container is running on, and the ports are mapped to.

On Windows (and OS X), the docker daemon, and your containers cannot run natively, so only the docker client is running on your Windows machine, but the daemon (and your containers) run in a VirtualBox Virtual Machine, that runs Linux.

原来,docker是运行在Linux上的,在Windows中运行docker,实际上还是在Windows下先安装了一个Linux环境,然后在这个系统中运行的docker。也就是说,服务中使用的localhost指的是这个Linux环境的地址,而不是我们的宿主环境Windows。我们可以通过命令

在Windows中通过docker安装Ubuntu镜像

1

缘起

Docker的技术已经比较热了,因为我不是运维工程师,过去一直没有冲动让我去学习一下。我平时喜欢在Linux上折腾点东西,但公司为了配合开发,使用的是Windows系统。最近脑子一热,想通过docker在Windows下安装一个Linux虚拟机,抛弃笨笨的VM Ware和Virtual Box的安装方式,这样做一来在以后可以在虚拟机里测试点东西,二来也通过这个方式学习一下Docker。

Canal记录mysql的binlog日志监听

缘起

公司有一个app客户端,在调取某些数据时,需要从不同的项目中获得数据,并处理这些数据,导致显示到客户端非常慢,现需要对这个问题进行优化。数据库大都是mysql服务器,所以选用了适合它的开源框架canal来处理数据。

在使用canal监听mysql的二进制日志的过程中,发现可用性还是比较强的,优点如下
  • 能够针对不同的表进行监听(订阅)
  • Canal客户端出现异常时,服务器可以将产品记录,重启客户端时可以将未消费的数据继续消费,做到不丢失数据(服务端记录未消费的产品)
  • Canal服务端出现异常,导致客户端无法消费数据时, 重启Canal服务器可以从出现异常时产生的数据,也可以做到不丢失数据。(服务端可以从上次无法生产的地方继续生产数据)

使用mybatis动态查询表名

开发时有个需求,需要对不同的表进行统计条目,然后,在table中分页显示,如果对每个表的统计功能都建立一个mapper,势必会非常繁杂,所以采用动态传入表名的形式会比较方便。
正常情况下,向表名这样的特殊字段是不可以正确执行的,mybatis做了预编译的处理,此时表名是必需的,这是为了防止sql注入的情况。如果我们要动态传递表名,我们可以对mybatis声明为statementType=”STATEMENT”的形式,取消mybatis的预编译,并且,传参时通过${}来接收,这样就可以完成表名的动态传参。
<select id=”countByTbName” statementType=”STATEMENT” resultType=”java.lang.Integer”  parameterType=”java.util.Map” >
        SELECT
            count(*)
        FROM
            ${tbName}
    </select>

 

Linux常用的几种上传下载命令

对于客户端和服务器都是Linux系统(或MacOS),他们之间的文件传递的命令是兼容的,使用命令scp就可以做到,需要注意的只是文件上传/下载的顺序
上传
scp -P port -r  local_folder user@remote_ip:remote_folder
下载
scp -p port -r user@remote_ip:remote_folder local_folder
对于客户端是Windows系统,可以使用secureCRT实现文件的上传/下载功能,目前常用的putty不支持Zmodem协议,所以无法完成这个功能。
这时,需要对secureCRT做个设置,指明文件上传下载的路径分别是什么,在option——session options中指明他们
命令如下:
rz:上传命令(Receive)
sz: 下载命令(Send)

解决jar包互相依赖导致的错误

最近项目中需要使用阿里巴巴的canal记录mysql的binary log,来监听主数据库的变化,从而备份到从数据库服务器中。但是在一切测试完毕之后,导入到原项目的时候,居然报错,解决了一个上午,终于解决,报错内容如下:
Image
发现,仅仅在向pom.xml文件中添加canal的依赖时,就会包上述的错误,我添加的内容如下:

导出JVM的快照文件,并使用MAT打开分析

最近在学习JVM的工作原理,这是高级工程师必学的知识,书放了好久,现在终于鼓起勇气看完了基础部分。

MAT(Memory Analyzer tool)是分析JVM内存使用情况的工具,可以对线上的项目导出dump快照文件,真实的项目一般都是在Linux服务器上运行,而命令行式的分析难免费劲,这是可以通过导出的dump文件导出后,在可视化的界面进行分析。使用eclipse安装mat的过程可以参考:eclipse安装Eclipse Memory Analyzer插件

下面记录一下,如何使用MAT时怎么使用的,具体的使用过程不太好写,自己也在不断的学习过程中,不敢多说,下面仅记录一下其中的两个过程以备忘:

  • 导出项目的快照dump文件
  • 使用mat打开dump文件
  1. 导入项目的快照dump文件

可以通过两种方式导出dump文件,参数设置方式和命令方式。

参数方式导出

我们可以在项目出现OutOfMemory错误的时候让系统自动执行导出dump文件的过程,这是需要设置两个参数

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=d:\proj.bin

这样在出现内存溢出的时候系统就可以自动导出这个文件,这个文件一般都非常大。

DigitalOcean服务器ssh-key登录配置

     第一次购买DigitalOcean服务器,没曾想,它的登录方式与其他服务器很不同,它没有root默认的登录密码,而是选用了ssh-key的登录方式。
ssh-key登录倒也可以,只是它的配置稍微坑爹了点,稍微搞不好就造成永远也登录不上了,登不上了……
     参考了一些网上的文章,终于找到解决方法了,记录一下吧。

通过sed为账户配置信息

缘起

     由于业务需要,我管理了几台服务器,有客户过来开通账号时,就操作服务器,给他们开通。开通账号的很多操作都是机械性的,但是又非常浪费时间和精力。我维护了一年多的时间,居然一直都是手动配置,今天终于忍不住编写了一个脚本,让它自动帮我完成这一系列的操作,确实非常方便。