国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Docker - 通往新世界的大門

cncoder / 1654人閱讀

摘要:刪除鏡像表示強行刪除是將鏡像保存成文件加載鏡像結語是個好東西,以上僅僅是一些常用基本操作,但它就像通往新世界的大門,為大規模集群化部署提供了可能,以后有空再寫一下容器編排的文章,敬請關注

引言

相信很多技術同學在開發時都會使用虛擬機,配置好一個開發環境,以后使用時只需要啟動虛擬機就好了。但虛擬機動輒幾個GB,大一點兒的甚至幾百個GB,而且只要其中任意的虛擬機文件損壞,整個虛擬機就沒辦法啟動了。你可能說應該經常備份,這的確是個好主意。但有沒有更好的辦法呢?今天鋼哥就帶著大家了解一下Docker(容器),看看它是否比傳統的虛擬機更適合我們。

什么是容器?

顧名思義,容器就是用來裝東西的。我們平時喝水的杯子就是容器,只不過杯子這個“容器”是用來裝水的,而我們這里的容器裝的是應用程序。

容器有什么特點?

自包含性:它打包了應用程序的所有依賴,可以直接運行;

可移植性:容器可以在幾乎任何地方以相同的方式運行,這就確保了在開發、測試和生產環境都可以擁有完全一樣的運行環境;

相互隔離性:多個容器間默認是相互隔離的,即使運行在同一臺主機上;

輕量級特性:秒級啟動,占用資源少;

容器與虛擬機有什么區別?

很多同學會覺得,容器能做的事虛擬機也能做啊,到底有什么區別呢?

虛擬機的缺點

占用資源多;

冗余步驟多;

啟動慢;

容器的優點

占用資源少;

提及小;

啟動快;

下面是 Docker 官網截圖(后文會解釋什么是 Docker)

從這張圖我們可以看出,傳統的虛擬機非常重,每一個虛擬機都是一臺獨立的操作系統。而 Docker 則不同,它會重用宿主機已有的系統資源,同時又完美地隔離了不同的容器,所以實現起來非常輕,也便于被標準化。有同學會說,這跟傳統虛擬機也沒什么本質差別啊,新的虛擬機罷了。其實不然,正是這種“輕量級”的特性,使其有機會成為新的標準化的應用發布方式。

上世紀五六十年代出現了集裝箱,看上去也沒什么技術含量。但正是因為集裝箱是一種標準化的物流方式,從而全球的海陸空運輸、碼頭裝卸等都圍繞著集裝箱形成了整個一個高效的物流體系,最終改變了世界貿易,促成了全球化。

Google的 Kubernetes(K8)現在已經成為即成容器編排標準了,另外主流的容器編排工具還有 Docker Swarm 以及 Marathon/Mesos 。

什么是Docker?

終于回到我們今天的正題了,究竟什么是 Docker ?Docker 是使用 Go 語言開發的一種 Linux 容器封裝,提供簡單易用的使用接口,是目前最流行的 Linux 容器解決方案。

Docker 的使用場景

創建一致的開發、測試、生產環境;

創建資源隔離的運行時環境;

創建多用戶的平臺即服務(PaaS)的基礎設施;

創建軟件即服務(SaaS)的應用程序;

高性能、超大規模宿主機部署;

如何安裝 Docker

Docker 是一個開源的商業產品,有兩個版本:社區版(Community Edition,縮寫為 CE)和企業版(Enterprise Edition,縮寫為 EE)。企業版包含了一些收費服務,個人開發者一般用不到。下面的介紹都針對社區版。

Docker CE 的安裝非常簡單,具體步驟可參考官方文檔。

Mac

Windows

Ubuntu

Debian

CentOS

Fedora

其他 Linux 發行版

Docker 常用命令 查看 Docker 版本
docker version

拉取 Docker 鏡像

我們可以去 Docker Hub 站點拉取公共的 Docker 鏡像。比如:搜索 nginx ,拉取官方的 nginx 鏡像。

docker pull nginx

查看 Docker 鏡像
docker images

運行 Docker 鏡像
docker run -it -v /Users/kwang/docker:/usr/share/nginx/html/hello -p 80:80 -d nginx:latest
-i以交互模式運行容器,通常與 -t 同時使用;
-t為容器重新分配一個偽輸入終端,通常與 -i 同時使用;
-p本機端口:容器端口 映射;
-d后臺運行,并返回容器ID;
-v可以將本機目錄映射到容器內。比如這里我就把我本機的/home/kwang/docker目錄映射到/usr/share/nginx/html/hello/目錄下;

我在/home/kwang/docker/目錄下創建了一個靜態頁面index.html,內容僅僅輸出hello world!。而/usr/share/nginx/html/目錄是容器內的 nginx 網頁根目錄,這樣設置的目的是為了演示目錄映射。

運行成功后,命令行返回一個 Docker 容器的 ID(這個ID是隨機生成的,所以你看到的肯定跟我的不一樣)。

查看運行中的 Docker 容器
docker ps -a

可以看到我們剛才的鏡像已經成功啟動起來了,并且本機0.0.0.0:80端口已經成功映射到容器里的80端口了,該容器ID的前幾位是7fcac910ad6a

打開本機瀏覽器,輸入:http://localhost:80,可以看到nginx已經啟動好了

如果更改瀏覽器地址:http://localhost/hello/,則可以看到我事先準備好的index.html

暫停運行中的 Docker 容器
docker stop 7fcac910ad6a

7fcac910ad6a是要暫停的容器ID,可以看到容器狀態已經變成Exited退出狀態了。

啟動已暫停的 Docker 容器
docker start 7fcac910ad6a
刪除運行中的 Docker 容器
docker rm -f 7fcac910ad6a
-f參數是強行刪除。
以命令行模式進入容器

你可以用命令行模式進入到容器內部,就好像登錄到一臺新的 Linux 一樣。

docker exec -it 9ca4f91d4027 bash
exec是在運行中的容器中運行一個命令,該命令需要接受兩個參數。第一個是容器ID(這里是9ca4f91d4027),第二個參數是要執行的命令(這里是bash)。執行完畢后,我們就以bash命令行模式進入到了容器內部。

當然,你隨時可以用exit命令從容器中退出。
從運行中的 Docker 容器生成 Docker 鏡像
docker commit -m "kenny nginx" -a "kenny" 9ca4f91d4027 kenny/nginx:1.0
-m 是說明信息
-a 是用戶信息
kenny/nginx:1.0 分別是鏡像的用戶名、倉庫名和tag信息

可以看到 Docker 鏡像已成功生成。

基于 Dockerfile 生成 Docker 鏡像

我們可以創建一個名為Dockerfile的文件,編輯內容如下:

# 基于哪個Docker鏡像生成新鏡像
FROM nginx:latest

# 構建者的基本信息
MAINTAINER kenny.wang

# 在build這個鏡像時執行的操作
RUN apt-get update

# 拷貝本地文件到鏡像中
COPY ./index.html /usr/share/nginx/html/

執行build命令生成 Docker 鏡像。

docker build -t="kenny/nginx:2.0" .
-t 用來指定用戶信息、tag等
. 是當前目錄,用來尋找 Dockerfile

再次用docker images查看,新的鏡像已成功生成。

刪除 Docker 鏡像
docker rmi -f 83a85d2939a2
-f 表示強行刪除
83a85d2939a2 是 docker image id
將 Docker 鏡像保存成 tar 文件
docker save -o kenny_nginx.tar kenny/nginx:2.0
加載 Docker 鏡像
docker load -i kenny_nginx.tar
結語

Docker 是個好東西,以上僅僅是一些常用基本操作,但它就像通往新世界的大門,為大規模集群化部署提供了可能,以后有空再寫一下容器編排的文章,敬請關注!


文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/27302.html

相關文章

  • 邁入Docker、Kubernetes容器世界大門

    說明 ? 本文通過簡單的示例,帶領初學者快速邁入Docker、Kubernetes(K8S)容器世界的大門。假設,你已擁有一個K8S集群,否則,可通過minikube或minishift快速搭建一實驗環境。 Docker Docker與K8S ? Docker本質上是一種虛擬化技術,類似于KVM、XEN、VMWARE,但其更輕量化,且將Docker部署在Linux環境時,其依賴于L...

    MASAILA 評論0 收藏0

發表評論

0條評論

cncoder

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<