【Docker 系列】docker 学习十一,docker 总结和面试题整理

简介: 【Docker 系列】docker 学习十一,docker 总结和面试题整理

使用 Docker 容器化封装应用程序的好处:

  • Docker 环境

Docker 引擎统一了基础设施环境,包括硬件配置,操作系统的版本,运行时环境的异构

  • Docker 镜像

Docker 引擎统一了程序打包(装箱)的方式,例如 java 程序,go 程序,python 程序等等

  • Docker 容器

Docker 引擎统一了程序部署(运行)方式,例如 java 的部署运行方式为 java -jar...,或者 python 的部署运行 python manage.py runserver,go 的部署运行 go run ...

现在使用 Docker 容器,统一使用 docker run …

使用 Docker 容器化封装应用程序的坏处:

  • Docker 是单机使用的,无法有效集群
  • 随着容器数量的上升,管理的成本也越来越高
  • 没有有效的容灾或者自愈机制
  • 没有预设编排模板,无法实现快速,大规模容器调度
  • 没有同意的配置管理中心
  • 没有容器生命周期的管理工具
  • 没有图形化运维工具 等等

Docker 如何集群部署,不使用 k8s 的话:

docker compose 是单机部署的,使用集群部署我们可以使用 docker stack

例如 docker compose 部署单机是这个样子的:

docker-compose up -d xxx.yml

使用 docker stack 的时候,我们可以这样:

docker stack depoly xxx.yml

咱们来看看 docker stack是什么?

Docker 在进行多服务部署和管理时通常会使用Docker Stack来解决大规模部署管理问题

Docker引擎在1.12 版本集成了Docker Swarm, 内置新的容器编排工具docker stack,通过提供期望状态、滚动升级、简单易用、扩缩容、健康检查等特性简化了应用的管理

说白了,docker stack可以完成docker本身做不到的事情,就是他可以完成容器编排,但是这里我们就会有这么一个疑问?有了 docker compose 为什么还要有docker stack?

什么是docker swarm?

Docker swarm 是 Docker 的本机群集

它将 Docker主机池转变为单个虚拟Docker主机

Docker swarm 提供标准的 Docker API,任何已经与 Docker 守护进程通信的工具都可以使用Swarm透明地扩展到多个主机

Docker Stack 与 Docker Compose的区别

  • docker stack 是swarm mode的一部分, 即使是单机使用, 也需要一个 swarm 节点
  • docker stack 强化了service的概念

服务可理解为发布到生产环境时某组容器的预期状态 ,以及强化了( 复制集、 容器重启策略、回滚策略、服务更新策略 )等生产特性

  • docker stack 不支持 build 指令 ,而 docker compose 不支持 deploy 指令
  • docker stack几乎能做 docker-compose 所有的事情,后续统一还是使用 kubernetes 更香

总得来说,docker stack 适用于生产环境的编排工具,而 docker-compose 更适合被定义为单机容器编排的工具

如何使用 docker stack?

# docker stack --help
Usage:  docker stack [OPTIONS] COMMAND
Manage Docker stacks
Options:
      --orchestrator string   Orchestrator to use (swarm|kubernetes|all)
Commands:
  deploy      Deploy a new stack or update an existing stack
  ls          List stacks
  ps          List the tasks in the stack
  rm          Remove one or more stacks
  services    List the services in the stack
Run 'docker stack COMMAND --help' for more information on a command.
命令 描述
docker stack deploy 部署新 stack 或更新现有 stack
docker stack ls 显示 stack 列表
docker stack ps 列出 stack 中的任务
docker stack rm 移除一个或多个 stack
docker stack services 列出 stack 中的服务

例如咱们在随便在网上就可以找一个例子,

DockerFile 里面写使用 docker stack 时,就可以写成 deploy: 来进行指定

什么是 Docker ?

是一个容器化平台以容器的形式将应用程序及其所有依赖项打包,确保应用程序在任何环境中无缝运行

Docker 里面有 docker 镜像,docker 容器 和 docker 仓库

  • docker 镜像

是docker容器的源代码,Docker镜像用于创建容器

  • docker 容器

它不依赖于任何特定的基础架构,它们可以在任何计算机,任何基础架构和任何云中运行

  • docker 仓库

用来保存镜像的,可以看做是一个代码控制中心

Docker容器常见的几种状态

  • 运行中
  • 暂停
  • 重新启动中
  • 已退出

Docker与虚拟机有何不同?

docker 不是虚拟化方法,他是一个工具,用于容器化系统上的容器管理或应用程序部署

它依赖与实际实现基于容器的虚拟化或操作系统及虚拟化的其他工具,Docker主要专注于在应用程序容器内自动部署应用程序

Docker 的网络类型有哪些模式?

  • bridge 模式

docker默认的网络配置,可以设置IP,但是要与docker host主机的虚拟网络在同一网段

  • none 模式

不会给容器进行任何网络配置

  • host 模式

直接使用 docker 宿主机的网络

  • container 模式

与已经存在的容器共有同一个IP地址

  • network 模式

自定义网络,咱们可以使用 docker network create 来新建一个网络

Docker 数据如何持久化?

咱们可以使用 挂载卷,就是在创建容器的时候使用 -v参数,进行绑定挂载,匿名挂载,或者具名挂载 ,咱们就可以将宿主机的目录或者文件挂载到容器中

绑定挂载

就是明确将自己宿主机的目录或者文件,对应到容器中指定的目录或文件,会有这样的特点:

  • 数据卷是目录或文件,不能是没有格式化的磁盘(块设备)
  • 挂载的文件和目录会随源文件和目录变化而变化
  • 容器可以读写挂载卷中的数据
  • 卷中的数据可以永久保存,即使使用它的容器已经被销毁

匿名 / 具名挂载

就是 -v后面带的参数若只写容器中的路径(匿名挂载)或者写了一个代号,指定容器中的路径(具名路径)

默认为挂载到容器的工作目录,/var/lib/docker/volumes下面

Docker 容器内部的机制是什么样的?

每个容器都是在自己的名命空间中运行,但使用与所有其他容器完全相同的内核

发生隔离是因为内核知道分配给进程的命名空间,并且在API调用期间确保进程只能访问其自己的命名空间中的资源

如何临时退出一个正在交互的容器的终端,而不终止它?

使用ctrl+ q + p即可

如何停止 / 删除所有正在运行的容器?

docker kill $(docker ps -aq)

docker rm $(docker ps -aq)

如何删除所有本机所有的镜像?

docker rmi $(docker images -aq)

Dockerfile 中常见的指令有哪些?

  • FROM

构建镜像基于哪个镜像

  • MAINTAINER

镜像维护者姓名或邮箱地址

  • RUN

构建镜像时运行的指令

  • CMD

运行容器时执行的shell环境

  • VOLUME

指定容器挂载点到宿主机自动生成的目录或其他容器

  • USER

为RUN、CMD、和 ENTRYPOINT 执行命令指定运行用户

  • WORKDIR

为 RUN、CMD、ENTRYPOINT、COPY 和 ADD 设置工作目录,就是切换目录

  • HEALTHCHECH

健康检查

  • ARG

构建时指定的一些参数

  • EXPOSE

声明容器的服务端口(仅仅是声明)

  • ENV

设置容器环境变量

  • ADD

拷贝文件或目录到容器中,如果是URL或压缩包便会自动下载或自动解压

  • COPY

拷贝文件或目录到容器中,跟ADD类似,但不具备自动下载或解压的功能

  • ENTRYPOINT

运行容器时执行的shell命令

关于 Docker 的学习资料其实都在 docker hub上面,我们可以不断的学习,实战,总结,优化思维,逐步进阶

参考资料:

docker docs

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是小魔童哪吒,欢迎点赞关注收藏,下次见~

相关文章
|
1月前
|
存储 JSON 网络协议
Docker面试整理-如何查看和管理Docker容器的日志?
通过本文的介绍,我们了解了如何查看和管理Docker容器的日志,包括使用 `docker logs`命令、配置日志驱动、设置日志选项和集中日志管理。掌握这些技能,不仅可以在面试中展示专业水平,也能在实际工作中高效
181 3
|
2月前
|
算法 前端开发 Java
数据结构与算法学习四:单链表面试题,新浪、腾讯【有难度】、百度面试题
这篇文章总结了单链表的常见面试题,并提供了详细的问题分析、思路分析以及Java代码实现,包括求单链表中有效节点的个数、查找单链表中的倒数第k个节点、单链表的反转以及从尾到头打印单链表等题目。
37 1
数据结构与算法学习四:单链表面试题,新浪、腾讯【有难度】、百度面试题
|
2月前
|
Java 应用服务中间件 程序员
JVM知识体系学习八:OOM的案例(承接上篇博文,可以作为面试中的案例)
这篇文章通过多个案例深入探讨了Java虚拟机(JVM)中的内存溢出问题,涵盖了堆内存、方法区、直接内存和栈内存溢出的原因、诊断方法和解决方案,并讨论了不同JDK版本垃圾回收器的变化。
44 4
|
2月前
|
存储 Ubuntu Linux
学习docker
学习docker
51 1
|
2月前
|
NoSQL Linux Redis
Docker学习二(Centos):Docker安装并运行redis(成功运行)
这篇文章介绍了在CentOS系统上使用Docker安装并运行Redis数据库的详细步骤,包括拉取Redis镜像、创建挂载目录、下载配置文件、修改配置以及使用Docker命令运行Redis容器,并检查运行状态和使用Navicat连接Redis。
352 3
|
2月前
|
运维 Kubernetes 开发者
Docker Swarm学习
【10月更文挑战第5天】
42 3
|
2月前
|
Kubernetes Linux 持续交付
docker容器学习
【10月更文挑战第1天】
46 1
|
2月前
|
XML 前端开发 Java
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
本文阐述了Spring、Spring Boot和Spring MVC的关系与区别,指出Spring是一个轻量级、一站式、模块化的应用程序开发框架,Spring MVC是Spring的一个子框架,专注于Web应用和网络接口开发,而Spring Boot则是对Spring的封装,用于简化Spring应用的开发。
197 0
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
|
3月前
|
网络协议 算法 数据库
|
3月前
|
存储 Ubuntu Docker
Docker学习
Docker学习
66 4

热门文章

最新文章