个人亲历运维面试 - docker部分

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容器 

 

posted @ 2020-03-17 14:57  Wshile  阅读(1335)  评论(0编辑  收藏  举报