本系列文章將介紹Docker的有關知識:
(1)Docker 安裝及基本用法
(2)Docker 鏡像
(3)Docker 容器的隔離性 - 使用 Linux namespace 隔離容器的運行環境
(4)Docker 容器的隔離性 - 使用 cgroups 限制容器使用的資源
(5)Docker 網絡
對于每個軟件,除了它自身的代碼以外,它的運行還需要有一個運行環境和依賴。不管這個軟件是象往常一樣運行在物理機或者虛機之中,還是運行在現在的容器之中,這些都是不變的。在傳統環境中,軟件在運行之前也需要經過 代碼開發->運行環境準備 -> 安裝軟件 -> 運行軟件 等環節,在容器環境中,中間的兩個環節被鏡像制作過程替代了。也就是說,鏡像的制作也包括運行環境準備和安裝軟件等兩個主要環節,以及一些其他環節。因此,Docker 容器鏡像其實并沒有什么新的理論,只是這過程有了新的方式而已。
鏡像(image)是動態的容器的靜態表示(specification),包括容器所要運行的應用代碼以及運行時的配置。Docker 鏡像包括一個或者多個只讀層( read-only layers ),因此,鏡像一旦被創建就再也不能被修改了。一個運行著的Docker 容器是一個鏡像的實例( instantiation )。從同一個鏡像中運行的容器包含有相同的應用代碼和運行時依賴。但是不像鏡像是靜態的,每個運行著的容器都有一個可寫層( writable layer ,也成為容器層 container layer),它位于底下的若干只讀層之上。運行時的所有變化,包括對數據和文件的寫和更新,都會保存在這個層中。因此,從同一個鏡像運行的多個容器包含了不同的容器層。
Docker 有兩種方式來創建一個容器鏡像:
創建一個容器,運行若干命令,再使用 docker commit 來生成一個新的鏡像。不建議使用這種方案。 創建一個 Dockerfile 然后再使用 docker build 來創建一個鏡像。大多人會使用 Dockerfile 來創建鏡像。1. docker build 生成鏡像
1.1 生成過程實例
在使用 Dockerfile 創建容器之前,需要先準備一個 Dockerfile 文件,然后運行 docker build 命令來創建鏡像。我們通過下面的例子來看看Docker 創建容器的過程。
FROM ubuntu:14.04MAINTAINER sammy "sammy@sammy.com"RUN apt-get updateRUN apt-get -y install ntpEXPOSE 5555CMD ["/usr/sbin/ntpd"]
這是一個非常簡單的Dockerfile,它的目的是基于 Ubuntu 14.04 基礎鏡像安裝 ntp 從而生成一個新的鏡像??纯雌溥^程:
root@devstack:/home/sammy/ntponubuntu# docker build -t sammy_ntp2 .Sending build context to Docker daemon 2.048 kBStep 1 : FROM ubuntu:14.04 ---> 4a725d3b3b1cStep 2 : MAINTAINER sammy "sammy@sammy.com" ---> Using cache ---> c4299e3f774cStep 3 : RUN apt-get update ---> Using cache ---> 694a19d54103Step 4 : RUN apt-get -y install ntp ---> Running in 9bd153c65a76Reading package lists......Fetched 561 kB in 10s (51.1 kB/s)Selecting previously unselected package libedit2:amd64.(Reading database ... 11558 files and directories currently installed.)...Processing triggers for libc-bin (2.19-0ubuntu6.9) ...Processing triggers for ureadahead (0.100.0-16) ... ---> 9cc05cf6f48dRemoving intermediate container 9bd153c65a76Step 5 : EXPOSE 5555 ---> Running in eb4633151d98 ---> f5c96137bec9Removing intermediate container eb4633151d98Step 6 : CMD /usr/sbin/ntpd ---> Running in e81b1eae3678 ---> af678df648bcRemoving intermediate container e81b1eae3678Successfully built af678df648bc
新聞熱點
疑難解答