摘要:刪除鏡像表示強(qiáng)行刪除是將鏡像保存成文件加載鏡像結(jié)語是個(gè)好東西,以上僅僅是一些常用基本操作,但它就像通往新世界的大門,為大規(guī)模集群化部署提供了可能,以后有空再寫一下容器編排的文章,敬請關(guān)注
引言
相信很多技術(shù)同學(xué)在開發(fā)時(shí)都會(huì)使用虛擬機(jī),配置好一個(gè)開發(fā)環(huán)境,以后使用時(shí)只需要啟動(dòng)虛擬機(jī)就好了。但虛擬機(jī)動(dòng)輒幾個(gè)GB,大一點(diǎn)兒的甚至幾百個(gè)GB,而且只要其中任意的虛擬機(jī)文件損壞,整個(gè)虛擬機(jī)就沒辦法啟動(dòng)了。你可能說應(yīng)該經(jīng)常備份,這的確是個(gè)好主意。但有沒有更好的辦法呢?今天鋼哥就帶著大家了解一下Docker(容器),看看它是否比傳統(tǒng)的虛擬機(jī)更適合我們。
什么是容器?顧名思義,容器就是用來裝東西的。我們平時(shí)喝水的杯子就是容器,只不過杯子這個(gè)“容器”是用來裝水的,而我們這里的容器裝的是應(yīng)用程序。
容器有什么特點(diǎn)?自包含性:它打包了應(yīng)用程序的所有依賴,可以直接運(yùn)行;
可移植性:容器可以在幾乎任何地方以相同的方式運(yùn)行,這就確保了在開發(fā)、測試和生產(chǎn)環(huán)境都可以擁有完全一樣的運(yùn)行環(huán)境;
相互隔離性:多個(gè)容器間默認(rèn)是相互隔離的,即使運(yùn)行在同一臺主機(jī)上;
輕量級特性:秒級啟動(dòng),占用資源少;
容器與虛擬機(jī)有什么區(qū)別?很多同學(xué)會(huì)覺得,容器能做的事虛擬機(jī)也能做啊,到底有什么區(qū)別呢?
虛擬機(jī)的缺點(diǎn)占用資源多;
冗余步驟多;
啟動(dòng)慢;
容器的優(yōu)點(diǎn)占用資源少;
提及??;
啟動(dòng)快;
下面是 Docker 官網(wǎng)截圖(后文會(huì)解釋什么是 Docker)
從這張圖我們可以看出,傳統(tǒng)的虛擬機(jī)非常重,每一個(gè)虛擬機(jī)都是一臺獨(dú)立的操作系統(tǒng)。而 Docker 則不同,它會(huì)重用宿主機(jī)已有的系統(tǒng)資源,同時(shí)又完美地隔離了不同的容器,所以實(shí)現(xiàn)起來非常輕,也便于被標(biāo)準(zhǔn)化。有同學(xué)會(huì)說,這跟傳統(tǒng)虛擬機(jī)也沒什么本質(zhì)差別啊,新的虛擬機(jī)罷了。其實(shí)不然,正是這種“輕量級”的特性,使其有機(jī)會(huì)成為新的標(biāo)準(zhǔn)化的應(yīng)用發(fā)布方式。
上世紀(jì)五六十年代出現(xiàn)了集裝箱,看上去也沒什么技術(shù)含量。但正是因?yàn)榧b箱是一種標(biāo)準(zhǔn)化的物流方式,從而全球的海陸空運(yùn)輸、碼頭裝卸等都圍繞著集裝箱形成了整個(gè)一個(gè)高效的物流體系,最終改變了世界貿(mào)易,促成了全球化。
Google的 Kubernetes(K8)現(xiàn)在已經(jīng)成為即成容器編排標(biāo)準(zhǔn)了,另外主流的容器編排工具還有 Docker Swarm 以及 Marathon/Mesos 。
什么是Docker?終于回到我們今天的正題了,究竟什么是 Docker ?Docker 是使用 Go 語言開發(fā)的一種 Linux 容器封裝,提供簡單易用的使用接口,是目前最流行的 Linux 容器解決方案。
Docker 的使用場景創(chuàng)建一致的開發(fā)、測試、生產(chǎn)環(huán)境;
創(chuàng)建資源隔離的運(yùn)行時(shí)環(huán)境;
創(chuàng)建多用戶的平臺即服務(wù)(PaaS)的基礎(chǔ)設(shè)施;
創(chuàng)建軟件即服務(wù)(SaaS)的應(yīng)用程序;
高性能、超大規(guī)模宿主機(jī)部署;
如何安裝 DockerDocker 是一個(gè)開源的商業(yè)產(chǎn)品,有兩個(gè)版本:社區(qū)版(Community Edition,縮寫為 CE)和企業(yè)版(Enterprise Edition,縮寫為 EE)。企業(yè)版包含了一些收費(fèi)服務(wù),個(gè)人開發(fā)者一般用不到。下面的介紹都針對社區(qū)版。
Docker CE 的安裝非常簡單,具體步驟可參考官方文檔。
Mac
Windows
Ubuntu
Debian
CentOS
Fedora
其他 Linux 發(fā)行版
Docker 常用命令 查看 Docker 版本docker version拉取 Docker 鏡像
我們可以去 Docker Hub 站點(diǎn)拉取公共的 Docker 鏡像。比如:搜索 nginx ,拉取官方的 nginx 鏡像。
docker pull nginx查看 Docker 鏡像
docker images運(yùn)行 Docker 鏡像
docker run -it -v /Users/kwang/docker:/usr/share/nginx/html/hello -p 80:80 -d nginx:latest
-i以交互模式運(yùn)行容器,通常與 -t 同時(shí)使用;
-t為容器重新分配一個(gè)偽輸入終端,通常與 -i 同時(shí)使用;
-p本機(jī)端口:容器端口 映射;
-d后臺運(yùn)行,并返回容器ID;
-v可以將本機(jī)目錄映射到容器內(nèi)。比如這里我就把我本機(jī)的/home/kwang/docker目錄映射到/usr/share/nginx/html/hello/目錄下;我在/home/kwang/docker/目錄下創(chuàng)建了一個(gè)靜態(tài)頁面index.html,內(nèi)容僅僅輸出hello world!。而/usr/share/nginx/html/目錄是容器內(nèi)的 nginx 網(wǎng)頁根目錄,這樣設(shè)置的目的是為了演示目錄映射。
運(yùn)行成功后,命令行返回一個(gè) Docker 容器的 ID(這個(gè)ID是隨機(jī)生成的,所以你看到的肯定跟我的不一樣)。
docker ps -a
可以看到我們剛才的鏡像已經(jīng)成功啟動(dòng)起來了,并且本機(jī)0.0.0.0:80端口已經(jīng)成功映射到容器里的80端口了,該容器ID的前幾位是7fcac910ad6a
打開本機(jī)瀏覽器,輸入:http://localhost:80,可以看到nginx已經(jīng)啟動(dòng)好了
如果更改瀏覽器地址:http://localhost/hello/,則可以看到我事先準(zhǔn)備好的index.html。
暫停運(yùn)行中的 Docker 容器docker stop 7fcac910ad6a
7fcac910ad6a是要暫停的容器ID,可以看到容器狀態(tài)已經(jīng)變成Exited退出狀態(tài)了。
啟動(dòng)已暫停的 Docker 容器docker start 7fcac910ad6a刪除運(yùn)行中的 Docker 容器
docker rm -f 7fcac910ad6a
-f參數(shù)是強(qiáng)行刪除。以命令行模式進(jìn)入容器
你可以用命令行模式進(jìn)入到容器內(nèi)部,就好像登錄到一臺新的 Linux 一樣。
docker exec -it 9ca4f91d4027 bash
exec是在運(yùn)行中的容器中運(yùn)行一個(gè)命令,該命令需要接受兩個(gè)參數(shù)。第一個(gè)是容器ID(這里是9ca4f91d4027),第二個(gè)參數(shù)是要執(zhí)行的命令(這里是bash)。執(zhí)行完畢后,我們就以bash命令行模式進(jìn)入到了容器內(nèi)部。
當(dāng)然,你隨時(shí)可以用exit命令從容器中退出。從運(yùn)行中的 Docker 容器生成 Docker 鏡像
docker commit -m "kenny nginx" -a "kenny" 9ca4f91d4027 kenny/nginx:1.0
-m 是說明信息
-a 是用戶信息
kenny/nginx:1.0 分別是鏡像的用戶名、倉庫名和tag信息
可以看到 Docker 鏡像已成功生成。
我們可以創(chuàng)建一個(gè)名為Dockerfile的文件,編輯內(nèi)容如下:
# 基于哪個(gè)Docker鏡像生成新鏡像 FROM nginx:latest # 構(gòu)建者的基本信息 MAINTAINER kenny.wang # 在build這個(gè)鏡像時(shí)執(zhí)行的操作 RUN apt-get update # 拷貝本地文件到鏡像中 COPY ./index.html /usr/share/nginx/html/
執(zhí)行build命令生成 Docker 鏡像。
docker build -t="kenny/nginx:2.0" .
-t 用來指定用戶信息、tag等
. 是當(dāng)前目錄,用來尋找 Dockerfile
再次用docker images查看,新的鏡像已成功生成。
docker rmi -f 83a85d2939a2
-f 表示強(qiáng)行刪除將 Docker 鏡像保存成 tar 文件
83a85d2939a2 是 docker image id
docker save -o kenny_nginx.tar kenny/nginx:2.0加載 Docker 鏡像
docker load -i kenny_nginx.tar結(jié)語
Docker 是個(gè)好東西,以上僅僅是一些常用基本操作,但它就像通往新世界的大門,為大規(guī)模集群化部署提供了可能,以后有空再寫一下容器編排的文章,敬請關(guān)注!
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/27302.html
說明 ? 本文通過簡單的示例,帶領(lǐng)初學(xué)者快速邁入Docker、Kubernetes(K8S)容器世界的大門。假設(shè),你已擁有一個(gè)K8S集群,否則,可通過minikube或minishift快速搭建一實(shí)驗(yàn)環(huán)境。 Docker Docker與K8S ? Docker本質(zhì)上是一種虛擬化技術(shù),類似于KVM、XEN、VMWARE,但其更輕量化,且將Docker部署在Linux環(huán)境時(shí),其依賴于L...
閱讀 648·2023-04-26 02:59
閱讀 758·2023-04-25 16:02
閱讀 2228·2021-08-05 09:55
閱讀 3700·2019-08-30 15:55
閱讀 4812·2019-08-30 15:44
閱讀 1851·2019-08-30 13:02
閱讀 2267·2019-08-29 16:57
閱讀 2347·2019-08-26 13:35