1. 程式人生 > >Docker映象、容器的理解和使用方法

Docker映象、容器的理解和使用方法

零、應用背景

先看下面2個問題:

1. 單機多系統。如:windows上跑linux、VPS服務、PaSS服務。

windows上跑linux,一般用VM技術實現。

VPS提供商需要將一臺機器劃分成多個虛擬機器,提供給使用者,例如將一臺8核16G的物理機器劃分成8個1核2G(實際上會比這個少)給8個使用者使用,目的是實現使用者應用隔離。

PaSS服務提供商同VPS。

問題關鍵:模擬作業系統、使用者應用分隔

2. 應用釋出。

為了減少bug出現,要儘量使開發環境和生產環境一樣。

比如開發環境採用的是centos6.5 + nginx1.10.2 + php 5.6 + mysql 5.5,那麼生產環境就要採取一樣的軟體環境。如果開發環境做了修改,生產環境最好做一樣的修改(主要指安裝外掛,系統軟體版本升級)。

問題關鍵:環境同步

一、Docker和VM

VM可以很好的解決模擬作業系統、使用者應用分隔這兩個問題。

Docker可以比VM更好的解決這兩個問題 並且 解決環境同步問題。

相比VM,Docker是輕量級的,快速的。

二、Docker的映象和容器

Docker如何實現VM的功能?使用靜態映象 + 一個動態讀寫層

從docker的使用方法來看,例如我們想在docker中執行nginx服務。

我們兩個思路:

1. 先pull一個centos映象,再在該映象上裝一個nginx。

2. 直接pull裝好nginx的映象

映象是容器的執行環境

如果我們採取思路1,pull下一個centos映象

# docker pull centos
docker的映象由name:tag組成,上面的命令等價於下載最新的centos
# docker pull centos:latest
如果想下載centos6.8,則可以執行
# docker pull centos:6.8

使用run命令執行一個映象:

# docker run -it centos /bin/bash

該命令會用centos這個映象去建立一個容器,相當於在VM裡面用映象建立了一個虛擬機器,通過docker ps -a可以看到所有容器。

細心的朋友會發現系統提示符變了,這是因為-it引數,使得容器內部的shell輸入輸出和當前主機掛鉤了,叫做attach。

在容器內部的所有操作只在容器內有效,不會影響宿主主機,也不會影響映象,因為所有的操作都會作用在讀寫層

上。

如果下次要使用怎麼辦?可以用docker ps -a找到這個容器的id,使用docker start CONTAINER_ID 執行這個容器,當然上次安裝的nginx還在。

如果把這個容器當做開發環境,部署的時候可以採取非常簡單的方法,將這個容器釋出成映象即可,在生產環境中匯入這個映象,即可實現環境同步。

docker commit命令可以將容器釋出成映象,可以理解為 讀寫層的檔案和映象的檔案合併成一個新的映象。