序言

    走的太快,容易迷路;走的太快,容易撞墙;不过。。。。我喜欢。

    走的太快,容易忘记本心,所以。。。回顾一下为什么要使用docker的原因


    容器发展的很快,很多已经上了生产环境了,不过,还是来说说为啥要使用docker的初衷。

WHY?


    何为容器?所谓有容奶大。。。。


    java程序,一次编译到处运行,在于jdk提供了一个运行时的环境,从而能到处浪。。。

    

    而容器,其实也是一次编译到处运行,浪的更加厉害。。。容器提供了两种标准,一种是运行时环境,和jdk提供的环境差不多,只要能有运行时环境,那么容器就能运行;一种则是镜像标准,主要就是可以提供各种各样的镜像,相当于快照,一次build,到处浪。。。


    在写程序的时候,总是面向对象编程,而很多程序员并没有对象,其实镜像也可以看做是对象,然后容器相当于一个一个的实例,从而有redis的镜像,有mysql的镜像,只有你想不到。。。


    那么容器解决了什么样的问题


    开发一个程序,本来需求就那么多,bug那么多。。。首先,你得需要一个开发环境,如果你是用到了数据库。。。。你需要安装一个数据库,你需要配置一个用户,你需要授予这个用户相关的权限。。。。换了一个环境。。。你必须又要重复一边,累不累?


    安装一个数据库,创建一个VM虚拟机,安装相关的依赖包,下载软件,配置数据库,设置环境变量,授予权限。。。。so much more things to do。。。


    安装了一个数据库,一不小心,安装错了,需要卸载,修改配置文件,错了,主机的文件系统都乱了。。。。那么多的软件,都要记住,心好累。。。


    那么容器是不是可以解决呢?所以看看容器如何安装一个mysql。

[root@docker-ce mysql]# docker run -d --name mysql  -v /mysql:/var/lib/mysql  -p 3306:3306 --restart always --env MYSQL_ROOT_PASSWORD=root --env MYSQL_DATABASE=kel --env MYSQL_USER=kel --env MYSQL_PASSWORD=kel mysql:5.7 (运行mysql5.7

369866065e0c5a31763ddc17c29eb33315e31e814d48c329e21ef4b085975786

[root@docker-ce mysql]# docker ps(查看运行的容器

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES

369866065e0c        mysql:5.7           "docker-entrypoint.s…"   15 seconds ago      Up 13 seconds       0.0.0.0:3306->3306/tcp   mysql

[root@docker-ce mysql]# python(测试连接数据库

Python 2.7.11 (default, Jan 27 2018, 09:20:33) 

[GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux2

Type "help", "copyright", "credits" or "license" for more information.

>>> import MySQLdb

>>> conn = MySQLdb.connect(host='127.0.0.1',port=3306,user='root',passwd='root',db='kel')

>>> cur = conn.cursor()

>>> sqli="insert into student values(%s,%s,%s,%s)"

>>> cur.execute(sqli,('3','Huhu','2 year 1 class','7'))

1L

>>> aa=cur.execute("select * from student")

>>> print aa

1

>>> print cur.fetchone()

(3L, 'Huhu', '2 year 1 class', '7')

>>> exit()

[root@docker-ce mysql]# docker rm -f mysql(删除数据库容器

mysql


    从上面可以看到如下特点:

    1、 一条指令运行一个数据库,再也不用担心写程序的时候,还要想着配置数据库了;

    2、 一条指令删除卸载数据库,再也不用担心安装数据库破坏了本地干净的文件系统了;

    3、 快速安装开发环境,再也不用烦心数据库还需要各种安装步骤了;

    4、 换一套环境,也是这条指令安装数据库,再也不用担心环境不同,测试能运行,而生产不能运行了;

    5、 最重要的一点。。。。运维可以失业了,大部分可以回家了

    有的时候你就会想,哎呀,每次都要运行一个指令,还那么多参数,我记不住怎么办呢?那么。。docker-compose出场了,so。。。你只要写一个配置文件。。。。

运维的威胁-容器技术-LMLPHP

    是不是感觉很酷。。。

    一个配置文件就运行了一个数据库。。。。

    一个配置文件就能运行一个redis缓存。。。。

    一个配置文件就能运行各种各样的中间件。。。

    

    在其中还能做的更多。。。。有的时候java出现了OOM怎么办。。。让运维那群傻逼重启一下么,不需要!!!容器发现了OOM可以做健康检查,可以自动重启!!!


    开发环境。。。。测试环境。。。生产环境。。。无缝迁移!!!修改配置?基本不需要。。。只要一次编译,就能到处浪啊浪。。。。


    还在想着玩玩mysql,各种安装心烦么。。。用docker吧。。。

    还在想着玩玩redis,各种折腾的步骤么。。。用docker吧。。。


    用了docker之后,你会发现。。。just fuck it。。。无须惧怕。。。


    但是,作为运维,你颤抖了么。。。你怕么,哈哈。。。。

    

容器

    docker。。。容器的代名词,而容器只是一个可写层而已,看看容器的发展进化。。。


    docker主要提供单主机的功能,

    docker-machine主要提供多主机安装docker的功能,

    docker-compose提供多个服务之间的依赖关系功能,

    docker swarm mode和kubenerts主要提供服务的编排功能。


    最终的目标不过都是进行简化。

    etcd的raft协议还是有点意思。毕竟在这个里面还是没有脑裂的概念的。

    split brain。。。。都不用shoot head。。。


    强一致性。。。分布式。。。


    走的太快,容易迷失。。。。so 。。。。find a way to  pass through。。。

其他闲扯

    1、 品牌效应

     树立一个什么样的形象呢?程序狗?还是啥。。。


    如果你是技术迷,而别人提到你的时候,说你的交际能力不错,这。。。可能并没有展现你的实力。。。

    

    这就是为什么提到python的时候,别人都会说,这种语言好慢好慢。。。


    2、格局

    碰到一些人,碰到一些事,我是应该给赞美还是攻击。。。


    每次看到不能忍的事和人的时候,我就提醒自己,大局观,大局观,要不然估计上来就直接开始怼,开始秒杀了,简直是FUCK了。。。


    每次看到不能忍的时候,怒火千丈。。。这尼玛,遇到你是我的缘。。。尼玛,孽缘啊。。。。。


    3、 战力

    忍的太多,感觉战力在下降,一看到高手就想投降,大哥,别打脸。。。


    一群怂逼影响了战力的发挥。。。。


     当尖刺都抹掉了,那就没有战无不胜的勇气了。。。。SO。。。FUCK IT。。。。just   fuck it。。。。

    

    

运维的威胁-容器技术-LMLPHP


    运维这么难,让我们写写python吧。。。但是。。。我都忘记了啊。。。。

    

01-15 05:48