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命令可以將容器發佈成鏡像,可以理解爲 讀寫層的文件和鏡像的文件合併成一個新的鏡像。

發佈了63 篇原創文章 · 獲贊 55 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章