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