docker知识点概要

docker知识点概要

1、什么是docker?(说说你对docker的了解)
(1)Docker是一种轻量虚拟化的容器技术,提供类似虚拟机的隔离功能,并使用了一种分层的联合文件系统技术管理镜像,能极大简化环境运维过程。
(2)Docker是容器运行的引擎(容器系统)负责启动容器镜像、运行容器应用和管理容器实例,并且支持在多种主流平台(PaaS)和本地部署。
(3)Docker将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。
(4)Docker是一个容器化平台,它以容器的形式将您的应用程序及其所有依赖项打包在一起,以确保您的应用程序在任何环境中无缝运行。Docker的英文本意是“搬运工”, Docker搬运的是集装箱(Container),集装箱里装的是任意类型的应用程序和该应用程序所依赖的环境。

2、什么是容器?
容器是一种打包应用的方式,可以帮你打包应用中的所有软件和软件所依赖的环境,并且可以实现跨平台部署。相比虚拟机,容器更高效和轻量化。

3、容器和虚拟化的区别?
虚拟机:
(1)资源占用多
(2)冗余步骤多
(3)启动慢
启动操作系统需要多久,启动虚拟机就需要多久。可能要等几分钟,应用程序才能真正运行。
由于虚拟机存在这些缺点,所以又发展出了另一种虚拟化技术:容器(Containers)。
容器:
容器不是模拟一个完整的操作系统,而是对进程进行隔离。或者说,在正常进程的外面套了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。
容器:由于容器是进程级别的,相比虚拟机有很多优势。
(1)启动快
容器里面的应用,直接就是底层系统的一个进程,而不是虚拟机内部的进程。所以,启动容器相当于启动本机的一个进程,而不是启动一个操作系统,速度就快很多。
(2)资源占用少
容器只占用需要的资源,不占用那些没有用到的资源;虚拟机由于是完整的操作系统,不可避免要占用所有资源。
(3)体积小
容器只要包含用到的组件即可,而虚拟机是整个操作系统的打包,所以容器文件比虚拟机文件要小很多。
(4)简化部署:容器技术可以将应用打包成单一地址访问的、Registry存储的、 仅通过一行命令就可以部署完成的组件。
(5)服务组合:采用容器的方式进行部署,整个系统会变得易于组合,通过容器技术将不同服务封装在对应的容器中,之后结合一些脚本使这些容器按照要求相互协作,这样操作不仅可以简化部署难度还可以降低操作风险。
(6)易于迁移:容器技术最重要的价值就是为在不同主机上运行服务提供一个轻便的、一致的格式。容器格式的标准化加快交付体验,允许用户方便地对工作负载进行迁移。
容器与虚拟化的区别,简单来说:
虚拟化使得多个操作系统可同时运行在单个系统上
容器则可共享同一个操作系统的内核,将应用程序与系统其它部分隔离开

4、为什么需要容器?容器到底解决的是什么问题?
简要的答案是:容器使软件具备了超强的可移植能力。

5、Docker的体系架构。
Docker 的核心组件包括:
 Docker 客户端:Client
 Docker 服务器:Docker daemon
 Docker 镜像:Image
 Registry:镜像仓库
 Docker 容器:Container
Docker镜像:
Docker 镜像是用于创建Docker容器的模板。

Docker容器:
Docker容器就是Docker镜像的运行实例,容器是独立运行的一个或一组应用。镜像类似于操作系统,而容器类似于虚拟机本身。它可以被启动、开始、停止、删除等操作,每个容器都是相互隔离的。

Registry镜像仓库:
Registry是存放Docker镜像的仓库,Registry分私有和公有两种。
Docker Hub (https://hub.docker.com/)是默认的Registry,由Docker公司维护,上面有数以万计的镜像,用户可以自由下载和使用。
出于对速度或安全的考虑,用户也可以创建自己的私有Registry,后面我们会学习如何搭建私有Registry。
docker pull命令可以从Registry下载镜像。
docke run命令则是先下载镜像(如果本地没有),然后再启动容器。

6、什么是Docker镜像?
答:Docker镜像用于创建容器。使用build命令创建镜像。

7、什么是Docker容器?
答:Docker容器包括应用程序及其所有依赖项,作为操作系统的独立进程运行。

8、docker两种构建镜像的方法。
(1) docker commit
docker commit命令是创建新镜像最直观的方法,其过程包含三个步骤
• 运行容器。
• 修改容器。
• 将容器保存为新的镜像。
缺点是:
使用者并不知道镜像是如何创建出来的,里面是否有恶意程序。也就是说无法对镜像进行审计,存在安全隐患。
(2) Dockerfile文件,它记录了镜像构建的所有步骤。

9、Dockerfile 常用指令有哪些?(重要)
(1)FROM:指定基础镜像
(2)LABEL:功能是为镜像指定标签
(3)RUN:运行指定的命令
(4)CMD:容器启动时要运行的命令
(5)COPY:将文件从 build context 复制到镜像。复制指令,和ADD差不多,但是有区别。
(6)ADD:与 COPY 类似,从 build context 复制文件到镜像。不同的是,如果 src 是归档文件(tar, zip, tgz, xz 等),文件会被自动解压到 dest。
(7)ENV:设置环境变量,环境变量可被后面的指令使用,并在容器运行时保持。
(8)EXPOSE:告诉Docker服务器暴露的端口号,供互联系统使用。
(9)VOLUME:将文件或目录声明为 volume。使容器中的一个目录具有持久化存储数据的功能,该目录可以被容器本身使用,也可以共享给其他容器使用。
(10)ENTRYPOINT:设置容器启动时运行的命令。
Dockerfile 中可以有多个 ENTRYPOINT 指令,但只有最后一个生效。CMD 或 docker run 之后的参数会被当做参数传递给 ENTRYPOINT。
(11)HEALTHCHECK:容器健康状况检查命令。

DockerFile解析:
FROM 基础镜像,当前新镜像是基于哪个镜像的。
MAINTAINER 镜像维护者的姓名和邮箱地址。
RUN 容器构建时需要运行的命令。
EXPOSE 当前容器对外暴露出的端口。
WORKDIR 指定在创建容器后,终端默认登陆的进来工作目录,也不是运行并登录进来的当前目录位置。
ENV 用来构建镜像过程中设置环境变量。
ADD 将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包。
COPY 类似ADD,但只是复制,不带解压压缩包的功能。
VOLUME 容器数据卷,用于数据保存和持久化工作。
CMD 指定一个容器启动时要运行的命令,DockerFile中可以有多个CMD指令,但只有最后一个会生效执行。
ENTRYPOINT
指定一个容器启动时要运行的命令
ENTRYPOINT的作用和CMD一样,都是在指定容器启动程序及参数
相当于CMD的升级版本,CMD只能执行一条命令,运行时如果加一些参数是不行的.但如果把CMD替换成ENTRYPOINT就可以在Run镜像的时候在尾部追回指令.

10、docker两种进入容器的方法。
我们经常需要进到容器里去做一些工作,比如查看日志、调试、启动其他进程等。有两种方法进入容器:attach 和 exec。
(1)docker attach:
通过docker attach可以attach到容器启动命令的终端。
① -it 以交互模式打开 pseudo-TTY,执行 bash,其结果就是打开了一个 bash 终端。注-t 选项让 Docker 分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上, -i则让容器的标准输入保持打开(即交互式)。
② 进入到容器中,容器的 hostname 就是其 “短ID”。
③ 可通 Linux 中一样执行命令。ps -elf 显示了容器启动进程while 以及当前的 bash 进程。
④ 执行 exit 退出容器(或者Ctrl+d或通过Ctrl+p ,然后Ctrl+q组合键退出容器),回到 docker host。
(2)docker exec -it bash|sh 是执行 exec 最常用的方式。
attach 与 exec 主要区别如下:
 attach 直接进入容器启动命令的终端,不会启动新的进程。
 exec 则是在容器中打开新的终端,并且可以启动新的进程。
 如果想直接在终端中查看启动命令的输出,用attach;其他情况使用exec。

11、stop/start/restart 容器
(1)通过 docker stop 可以停止运行的容器。
(2)可以通过 docker start 重新启动
(3)docker restart 可以重启容器,其作用就是依次执行 docker stop 和docker start。

12、pause/unpause 容器
暂时让容器暂停工作一段时间,比如要对容器的文件系统打个快照,或者 dcoker host 需要使用 CPU,这时可以执行 docker pause,取消暂停是unpause。
13、docker常用命令总结:
docker pull 拉取或者更新指定镜像
docker push 将镜像推送至远程仓库
docker rm 删除容器
docker rmi 删除镜像
docker images 列出所有镜像
docker ps 列出所有容器
docker export导出容器

docker import 从容器快照文件中再导入为镜像

docker rm 是删除容器

docker rmi 是删除镜像

docker inspect查看容器的信息
命令格式:docker inspect 容器ID或容器名

systemctl daemon-reload
systemctl restart docker 修改配置后重启docker

docker version 查看版本

docker images 列出本机docker上已经安装的镜像

docker pull +镜像名 从docker hub上面下载镜像

docker rmi +镜像名+
docker rmi -f 镜像ID
docker rmi -f $(docker images -qa) 删除所有镜像

-d: 后台运行容器,并返回容器ID,也就是启动守护士容器
-i: 以交互模式运行容器,通常与-t同时使用.

-t: 为容器重新分配一个伪终端,通过与-i同时使用
-P: 随机端口映射 [大写P]
-p: 端口映射 [小写P]

docker rm 容器ID或容器name 强制删除已经停止或正在运行的容器
docker rm -f 容器ID或容器name
docker rm -f $(docker ps -qa) 一次性删除所有正在运行的容器

重新进入容器
docker attach 容器ID或容器名称
docker exec -it rivertomcat /bin/bash
13、一个完整的docker组成部分?
1.dockerClient客户端,2.docker Daemon守护进程,3.docker Image镜像,4.dockerContainer容器

14、Docker和KVM的对比。
kvm: 1.虚拟机;2.使用复杂;3.启动过程慢(分钟);4.模板文件大;5.和物理机完全隔离;6.模拟的是一个完成系统,可以登入并实现管理。

docker:1.直接虚拟出一个用户空间;2.使用简单;3.启动非常快(秒级);4.模板文件小;5.在一定程度上和物理机隔离;6.仅仅是模拟一部分用户空间,不方便管理。

15、docker使用理由。
1.快速部署服务;2.实现隔离;3.让一个主机运行多个容器;4.提高开发效率;5.实现软件的跨平台。

16、docker镜像的操作命令总结(重要)
1.docker search nginx 查看注册表中是否有nginx镜像
2.docker image pull nginx 下载nginx镜像
3.docker image ls 查看本地镜像
4.docker image load < redis-img.tar.gz 导入redis镜像
5.docker image save nginx > nginx.tar.gz 导出nginx镜像
6.dcker inspect nginx 显示nginx镜像的详细信息
7.docker image rm nginx 删除镜像
8.docker push ip/nginx:v1 推送镜像nginx到本地仓库
9.docker tag nginx nginx:v1 给镜像nginx标记标签v1
10.docker history nginx 查看镜像nginx的历史构建信息

17、docker容器的操作命令(重要)
1.docker run -d redis 后台启动容器
2.docker ps 查看启动的容器
3.docker stop/start redis 停止/启动容器
4.docker exec -it redis bash 登入容器(常用用法)
5.docker rm -f redis 删除容器
6.docker rm $(docker ps -aq) 删除全部已退出的容器

18、Docker容器在任何给定时间点可以处于什么状态?
• 运行
• 已暂停
• 重新启动
• 已退出

19、有没有办法识别Docker容器的状态?
命令:docker ps –a

20、您将如何监控生产中的Docker?
Docker提供docker stats和docker events等工具来监控生产中的Docker。我们可以使用这些命令获取重要统计数据的报告。
Docker stats:当我们使用容器ID调用docker stats时,我们获得容器的CPU,内存使用情况等。它类似于Linux中的top命令。
Docker events:Docker events是一个命令,用于查看Docker守护程序中正在进行的任务。

21、Docker的四个网络模式(总结)
(1)none 网络:none 网络就是什么都没有的网络。这个网络下的容器除了 lo,没有其他任何网卡。容器创建时,可以通过 --network=none 指定使用 none 网络。
(2)host 网络:Host 模式并没有为容器创建一个隔离的网络环境。是因为该模式下的 Docker 容器会和 host 宿主机共享同一个网络 namespace。
(3)bridge 模式:是 Docker 默认的网络设置,为每一个容器分配 Network Namespace、设置 IP 等,并将一个主机上的 Docker 容器连接到一个虚拟网桥上。当 Docker server 启动时,会在主机上创建一个名为 docker0 的虚拟网桥,此主机上启动的 Docker 容器会连接到这个虚拟网桥上。
(4)user-defined网络:除了 none, host, bridge 这三个自动创建的网络,用户也可以根据业务需要创建 user-defined 网络。
Docker 提供三种 user-defined 网络驱动:bridge, overlay 和 macvlan。overlay 和 macvlan 用于创建跨主机的网络

22、Docker存储知识点整理:
Docker 为容器提供了两种存放数据的资源:
(1) 由 storage driver 管理的镜像层和容器层。这类容器是有状态的

(2) Data Volume:为了能够保存(持久化)数据以及共享容器间的数据。
Data Volume 本质上是 Docker Host 文件系统中的目录或文件,能够直接被 mount 到容器的文件系统中。Data Volume的特点总结如下:
Data Volume 是目录或文件,而非没有格式化的磁盘(块设备)。
容器可以读写 volume 中的数据。
volume 数据可以被永久的保存,即使使用它的容器已经销毁。
总结:Volume可以将容器以及容器产生的数据分离开来,这样,当你使用docker rm删除容器时,不会影响相关的数据。放在 Data Volume 中。这是需要持久化的数据,并且应该与镜像分开存放。
docker 提供了两种类型的 volume:bind mount 和 docker managed volume。
(1)bind mount
bind mount 是将 host 上已存在的目录或文件 mount 到容器。类似于 Linux 下对目录进行 mount。
(2)docker managed volume 与 bind mount 在使用上的最大区别是不需要指定 mount 源,指明 mount point 就行。

23、跨主机容器间如何通信?
跨主机网络方案:
docker 原生的 overlay 和 macvlan。
第三方方案:常用的包括 flannel、weave 和 calico。
flannel网络:
flannel是用于解决Dokcer跨主机通讯的工具。
原理总结:首先预先留出一个网段,flannel为每个host分配一个子网,容器从此子网中分配 IP,这些 IP 可以在 host 间路由,并让属于不在一个host上的容器能够直接通过内网IP通信。

你可能感兴趣的:(docker)