# 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

尚硅谷docker笔记 (opens new window)