Docker
1. docker通过哪些方式实现资源隔离的
Docker 主要通过六大 Namespace 来实现资源的隔离
- Mount Namespace,挂载命名空间,用来隔离挂载目录,让不同 Namespace 拥有独立的挂载结构,而程序中对挂载信息的修改不会影响到其他 Namespace 中程序的运行。
- UTS Namespace,UTS Namespace,用来隔离主机名和域名,通过UTS Namespace,让不同 Namespace 拥有独立的主机名称和网络访问域名。
- IPC Namespace,进程通信命名空间,用来隔离进程间通信,主要作用于 消息队列、信号量或者是管道,IPC 只能做到同一个命名空间进行通信,无法做到不同命名空间进行信息交换通信
- PID Namespace,进程命名空间,用来隔离进程的运行信息,PID Namespace 让命名空间拥有独立的进程号管理。
- Network Namespace,网络命名空间,用来隔离网络协议栈,包括网络设备接口、IPV4 和 IPV6 协议等。
- User Namespace,用户命名空间,用来隔离用户和用户组信息,通过严格的用户隔离机制,避免 Namespace 中的程序直接操作到宿主机或者其他 Namespace 中的用户。
2. docker有哪些组件组成
服务端
docker-engine:响应来自客户端的请求。通过专门的Engine模块来分发管理各个来自客户端的任务。
docker-proxy: 用来完成容器端口网络映射配置
containerd:响应来自dockerd的请求,对下管理runC镜像和容器环境。
containerd-shim:作为容器内进程的跟进程
客户端
docker-cli:为用户提供一系列可执行命令,实现用户与docker服务端交互
3. 用什么方式来固定容器ip
创建自定义网络
1 docker network create --subnet=172.18.0.0/16 mynetwork 2 ➜ ~ docker network ls 3 NETWORK ID NAME DRIVER SCOPE 4 9781b1f585ae bridge bridge local 5 1252da701e55 host host local 6 4f11ae9c85de mynetwork bridge local 7 237ea3d5cfbf none null local
创建docker容器
docker run -itd --name networkTest1 --net mynetwork --ip 172.18.0.2 centos:latest /bin/bash
4. 将容器的80端口映射到8080
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
5. attach和exec命令的区别
docker exec:
退出shell不会导致容器停止运行。
docker attach:
如果退出容器的shell,容器会停止运行。
6. docker cmd和entrypoint的区别
每个dockerfile中只能有一个CMD如果有多个那么只执行最后一个。CMD指令会被 docker run后的参数覆盖掉。
改参数也是多个只执行最后一个ENTRYPOINT命令则不会,它既能启动容器,还能执行ls -l命令。
7. docker的优点和缺点
优点:
1. 部署方便
2. 部署安全
3. 隔离性好
4. 快速回滚
5. 成本低
6. 管理成本低
缺点:
1. 必须在64位的系统上运行
2. 系统的内核必须是3.8或者更新
3. 内核必须支持cgroup和命名空间
8. docker组成
一个完整的Docker有以下几个部分组成:
dockerClient客户端
Docker Daemon守护进程
Docker Image镜像
DockerContainer容器