后端面试知识点总结 其他

Docker

Docker是在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等,极大的简化了容器的创建和维护。使得docker技术比虚拟机更为轻便、快捷。

与传统虚拟机比较

  • 传统虚拟机:虚拟出一套硬件,在其上运行一个完整的操作系统,在该系统上再运行应用程序
  • docker:容器内的应用程序直接运行于宿主的内核中,容器内没有自己的内核,而且没有进行硬件虚拟;每个容器内都有一个属于自己的文件系统,互不影响。

Docker优势

  • 更高效的利用系统资源:内核级别的虚拟化,可以在一个物理机上运行很多的容器实例
  • 更快速的启动速度
  • 一致的运行环境
  • 持续交付和部署
  • 更轻松地迁移
  • 更轻松的维护和扩展

Docker概念

  • 镜像(Image):docker镜像就像一个模板,可以通过这个模板来创建容器服务。通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中)
  • 容器(Container):Docker利用容器技术,独立运行一个或者一个组应用,通过镜像来创建的。具有启动、停止、删除等一些基本命令。可以把容器理解为一个简易的linux系统。
  • 仓库(Repository):仓库就是存放镜像的地方。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eGnI3ogZ-1602224518932)(C:/Users/free/Desktop/面试/interviewmd/assets/post/others/docker.png)]

底层原理

Docker是怎么工作的?

Docker 是一个Client-Server结构的系统,Docker的守护进程运行在主机上。通过Socket从客户端访问。

Docker相对于VM有更少的抽象层。他利用的是宿主机的内核,VM需要guest OS

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VdSEsPG1-1602224518935)(C:/Users/free/Desktop/面试/interviewmd/assets/post/others/vmdocker.png)]

常用命令

帮助命令

docker version
docker info		// 显示docker系统信息,包括镜像和容器的数量
docker 命令 --help	// 帮助命令

镜像命令

docker images	// 查看主机上的所有镜像
docker search image-name		// 搜索远程仓库镜像
docker pull image-name[:tag]	// 下载远程镜像
docker rmi -f image-name/image-id	// 删除指定镜像
docker rmi -f $(docker images -aq)	// 删除所有镜像

容器命令

docker pull image-name			// 新建容器
docker run [可选参数] image		// 启动一个全新的容器
docker run -d --name nginx01 -p 3344:80 nginx
-d	// 后台运行
--name	// 名字
-p	// 外部端口映射,使用主机的3344端口映射到容器内的80端口

docker ps	// 列出运行中的容器
-a			// 列出所有运行过的容器
exit		// 退出容器
ctrl+p+q	// 不停止容器退出
docker attach container-id 	// 进入一个正在运行的容器终端,不会开启一个新的终端 
docker exec -it container-id /bin/bash	// 进入容器并开启一个新的终端

docker start 容器id		// 启动一个停止的容器
docker restart 容器id		// 重启
docker stop 容器id		// 停止当前容器
docker kill 容器id		// 强制停止当前容器

其他命令

docker run -d centos		// 后台启动
// docker容器使用后台运行,就必须有一个前台进程,如果没有应用,docker就会自动停止
docker logs					// 查看日志
-tf							// 显示日志
--tail number				// 要显示的日志条数
docker inspect container-id	// 查看容器信息

docker cp container-id:path dstpath

Docker镜像

镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需要的所有内容,包括代码、运行时库、环境变量和配置文件等。

所有的应用,直接打包docker镜像,可以直接跑起来。

Docker镜像加载原理

  • UnionFS(联合文件系统)
    • 一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)
    • Union文件系统是Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
    • 特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层文件和目录。
  • Docker镜像加载原理
    • Docker的镜像实际上有一层一层的文件系统组成,这种层级的文件系统UnionFS。
    • bootfs(boot file system)主要包含bootloader和kernel,bootloader主要是引导加载kernel,Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是bootfs。这一层与典型的Linux/Unix系统是一样的,包含bootloader和kernel。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统会卸载bootfs。
    • rootfs(root file system),在bootfs之上,包含的就是典型linux系统中的/dev,/proc,/bin,/etc等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如ubuntu、centos等等。
    • 对于一个精简的OS,rootfs可以很小,只需要包含最基本的命令,工具和程序库就可以了,因为底层直接用host的kernel,自己只需要提供rootfs就可以了。由此可见对于不同的linux发行版,bootfs基本是一致的,rootfs会有差别,因此不同的发行版可以公用bootfs。
  • Docker镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部。这一层被称为容器层,容器之下的都叫做镜像层。

容器数据卷

容器之间的一个数据共享的技术,docker容器产生的数据,同步到本地。

目录的挂载,将我们容器内的目录,挂载到linux上面。

容器数据卷技术是为了容器的持久化和同步操作。容器间数据也是可以共享的。

使用数据卷

  • 创建容器时直接使用命令来挂载 -v

  • docker run -it -v 主机目录:容器内目录
    
具名和匿名挂载
  • 匿名挂载:只指定容器内路径
  • 具名挂载:-v 卷名:容器内路径
  • 指定路径挂载:-v 宿主机路径:容器内路径
  • 指定权限:-v :容器内路径:ro/rw,ro表示只读,rw表示可读可写,是针对容器内的文件
  • ro表示只读,容器内无权限进行修改,只能在宿主机操作。

Dockerfile

dockerfile就是用来构建docker镜像的构建文件,命令脚本。

通过这个脚本可以生成一个镜像。镜像是一层一层的,那么脚本也是一个一个的命令,一个命令就是一层。

FROM centos
VOLUME ["volume01", "volume02"]
CMD echo "--end--"
CMD /bin/bash 
// 每一句就是一层

可以使用docker inspect container-id查看卷挂载的目录

基础知识
  • 每个保留关键字(指令)都必须是大写字母
  • 执行从上到下顺序执行
  • #表示注释
  • 每一个指令都会创建提交一个新的镜像层,并提交。

Dockerfile是面向开发的,以后发布项目,做镜像,就需要编写dockerfile文件。

Dockerfile指令
FROM				# 基础镜像,一切从这里开始构建
MAINTAIN			# 镜像是谁写的,一般为名字+邮箱
RUN					# 镜像构建的时候需要运行的命令
ADD					# 向里面添加内容,比如tomcat等
WORKDIR				# 镜像的工作目录
VOLUME				# 挂载卷目录
EXPOSE				# 指定暴露的端口
RUN					# 开始运行
CMD					# 指定启动的时候要运行的命令,只有最后一个会生效,可以被替代,不能追加命令
ENTRYPOINT			# 指定启动的时候要运行的命令,可以追加命令
ONBUILD				# 当构建一个被继承dockerfile时候会运行这个指令。是一个触发指令
COPY				# 类似于COPY,将文件拷贝到镜像
ENV					# 构建的时候设置环境变量

例子:

FROM centos
# 设置维护者名称
MAINTAINER elbow95
# 设置环境变量
ENV MYPATH /usr/local
# 设置工作目录
WORKDIR $MYPATH
# 安装软件
RUN yum -y install vim
RUN yum -y install net-tools
# 暴露端口
EXPOSE 80
CMD echo 

你可能感兴趣的:(知识点总结,面试知识点,后端)