一文詳解Docker輕量級虛擬化,鏡像和容器
什么是虛擬化技術?
對于一個服務器來說,大多數時候資源都是閑置狀態,并沒有得到充分利用。所以,對于一些初創公司來說,還沒有穩定業務,就自建機房,配置大量服務器,還有高昂的運維成本。
因此,現在大多數公司在初期都將業務放到云端,需要多少資源,就租用相應規模的服務器。云服務提供商會將服務器劃分成多份,并且相互隔離,這就是虛擬化技術。
比如,剛畢業的學生,開始工資不高,不僅無法買房,也租不起大的房子,很多選擇合租。房東將整個房子劃分成幾個單間,分別出租,這也類似于虛擬化的原理。
什么是Docker?
Docker是一個開源的容器引擎,它基于LXC容器技術,使用Go語言開發。
源代碼托管在Github上,并遵從Apache2.0協議。
Docker采用C/S架構,其可以輕松的為任何應用創建一個輕量級的、可移植的、自給自足的容器。
簡單來說:Docker就是一種快速解決生產問題的一種技術手段。
Docker是容器的一種,而容器不僅僅是Docker。
早期的虛擬化比如VMWare虛擬機,一個虛擬機可以同時運行多個操作系統。但是,每個虛擬機都要虛擬化單獨的硬件資源,這樣,就會消耗更多的資源,主服務器可以虛擬化出的獨立空間就越小。
而容器技術最顯著的特點是所有容器都可以共有主服務器的硬件資源,這樣就使得容器更加輕量化,啟動速度也更快。但是Docker只能支持Linux系統,所有容器都共用一個Linux內核。
容器:顧名思義,就是可以裝物品的東西。每個容器可以按照我們的需求裝物品,不同容器間相互隔離,攜帶方便。比如,一家人外出旅行,每個人都在自己的旅行包裝上自己需要的生活物品。
或者說生活中很痛苦的事情就是電腦系統重裝,要重復配置各種軟件,但是只要提前制作一個系統盤,把常用的軟件提前安裝好,重裝系統后自動包括所有的軟件。
在云平臺上,容器裝載的物品就是不同應用。比如,公司在A云平臺部署了自己的項目,現在發現B云平臺價格更加優惠,性能也更好,直接將A云平臺容器打包切換到B云平臺,而不需要重復配置環境,安裝軟件。
ubuntu安裝Docker
注冊Docker賬號
docker官網:
doker加速器:在國內使用docker的官方鏡像源,會因為網絡的原因,造成無法下載,或者一直處于超時,所以我們使用 daocloud 的方法進行加速配置。
查看國內源:
Docker鏡像
Docker鏡像是一個只讀的文件,就類似于我們安裝操作系統時候所需要的那個iso光盤鏡像,通過運行這個鏡像來完成各種應用的部署。
通過 docker search ubuntu 查找鏡像:
如果獲取鏡像具體版本可以官網上搜索Ubuntu,點擊Tags,在后面搜索版本號:
刪除鏡像:
鏡像資源改名操作:docker tag ubuntu:20.04 myubuntu:1.0
該操作會保留原有鏡像,不需要可以自行刪除。
壓縮鏡像,以后用到直接解壓:docker save -o ubuntu.tar ubuntu
導入ubuntu.tar壓縮包:docker load -i ubuntu.tar
查看指定鏡像歷史:docker image history ubuntu:20.04
容器命令
利用ubuntu20.04鏡像創建一個名為myrq的容器,并進入容器,執行/bin/bash:
exit退出容器:
利用鏡像ubuntu:20.04創建一個容器:docker create -it ubuntu:20.04
啟動容器:docker start 容器
停止容器:docker stop 容器
重啟容器:docker restart 容器
列出本地所有容器:docker ps -a
創建并啟動一個容器:docker run -itd ubuntu:20.04
進入容器:docker attach 容器
掛起容器:先按Ctrl-p,再按Ctrl-q
在容器中執行命令:docker exec 容器 命令
刪除容器(先關閉容器):docker rm 容器
將容器CONTAINER導出到本地文件xxx.tar中:docker export -o xxx.tar 容器
將本地文件xxx.tar導入成鏡像,并將鏡像命名為image_name:tag:docker import xxx.tar image_name:tag
通過容器生成的鏡像創建容器:run -it --name myrq4 ubuntu:1.0 /bin/bash
查看所有容器的統計信息,包括CPU、內存、存儲、網絡等信息:docker stats
在本地和容器間復制文件:docker cp xxx CONTAINER:xxx 或 docker cp CONTAINER:xxx xxx
重命名容器:docker rename CONTAINER1 CONTAINER2
刪除所有已停止容器:docker container prune
批量刪除所有容器,先用命令列出所有容器id并賦值給變量a:
強制刪除所有容器: