个人亲历运维面试

摘要:
Docker1.Docker如何实现资源隔离。Docker通过六个命名空间实现资源隔离。MountNamespace用于隔离装载目录,以便不同的命名空间具有独立的装载结构。修改程序中的装载信息不会影响其他命名空间中程序的操作。UserNamespace是一个用户命名空间,用于隔离用户和用户组信息。通过严格的用户隔离机制,可以防止命名空间中的程序直接在主机或其他命名空间中的用户上运行。Dockerattach:如果退出容器外壳,容器将停止运行。dockerrun之后,CMD指令将被参数覆盖。

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

免责声明:文章转载自《个人亲历运维面试》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇[word]2010中插入公式自动编号并且公式不自动缩小/变小Android Studio NDK开发入门下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

docker服务编排--docker-compose

根据哔哩哔哩视频【docker入门2】实战~如何组织一个多容器项目docker-compose进行学习 利用网站https://labs.play-with-docker.com/进行测试 第一步,安装nginx镜像 # 拉取nginx镜像 docker pull nginx # 运行nginx容器 docker run -d -p80:80 --name...

dcos的问题汇总

. group 'docker' does not exist  需要手工创建docker组,这一步本来应该是在安装docker的时候来完成的,但是采用yum install的方式不行,需要添加一个docker的repo然后才能够安装。 2. ssh: connect to host 10.1.108.64 port 22: Operation timed...

docker 环境下通过ocelot和consul 实现服务发现与自治

Ocelot介绍 Ocelot的目标对象是使用.NET运行面向微服务/服务的架构,需要统一的入口点进入他们的系统。 特别是我希望与IdentityServer引用和承载令牌轻松集成。 Ocelot是一组按特定顺序排列的中间件。 Ocelot将HttpRequest对象操作到其配置指定的状态,直到它到达请求构建器中间件,在该中间件中,它创建一个HttpReq...

misconfiguration : kubelet cgroup driver: "systemd" is different from docker cgroup driver: "cgro

/* vim /etc/docker/daemon.json { "registry-mirrors": [ "https://a8qh6yqv.mirror.aliyuncs.com", "http://hub-mirror.c.163.com" ], "exec-opts": ["native.cgroupdriver=sy...

LXC(Linux containers)常用命令介绍

lxc-version 用于显示系统LXC的版本号(可以通过此命令判断系统是否安装了lxc) 用法:lxc-version 例如:lxc-version  lxc-checkconfig 用于判断linux内核是否支持LXC 用法:lxc-checkconfig 例如:lxc-checkconfig lxc-create用于创建一个容器 用法:lxc-cr...

docker 构建自己的image 镜像文件

docker build 构建自己的镜像文件。 1、在本地工程中运行生成一个springboot的可运行的jar。 因为我习惯用eclipse,所以在eclipse下新建一个springboot的工程,firstSpringboot的工程。 maven配置文件中,注意:必须指定生成文件后运行的主函数mian,否则可能导致的结果是无法访问main函数的错误。...