一、原理
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/143441.html
標籤:Linux
上一篇:日志切割之Logrotate
