走的太快,容易迷路;走的太快,容易撞墙;不过。。。。我喜欢。
走的太快,容易忘记本心,所以。。。回顾一下为什么要使用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。。。你只要写一个配置文件。。。。
是不是感觉很酷。。。
一个配置文件就运行了一个数据库。。。。
一个配置文件就能运行一个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。。。。
运维这么难,让我们写写python吧。。。但是。。。我都忘记了啊。。。。