docker入門實例
Docker 是什麽?
我們在理解 Docker 之前,首先得先區分清楚兩個概念,容器和虛擬機。
每臺虛擬機都需要有自己的操作系統,虛擬機一旦被開啟,預分配給它的資源將全部被占用。
每一臺虛擬機包括應用,必要的二進制和庫,以及一個完整的用戶操作系統。
而容器技術是和我們的宿主機共享硬件資源及操作系統,可以實現資源的動態分配。
容器包含應用和其所有的依賴包,但是與其他容器共享內核。容器在宿主機操作系統中,在用戶空間以分離的進程運行。
容器技術是實現操作系統虛擬化的一種途徑,可以讓您在資源受到隔離的進程中運行應用程序及其依賴關系。
通過使用容器,我們可以輕松打包應用程序的代碼、配置和依賴關系,將其變成容易使用的構建塊,從而實現環境一致性、運營效率、開發人員生產力和版本控制等諸多目標。
容器還賦予我們對資源更多的精細化控制能力,讓我們的基礎設施效率更高。
Docker 屬於 Linux 容器的一種封裝,提供簡單易用的容器使用接口。它是目前最流行的 Linux 容器解決方案。
而 Linux 容器是 Linux 發展出的另一種虛擬化技術,簡單來講, Linux 容器不是模擬一個完整的操作系統,而是對進程進行隔離,相當於是在正常進程的外面套了一個保護層。
對於容器裏面的進程來說,它接觸到的各種資源都是虛擬的,從而實現與底層系統的隔離。
Docker 將應用程序與該程序的依賴,打包在一個文件裏面。運行這個文件,就會生成一個虛擬容器。
總體來說,Docker 的接口相當簡單,用戶可以方便地創建和使用容器,把自己的應用放入容器。容器還可以進行版本管理、復制、分享、修改,就像管理普通的代碼一樣。
Docker 的三個基本概念
Image(鏡像)
Docker 鏡像可以看作是一個特殊的文件系統,除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些為運行時準備的一些配置參數(如匿名卷、環境變量、用戶等)。
鏡像不包含任何動態數據,其內容在構建之後也不會被改變。鏡像(Image)就是一堆只讀層(read-only layer)的統一視角
Container(容器)
容器(Container)的定義和鏡像(Image)幾乎一模一樣,也是一堆層的統一視角,唯一區別在於容器的最上面那一層是可讀可寫的。
由於容器的定義並沒有提及是否要運行容器,所以實際上,容器 = 鏡像 + 讀寫層。
Repository(倉庫)
Docker 倉庫是集中存放鏡像文件的場所。鏡像構建完成後,可以很容易的在當前宿主上運行。
實際上,一個 Docker Registry 中可以包含多個倉庫(Repository),每個倉庫可以包含多個標簽(Tag),每個標簽對應著一個鏡像。
所以說,鏡像倉庫是 Docker 用來集中存放鏡像文件的地方,類似於我們之前常用的代碼倉庫。
通常,一個倉庫會包含同一個軟件不同版本的鏡像,而標簽就常用於對應該軟件的各個版本 。
我們可以通過<倉庫名>:<標簽>的格式來指定具體是這個軟件哪個版本的鏡像。如果不給出標簽,將以 Latest 作為默認標簽。
Docker 的安裝和使用
CentOS 7.4 64 位
由於 Docker-CE 支持 64 位版本的 CentOS 7 ,並且要求內核版本不低於 3.10,首先我們需要卸載掉舊版本的 Docker:
$ sudo yum remove docker
docker-client
docker-client-latest
docker-common
docker-latest
docker-latest-logrotate
docker-logrotate
docker-selinux
docker-engine-selinux
docker-engine
我們執行以下安裝命令去安裝依賴包:
$ sudo yum install -y yum-utils
device-mapper-persistent-data
lvm2
安裝 Docker
Docker 軟件包已經包括在默認的 CentOS-Extras 軟件源裏。因此想要安裝 Docker,只需要運行下面的 yum 命令:
$ sudo yum install docker
當然在測試或開發環境中 Docker 官方為了簡化安裝流程,提供了一套便捷的安裝腳本,CentOS 系統上可以使用這套腳本安裝:
curl -fsSL get.docker.com -o get-docker.shsh get-docker.sh
具體可以參看 docker-install 的腳本:
https://github.com/docker/docker-install
執行這個命令後,腳本就會自動的將一切準備工作做好,並且把 Docker CE 的 Edge 版本安裝在系統中。
安裝完成後,運行下面的命令,驗證是否安裝成功:
docker version 或者 docker info
返回 Docker 的版本相關信息,證明 Docker 安裝成功
應用:
我們通過最簡單的 Image 文件 Hello World,感受一下 Docker 的魅力吧!
我們直接運行下面的命令,將名為 hello-world 的 image 文件從倉庫抓取到本地:
docker pull library/hello-world
docker pull images 是抓取 image 文件,library/hello-world 是 image 文件在倉庫裏面的位置,其中 library 是 image 文件所在的組,hello-world 是 image 文件的名字。
抓取成功以後,就可以在本機看到這個 image 文件了:
執行 docker images 命令 查看本地鏡像:
執行 docker run hello-world 運行hello-world這個鏡像:
輸出這段提示以後,hello world 就會停止運行,容器自動終止。有些容器不會自動終止,因為提供的是服務,比如 MySQL 鏡像等。
Docker 提供了一套簡單實用的命令來創建和更新鏡像,我們可以通過網絡直接下載一個已經創建好了的應用鏡像,並通過 Docker RUN 命令就可以直接使用。
當鏡像通過 RUN 命令運行成功後,這個運行的鏡像就是一個 Docker 容器啦。
容器可以理解為一個輕量級的沙箱,Docker 利用容器來運行和隔離應用,容器是可以被啟動、停止、刪除的,這並不會影響 Docker 鏡像。
執行 docker ps -a 可以顯示所有的容器,包括未運行的。
docker入門實例