# Docker
# 容器
没有集装箱之前运输货物,东西零散容易丢失,有了集装箱之后货物不容易丢失,我们可以把货物想象成程序,目前我们要把程序部署到一台新的机器上,可能会启动不起来,比如少一些配置文件什么的或者少了什么数据,有了docker的集装箱可以保证我们的程序不管运行在哪不会缺东西.
# 标准化
# 运输
使用docker命令让🐋把程序送到超级码头,在让🐋把货物送到目的地
# 存储
目的地需要有一个目录,下次如果修改会用到
# API接口
docker提供了系列rest api的接口 包含了对我们应用的停止查看删除等等,如启动tomcat时要执行startup命令,停止时执行shutdown命令,有了docker我们记docker的命令就可以对其进行操作
# 隔离
虚拟机运行时有自己的cpu、硬盘、内存,完全感受不到外面主机的存在,docker也差不多,但docker更轻量,秒启动应用
# docker解决的问题
# 系统环境不一致
docker把操作系统,jdk,tomcat,代码,配置全部放到集装箱里面,再打包放在🐋上,由🐋送到服务器上,在我的机器上怎么运行,在别的机器上也怎么运行,不会有任何的问题
# 多用户同时操作导致系统卡
公用服务器,比如linux,多个用户同时操作的时候卡顿,docker的隔离性就可以解决这个问题,
不管别人写的程序怎么出错,在docker启动时就限定好了,它的最大使用限定 如果超过了,就会杀掉对应进程
# 双十一来了,服务器撑不住
大部分系统业务量每天都不是平均的 特别是电商系统,运维调整服务器规模又非常麻烦,有了docker就只用点击一下,分分钟的事
# 走进docker
镜像就是集装箱
仓库就是超级码头
容器就是运行程序的地方
codker运行程序的过程就是去仓库把镜像拉到本地,然后用一条命令把镜像运行起来变成容器
# 镜像
image 集装箱就是镜像
镜像就是一系列的文件,可以包含我们应用程序的文件,也可以包括我们应用的运行环境的文件
linux的联合问价系统,是一种分层的文件系统,可以将不同的目录挂到同一个虚拟文件系统下
比如A文件夹有code文件,work文件,B文件夹有java,tomcat文件
联合文件夹C可以看到code文件,work文件,java,tomcat文件
可以在一个文件夹下看到多个文件夹的内容
通过这种方式可以实现文件的分层,docker就是这样实现了镜像存储
镜像的存储方式 最下面一层往上,一层层叠在一起。下面是操作系统的引导,linux,相关的软件,自己的程序,tomcat,jdk,在上是应用代码,每一层都可以自己控制,最上一层和容器有关。每一层都是只读的,然后每一层加载完后会被看成是同一个目录,相当于只有一个文件系统.docker的这种文件系统被称为镜像
# 容器
为了便于理解,大家可以把容器想象成虚拟机,每个虚拟机都有自己的文件系统,可以把图1整个一部分看成是文件系统,与虚拟机系统的区别是这里面的文件系统是一层一层的,并且最下面的n层都是只读的,只有上面一层是可写的.为什么要有可写的这层呢?大家的程序运行起来,势必会要写一些日志,写一些文件,或者对系统的某一些文件做一些修改,所以容器在最上面一层创建了可读可写的文件系统.
在程序的运行过程中,如果要写镜像文件时,因为镜像的每一层都是只读的,它会把文件的每一层拷到文件的最上层,然后再对它进行修改,修改之后,当我们的应用读一个文件时会从顶层进行查找,如果没有才会找下一层.
由于容器的最上一层是可以修改的,镜像是不能修改的,这样就能保证镜像可以生成多个容器独立运行,没有任何干扰.
# 仓库
我们要先把我们的镜像传到docker仓库中,再由目的地把docker仓库拉过去,这就完成了这样的一次传输过程.
谁提供了这样的仓库呢?docker自己提供了,hub.docker.com,但是非常慢,为了解决这个问题,国内很多公司也在做自己的仓库.比较知名的是由网易蜂巢提供的 https://c.163yun.com/hub#/m/home/
# 命令
docker远程仓库拉取镜像到本地 name是拉取镜像的名称 TAG是可选的
docker pull [options] NAME[:TAG]
options 是选项 后面的指定镜像的名称
docker images [options] [REPOSITORY[:TAG]]
IMAGE是镜像的名字 COMMAND是运行起来要执行的命令 ARG是运行需要的参数
docker run [options] IMAGE[:TAG][COMMAND][ARG..]
运行容器
docker run hub.c.163.com/library/nginx
在后台运行容器
docker run -d hub.c.163.com/library/nginx
查看运行的容器
docker ps