【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 中的服务

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

image

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下面

image

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

欢迎点赞,关注,收藏

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

image

好了,本次就到这里

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

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,287评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,346评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,277评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,132评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,147评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,106评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,019评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,862评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,301评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,521评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,682评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,405评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,996评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,651评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,803评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,674评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,563评论 2 352

推荐阅读更多精彩内容