参考博客:docker入门(利用docker部署web应用)
docker是一个用来装应用的容器,可以把任何想得到的程序放在docker中。
打包程序和运行的环境、配置文件这些。各个容器是隔离的。
镜像就是集装箱,仓库就是超级码头,容器就是我们运行程序的地方.docker运行程序的过程就是去仓库把镜像拉到本地,然后用一条命令把镜像运行起来变成容器.
build:构建,就是构建镜像.
ship:运输,运输镜像,从仓库和主机运输.
run:运行的镜像就是一个容器.
build,ship,run和镜像,仓库,容器是一一对应的.
从本质上来说镜像就是一系列文件,可以包括我们应用程序的文件,也可以包括我们应用的运行环境的文件.
说到存储格式,就要提到linux的一个存储技术,叫做联合文件系统,是一种分层的文件系统,可以将不同的目录挂到同一个虚拟文件系统下.(我记得当时是可以把本地文件挂载到容器中,应该就是这个原理).
这张图是分层的,最下面一层,上面也是一层层的好像集装箱罗列在一起.这就是镜像最直观的存储方式.下面是操作系统的引导,上面是linux操作系统,再上面是一些相关的软件,
如果是我们自己的程序,就可以是tomcat,jdk,再往上是应用代码,每一层是我们自己都可以控制得,最上面一层先忽略不看,因为这是和容器有关的.注意一点,docker镜像系统的每一层都是只读的,
然后把每一层加载完成之后这些文件都会被看成是同一个目录,相当于只有一个文件系统.docker的这种文件系统被称之为镜像.
为了便于理解,大家可以把容器想象成虚拟机,每个虚拟机都有自己的文件系统,可以把图1整个一部分看成是文件系统,与虚拟机系统的区别是这里面的文件系统是一层一层的,
并且最下面的n层都是只读的,只有上面一层是可写的.为什么要有可写的这层呢?
大家的程序运行起来,势必会要写一些日志,写一些文件,或者对系统的某一些文件做一些修改,所以容器在最上面一层创建了可读可写的文件系统.
在程序的运行过程中,如果要写镜像文件时,因为镜像的每一层都是只读的,它会把文件的每一层拷到文件的最上层,然后再对它进行修改,修改之后,
当我们的应用读一个文件时会从顶层进行查找,如果没有才会找下一层.
由于容器的最上一层是可以修改的,镜像是不能修改的,这样就能保证镜像可以生成多个容器独立运行,没有任何干扰.
使用docker
docker pull xxx
docker run xxx
docker images
docker ps (查看运行中的容器)
docker exec 进入容器
exit 退出
docker stop xxx
docker可以指定你想把容器内的某一个端口可以在容器所在主机上的某一个端口它俩之间做一个映射,当你在访问主机上的端口时,其实就是访问容器里面的端口.
docker run 8080:80 就是开放主机8080端口映射到容器的80端口上.
制作自己的镜像:
编写dockerfile文件
from hub.c.163.com/library/tomcat //tomcat镜像
maintainer xxx 123@qq.com //作者
COPY jpress.war /usr/local/tomcat/webapps //把本地我的press.war文件(应该是一些业务处理逻辑) 拷贝到tomcat镜像的webapps中
docker build .
运行起来后再拉个mysql的镜像运行起来,这就自己搭了个服务器了.
k8s是做容器调度的,当时是组内另一波做运维的同学在做。