一、原理 1、Hypervisor是一種運行在物理伺服器和操作系統之間的中間軟體層,可允許多個操作系統和應用共用一套基礎物理硬體,它能直接訪問物理設備,會給每一臺虛擬機分配記憶體、CPU、網路、磁碟等資源,也可以確保虛擬機對應的硬體資源不被其他虛擬機訪問,是所有虛擬化技術的核心。 2、虛擬機 指通過軟 ...
一、原理
1、Hypervisor是一種運行在物理伺服器和操作系統之間的中間軟體層,可允許多個操作系統和應用共用一套基礎物理硬體,它能直接訪問物理設備,會給每一臺虛擬機分配記憶體、CPU、網路、磁碟等資源,也可以確保虛擬機對應的硬體資源不被其他虛擬機訪問,是所有虛擬化技術的核心。
2、虛擬機 指通過軟體模擬的具有完整硬體系統功能的、運行在一個完全隔離環境中的完整電腦系統。虛擬機都會有自己的kernel,自己的硬體,這樣虛擬機啟動的時候需要先做開機自檢,啟動kernel,啟動用戶進程等一系列行為
3、namespace 是一種隔離機制,一個獨立的namespace看上去擁有所有linux主機的資源(進程ID、主機名、用戶ID、網路訪問、進程間通訊和文件系統等),也擁有自己的0號進程(即系統初始化的進程)。一個namespace可以產生多個子namespace
4、[Cgroups]:是Linux內核功能,它讓兩件事情變成可能:限制Linux進程組的資源占用(記憶體、CPU);為進程組製作 PID、UTS、IPC、網路、用戶及裝載命名空間。
5、docker-se 商業版 docker-ce 社區版
二、常用操作
1、更新yum
yum -y update
2、刪除舊版本
yum remove docker
3、下載安裝軟體
yum install -y yum-utils
4、配置官方源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
5、配置阿裡源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
6、下載docker
yum install docker-ce
7、啟動
systemctl start docker
8、查看docker版本
docker version
9、查看docker信息
docker info
10、查看本機所有image
docker image ls
11、下載鏡像(使用國內鏡像源)
docker image pull hello-world
配置加速 /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
12、運行docker
docker container run hello-world
13、刪除image(如果image被容器引用,必須銷毀這個容器,才能刪除image)
docker image rm hello-world
14、查看運行的中的容器
docker ps
docker ps -a 查看已經退出的容器
docker container ls 查看容器 -a 查看所有的
15、停止容器(狀態變成已終止)
docker stop 容器id[CONTAINER ID]
docker container prune 清除所有所有未運行的容器
16、查看容器日誌(容器的終端輸出)
docker logs 容器id[CONTAINER ID OR NAME]
17、刪除容器
docker rm 容器id[CONTAINER ID]
18、拉取ubuntu
docker pull ubuntu:18.04
運行 -i 互動式操作 -t 終端 --rm 容器退出後將其刪除 bash 使用bash當作交互
docker run -it --rm ubuntu:18.04 bash
19、運行nginx
docker pull nginx
啟動 --name 指定容器名稱, -d 後臺運行並列印容器id, -p 將容器埠映射到宿主機
docker run --name nginxweb -d -p 8080:80 nginx
訪問 127.0.0.1:8080
交互方式進到容器
docker exec -it nginxweb bash
將宿主機得文件複製到容器里
docker cp 宿主機文件 容器id:容器目錄
docker cp leopard/ 0944b902095c:/opt
20、啟動終止狀態的容器
docker container start [容器名]
修改exited狀態的容器下文件許可權
docker inspect [CONTAINER ID]
找見UpperDir對應的目錄,併進入,找見對應的文件進行修改即可
21、查看docker 不同
docker diff nginxweb
22、保存新鏡像(docker要在運行狀態)
--author 指定修改者 --message 記錄修改描述(類似git)
docker commit --author “[email protected]” --message “修改” nginxweb nginx:v1
給容器鏡像修改標簽
docker tag <image id> <tagname>
docker tag lifeilong:v1 lifeilong:latest
修改容器啟動時執行的命令
docker commit -a "lifeilong" -c 'CMD ["/bin/httpd", "-f", "-h", "/data/html"]' -p b2 lifeilong:v2
23、訂製自己的docker
touch Dockerfile創建配置文件,內容如下:
FROM nginx
RUN echo ‘<h1>Hello, Docker!</h1>’ > /usr/share/nginx/html/index.html
構建容器($(pwd)為上下文路徑)
docker build -t nginx:v2 $(pwd)
24、Dockerfile命令
COPY test.txt /home 將test.txt複製到容器/home目錄(會把文件的元數據也複製,許可權時間等)
ADD 高級的複製命令,原路徑可以是URL,壓縮文件會自動解壓
CMD 容器啟動命令
25、運行docker
docker run 時後臺操作:
1、檢查本地是否有鏡像,沒有就從共有倉庫下載
2、利用鏡像創建並啟動一個容器
3、分配一個文件系統
4、從宿主機網橋中橋接一個虛擬口到容器
5、從地址池配置一個IP地址給容器
6、執行用戶指定的應用程式
7、執行完終止容器
26、數據捲,容器內部及之間管理數據
1、創建數據捲
docker volume create my-vol
2、查看
docker volume ls
docker volume inspect my-vol 查看詳細信息
3、啟動掛載(將數據捲掛載到容器/webapp目錄)
docker run -d -P --name nginxtest --mount source=my-vol, target=/webapp nginx
4、刪除數據捲
docker volume rm my-vol
docker volume prune 刪除所有閑置數據捲
27、掛載主機目錄、文件
將主機目錄/home/webapp 掛載到容器/opt/webapp 預設許可權是讀寫,加readonly指定為只讀
docker run -d -P --name nginxtest --mount type=bind,source=/home/webapp/,target=/opt/webapp,readonly nginx
掛載文件
docker run -d -P --name nginxtest --mount type=bind,source=/home/webapp/,target=/opt/webapp,readonly nginx
28、網路容器互聯
創建網路 -d 標識網路類型
docker network create -d bridge my-net
啟動兩個容器test1和test2在同一網路
docker run -it --rm --name test1 --network my-net nginx bash
docker run -it --rm --name test2 --network my-net nginx bash