Docker思想:
1、集装箱:例如:当我们想把应用部署到另外一台机器上。传统做法,人为去打包代码并copy到另外一套机器,这个过程难免会出现遗漏配置文件或者JDK版本问题等,造成应用启动失败。docker的集装箱就是为了解决这个问题。它能保证程序无论想部署到哪里都可以保证应用运行时完整。
2、标准化:
2.1:运输方式:copy应用代码通常会选择U盘copy或者飞秋等通讯工具发过去。docker的运输方式就标准化了这个过程。docker里有超级码头的概念。我们只需执行命令,将应用代码放到超级码头。再在需要部署的机器上执行一个命令就会将代码通过鲸鱼(docker logo)运输到当前机器。
2.2:存储方式:无需关心应用代码存储的地址,只需运行命令启动即可。
2.3:API接口:docker提供许多restAPI接口,来控制应用的启动,停止,查看等。传统我们启动一个程序,如果使用tomcat,则使用startUp命令停止就shutdown,但如果不是tomcat服务器,就需要使用其他的服务器的命令。有了docker只需运行同样的命令就可以控制应用。无需关心服务器差异。
3、隔离(基于linux内核限制机制lxc:轻量容器虚拟化技术):类似虚拟机,创建虚拟机时cpu,硬盘和真实主机的cpu硬盘是隔离。docker类似,但docker更加轻量,创建虚拟机可能需要几分钟,而创建docker只需几秒。
Docker解决什么问题:
1、本地运行没问题,但部署到服务器运行有问题:解决运行环境不一致导致的应用启动问题。
2、和别人公用服务器时,出现系统卡,或者莫名自己的应用挂了。linux本身就是多组库的操作系统,是可以多人公用的。docker隔离性,就解决这个问题。大家都把各自的应用放入docker里运行。docker会为每个应用隔离分配资源(CPU,硬盘..)。假如:别人的应用出现死循环的问题,导致cpu沾满,我们又同时公用一台服务器,有了docker,只是会影响他自己的应用出现问题。并不会影响我们的应用。因为docker在启动时就为每个应用限定好了,最大使用的CPU硬盘等,如果他出现问题。docker会自动把其异常的进程杀掉。
3、双11,服务器撑不住了:docker方便临时扩展服务器量,快速部署。大大减少了运维的工作量。
Docker概念:
1、镜像(Build):应用打包后的集装箱。鲸鱼上面的集装箱
2、仓库(Ship):超级码头。
3、容器(Run):运行应用的服务器。
Docker简单运行流程:
1、docker images 查看本地docker daemon中所有的镜像。
2、docker pull [name] [version](不带version则会拉取最新的版本的镜像)从镜像仓库拉取镜像。docker pull hello-word
3、docker run [name] 运行镜像(容器)docker run hello-word docker run -d 后台运行镜像
4、docker exec -it +容器id/名字 (t:提供一个伪终端,方便输出命令)
运行的容器可以看做一个虚拟机器,当我们查看应用运行LOG时,使用docker exec打开伪终端
5、docker ps 查看当前机器上运行的容器。
6、docker stop 停止docker docker restart 重启docker
7、docker build 构建一个镜像。将本地应用打包成一个镜像。
注意:
1、docker pull [name] [version] 会先从本地docker daemon中查看是否存在该镜像, 如果本地没有,则会从docker的远程仓库中拉取镜像至本地仓库。与MAVEN类似。
2、使用docker run 中默认会先运行docker pull命令。然后把镜像启动变成容器。
3、docker官方提供的镜像仓库:https://hub.docker.com/explore/(国外) 国内代理:网易蜂巢 但一般大的公司都搭建有自己的私服。搭建Docker内网私服