1:总体
1 Docker 和虚拟机有啥不同?
Docker是轻量级的沙盒,在Docker当中有操作系统的⽂件⽬录,但是没有操作系统的内核。
虚拟机⾥⾯运⾏着操作系统的。
2 Docker 安全么?
Docker的安全性不如虚拟机,主要原因在于:
Docker是操作系统上被限制的进程。
虚拟机⾥⾯是独⽴的操作系统。
但是,⼤量的⽣产环境证明,Docker的安全性还是很⾼的。
Docker的安全性主要是通过隔离技术,Namespace。
3 如何清理后台停⽌的容器?
单独删除:docker rm container_id
批量删除的命令:docker rm $(docker ps -a -q)
4 如何查看容器⾥⾯⽀持的环境变量?
命令:docker exec -it redis env
5 当启动容器的时候提示:exec format error?如何解决问题?
检查启动命令是否有可执⾏权限,进⼊容器当中,使⽤脚本进⾏排查。
权限的排查,我们直接使⽤ls -l命令。
6 如何退出⼀个镜像的 bash,⽽不终⽌它?
运⾏命令,Ctrl+p,然后Ctrl+q。
7 退出容器时候⾃动删除?
使⽤--rm参数。
rm参数不能与-d参数⼀起使⽤,如果⼀起使⽤,rm参数⽆效。
rm参数使⽤场景,适合临时启动的容器。
8 怎么快速查看本地的镜像和容器?
查看本地镜像:docker images
1. REPOSITORY
2. TAG
3. IMAGE ID
4. CREATED
5. SIZE
查看运⾏的容器:docker ps
1. CONTAINER ID
2. IMAGE
3. COMMAND
4. CREATED
5. STATUS
6. PORTS
7. NAMES
2:镜像相关
1 如何批量清理镜像⽂件?
删除单⼀镜像:
1. docker rmi 镜像的名字
2. docker rmi 镜像的id:注意点,当我们的镜像id关联多个镜像的时候,我们需要强制删除,添加-f参数进⾏强制删除。
批量删除镜像: docker rmi $(docker images -q)
2 本地的镜像⽂件都存放在哪⾥?
Centos系统,镜像存放在/var/lib/docker/overlay2下⾯。
具体的镜像存在哪个⽬录:可以通过命令docker inspect container_id。
镜像是分层来存放的:
LowerDir:底层只读层。
MergedDir:我们看到的最终的⽂件系统。
UpperDir:上层写过的层。
WorkDir:⼯作⽬录。
3 构建 Docker 镜像应该遵循哪些原则?
两⼤原则:
1. 安全:尽量使⽤官⽅的库、依赖以及官⽅的基础镜像。
2. ⽂件的⼤⼩:
1. 使⽤较⼩的基础镜像。
2. 清理⼀些临时⽂件、⽬录。清理⼀些不必要的依赖。
3. 制作镜像的时候,需要指定明确版本号。
3:容器相关
1 容器退出后,通过 docker ps 命令查看不到,数据会丢失么?
容器退出后,处于exited的状态,可以通过docker ps -a查到对应的容器。
其中数据是不会丢失的。
当我们删除容器的时候,才会去清除数据。
容器的状态的演变:
image --》create --》start --》stop --》rm。
2 如何直接删除所有正在运⾏的容器?
使⽤的命令:docker kill $(docker ps -q)
注意点:stop 和 kill 的区别:
stop:停⽌容器,停⽌的容器可以继续运⾏。
kill:删除容器,测试删除容器以及对应的数据。
3 如何清理批量后台停⽌的容器?
docker rm $(docker ps -a -q)
这⾥注意只会删除掉容器的状态是exited的容器。
4 很多应⽤容器都是默认后台运⾏的,怎么查看它们的输出和⽇志信息?
使⽤docker logs container_id命令。
5 使⽤ docker port 命令查看映射容器的端⼝时,系统报错 Error: No public port ‘80’ published是什么意思?
创建镜像的时候,在使⽤EXPOSE暴露端⼝的时候,⼀定要暴露正确的端⼝。
6 可以在⼀个容器中同时运⾏多个应⽤进程吗?
不建议在⼀个容器中运⾏多个进程,因为容器是单进程模型,期望功能单⼀的。
如果有需求,需要在容器⾥运⾏多个进程的话,需要创建⽗进程来管理他们。
7 如何控制容器占⽤系统资源(CPU,内存)的份额?
在我们使⽤docker create或者docker run命令的时候,可以使⽤以下的参数来限制资源:
-c:限制cpu的使⽤
-m:限制内存的使⽤
4:仓库相关
1 仓库(Repository)、注册服务器(Registry)、注册索引(Index)有何关系?
仓库:相关镜像的集合。
注册服务器:实际上存储镜像的地⽅。注册服务器是通过注册索引来实现的镜像相关管理。
注册索引:⽤户的账号、权限、搜索和标签等的管理。
2 从⾮官⽅仓库(如:http://aa.docker.com)下载镜像的时候,有时候会提 示“Error:Invaild registry endpoint https://aa.docker.com:500
0/v1/...”?
当我们需要从⾮官⽅仓库下载镜像的时候,我们需要将⾮官⽅仓库的地址加⼊到docker的配置⽂件中。
"insecure-registries": [
"aa.docker.com"
]
5:配置相关
1 Docker 的配置⽂件放在哪⾥?如何修改配置?
/etc/docker/daemon.json
修改配置的时候,注意要重启docker,配置才能⽣效。
2 如何更改 Docker 的默认存储位置?
默认的存储位置是/var/lib/docker。
当我们需要改变默认存储位置的时候,可以通过软连接来实现,将其他的⽬录软连接指向到/var/lib/docker⽬录。
6:Docker与虚拟化
1 Docker 与 LXC(Linux Container)有何不同?
LXC利⽤Linux上的相关技术实现的容器。
Docker是在基础上做了很多的优化与改进:
镜像系统 便于容器的分发
仓库系统 便于容器的分发
版本管理 类似Git的概念,进⾏镜像的创建于管理
周边⼯具 ⾮常的遍历
移植性 通过镜像不只是封装了应⽤的运⾏的包,还封装了相关的运⾏环境的配置
2 Docker 与 Vagrant 有何不同?
Vagrant ⼀个虚拟机的管理环境 借助Vagrant可以快速的部署⼀个虚拟机
Docker 只能运⾏在Linux平台上 启动和运⾏的性能⾮常快 ⽐虚拟机快的 更加适合快速开发和部署的场景。
3 开发环境中 Docker 与 Vagrant 该如何选择?
Docker 占⽤的资源⽐较少 ⽽且运⾏应⽤⽐较⽅⾯
Vagrant 本质是帮我们创建虚拟机
最终看我们运⾏的应⽤ 是想运⾏在虚拟机上 还是呢 以容器的⽅式运⾏。
7:其他
1 Docker 能在⾮ Linux 平台(Windows+MacOS)上运⾏吗?
Docker可以运⾏在⾮Linux平台上的,但是在⾮Linux平台上,底层是运⾏了⼀个微型的虚拟机的,Docker运⾏在
这个微型虚拟机上的。
2 如何将⼀台宿主机的 docker 环境迁移到另外⼀台宿主机?
停⽌Docker服务,将整个Docker的⽂件(包括配置⽂件)复制到另外⼀台机器上,在其他的机器上启动Docker。
运⾏的容器可以达成镜像,通过镜像进⾏容器的迁移⼯作。