深入原理64式:22 docker知识总结

1 docker基础
1.1 什么是docker?
是基于Go语言实现的开源容器项目。将应用程序和依赖打包,确保应用在环境中无缝运行。

1.2 什么是docker容器?
用来运行和隔离应用,容器是从镜像创建的应用运行示例。

1.3 如何使用Docker构建与环境无关的系统?
卷,环境变量导入,只读文件系统

1.4 Dockerfile中的命令COPY和ADD命令有什么区别?
虽然两者都可以将主机资源复制到容器镜像中。但ADD还具备本地tar
提取和远程url支持。ADD的最佳用途就是将本地tar文件自动提取到镜像,
例如ADD xxx.tar.gz /

1.5 什么是Docker镜像?
类似虚拟机镜像,是只读模板,是docker容器的源码。用于创建容器。

1.6 什么是Docker Hub?
是基于云的注册表服务,允许构建镜像并推送。

1.7 Docker容器在任何给定时间点可以处于什么状态?
docker容器有运行,暂停,重新启动,退出4种状态。

1.8 有没有办法识别Docker容器的状态?
通过docker ps -a会列出所有可用的docker容器机器状态。

1.9 Dockerfile中最常见的指令是什么?
FROM: 设置基本镜像
LABEL: 将元数据添加到镜像,LABEL是键值对。样例: LABEL version="1.0"
RUN: 执行命令并创建新的镜像层,通常用于安装软件包。 RUN <命令>,样例: RUN    apt-get    update
CMD: 容器启动命令,即制定默认容器朱金城的启动命令。 CMD <命令>,样例: CMD ["sh", "-c", "service nginx start"]

1.10 什么类型的应用程序 - 无状态或有状态更适合Docker容器?
最好为docker容器创建无状态应用程序,因为更容易扩展,

1.11 解释基本的Docker使用工作流程
首先编写Dockerfile,然后用Dockerfile来构建镜像,
将镜像上传到仓库,使用镜像来运行容器。

1.12 Docker Image和Layer有什么区别?
image:即镜像,是由一系列只读层构建的
layer: 每个层代表Dockerfile中的指令。

1.13 什么是虚拟化?
虚拟化允许你可以在同一个硬件上运行不同的操作系统。
有三种类型的虚拟化:
仿真,半虚拟化,基于容器的虚拟化

1.14 什么是管理程序?
管理程序处理虚拟机运行的虚拟环境,介于虚拟机和物理机之间,为虚拟机提供虚拟化服务。
借助于管理程序(例如KVM等)。

1.15 什么是Docker Swarm?
是docker集群管理工具,将docker主机池转变为一个虚拟docker主机。

1.16 您将如何监控生产中的Docker?
可以通过docker stats和docker events监控。
docker stats:可以获取容器cpu,内存使用情况
docker events: 查看docker守护进程中正在进行的任务。常见事件有
                attach, commit, dir, detach等。


2 docker深入
2.1 docker 后端存储驱动 devicemapper、overlay 几种的区别?
docker的驱动有aufs,overlay和devicemapper等。
1) aufs:Another UnionFS,是一种联合文件系统,将多层文件系统联合挂载成统一
    的文件系统,最上层是可写层,下面所有层是只读层,对应于docker,最上层是容器层,底层是镜像层。
架构如下:
c28 容器层
91e    }
d74 }  镜像层
c22    }
2) overlay: 也是联合文件系统,但overlay只有两层。upper文件系统和lower文件系统
        分别表示容器层(upper)和镜像层(lower)。当修改文件时,使用CopyW将文件从
        只读的lower层复制到可写层upper,结果保存在upper层。
架构如下: 
容器挂载                      merged
容器层 file4 file5            upperdir
镜像层 file1 file2 file3      lowerdir

3)device mapper:
提供从逻辑设备到物理设备映射框架。它是块级存储,对块而不是文件进行操作。
会在块设备上创建资源池,在资源池创建文件系统的设备,镜像是设备的快照,容器是镜像的快照。

3 docker命令
3.1 如何批量删除或者停止运行的容器?
docker rm `docker ps -aq`

3.2 如何查看镜像支持的环境变量?
docker run <image_id> env

3.3 本地的镜像文件都存放在哪里?
放在/var/lib/docker目录。
container: 存放容器信息
graph: 存放镜像信息
aufs: 存放镜像底层文件

3.4 构建Docker镜像应该遵循哪些原则?
保持镜像精简
1) 选择较小基础镜像
2) 清理缓存等临时文件
3) 多个连续RUN命令可以放在一起
4) 将不常修改的内容作为基础镜像

3.5 容器退出后,通过docker ps 命令查看不到,数据会丢失么?
docker ps -a命令可以查看,数据不丢失,
只有删除容器才会清除数据。

3.6 如何临时退出一个正在交互的容器的终端,而不终止它?
先ctrl + p后ctrl + q
不要使用ctrl + c会使得进程终止而容器终止。

3.7 很多应用容器都是默认后台运行的,怎么查看它们的输出和日志信息?
docker logs <container_id>

3.8 使用docker port 命令映射容器的端口时,系统报错Error: No public port ‘80’ published for …,是什么意思?
Dockerfile中要指定EXPOSE暴露的端口,容器启动指定PublishAllPort=true

3.9 可以在一个容器中同时运行多个应用进程吗?
可以通过进程管理机制例如supervisord来管理。

3.10 如何控制容器占用系统资源(CPU,内存)的份额?
docker run用-c指定cpu,用-m指定内存。

3.11 仓库(Repository)、注册服务器(Registry)、注册索引(Index)有何关系?
仓库是存放一组关联镜像的地方;
注册服务器是实际存放镜像的地方,
注册索引提供认证,标签,搜索等。
注册服务器利用注册索引来实现认证管理。

3.12 从非官方仓库(如:dl.dockerpool.com)下载镜像的时候,有时候会提示“Error:Invaild registry endpoint https://dl.docker.com:5000/v1/…”?
需要添加对非官方仓库的信任。
DOCKER_OPTS="-insecure-registry dl.dockerpool.com:5000"
重启docker服务

3.13 Docker的配置文件放在那里。如何修改配置?
centos是在:/etc/sysconfig/docker,

3.14 如何更改Docker的默认存储设置?
默认是/var/lib/docker,可以使用linux软链接来做。

4 docker与虚拟化
4.1 docker与LXC(Linux Container)有什么不同?
LXC利用Linux技术实现容器。
docker有如下改进:
1)移植性,抽象容器配置,可从一个平台移植到另一个平台
2) 镜像系统: 基于AUFS联合文件系统,共同镜像只需存储一份。

4.2 Docker与Vagrant有何不同?
Vagrant是虚拟机管理环境,可在多种系统和虚拟机上运行。
docker启动和运行比虚拟机块。

4.3 开发环境中Docker与Vagrant该如何选择?
docker不是虚拟机,进程隔离,资源消耗少,
Vagrant是虚拟机封装。虚拟机本身消耗资源。

4.4 如何将一台宿主机的docker环境迁移到另外一台宿主机?
停止docker。将docker存储文件复制到另一台机器,调整另一台机器的配置即可。

4.5 Docker容器创建后,删除了/var/run/netns 目录下的网络名字空间文件,可以手动恢复它?
查看容器进程id
docker inspect --format='{{.State.pid}}' <container_id>
到proc目录下,把对应网络命名空间文件链接到/var/run/netns即可。

参考:
https://blog.csdn.net/Lockey23/article/details/78705593
https://www.jianshu.com/p/2de643caefc1
https://blog.csdn.net/cowbin2012/article/details/89716748
https://blog.csdn.net/g6u8w7p06dco99fq3/article/details/93261888
https://blog.csdn.net/lixiao0320/article/details/94348042
https://blog.csdn.net/luyongchuan/article/details/88788315
https://blog.csdn.net/dejunyang/article/details/91449860

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值