关于docker:Docker-系列docker-学习十一docker-总结和面试题整理

0次阅读

共计 3427 个字符,预计需要花费 9 分钟才能阅读完成。

应用 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

欢送点赞,关注,珍藏

敌人们,你的反对和激励,是我保持分享,提高质量的能源

好了,本次就到这里

技术是凋谢的,咱们的心态,更应是凋谢的。拥抱变动,背阴而生,致力向前行。

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

正文完
 0