Docker簡介

由於微服務的興起,docker技術也變得火爆起來,docker作爲一種容器技術主要用來替代虛擬機作爲應用部署的解決方案。

三個基本概念

1.鏡像

docker鏡像是一個特殊的文件系統,能夠提供容器運行時所需的資源。如果接觸過dockerfile的同學應該知道,我們構建鏡像時都會選擇一個基礎鏡像(沒接觸過別擔心下面會講),這說明docker鏡像是一層層進行構建的,一個鏡像往往由多層文件系統組成。

2.容器

鏡像是靜態的,鏡像運行起來的時候就變成了容器。容器相當於一個完整的操作系統,他可以有自己的文件系統,自己的網絡配置。假如我們使用一個mysql容器進行存儲數據,這時數據會存儲在當前容器的存儲層,存儲層的生命週期和容器一樣,容器消亡時,其存儲層也不在了,所以我們在使用這種需要存儲數據的容器時,往往都需要指定數據卷Volume(掛載一個宿主機的文件目錄),這樣即使容器刪除,數據也不會消失。

3.倉庫

顧名思義,docker倉庫即爲存儲鏡像的地方,我們可以將鏡像上傳至倉庫,也可以從倉庫下載鏡像。這個比較簡單,沒什麼好說的。

docker安裝

這裏說一下Mac下docker的安裝。我們可以直接搜索Docker for Mac進行下載安裝,但是下載的時候好像需要進行註冊個賬戶啥的,需要翻牆。也可以直接使用homebrew進行安裝,不過我沒試過。安裝好了之後就會出現該應用圖標

然後我們直接打開終端就可以使用docker命令了。由於官方docker的倉庫下載較慢,我們配置一個鏡像加速。依次選中Perference》Daemon》Registry mirros,填寫docker官方的中國加速地址“https://registry.docker-cn.com”即可。

基本操作

這裏簡單說一下一些比較基本的操作。

1.獲取鏡像:

如果我們不是用的私有倉庫,中間的都可以不填,比如直接使用 docker pull nginx,則是直接從中央倉庫拉取標籤爲latest的nginx鏡像。

2.運行鏡像:

調用以上命令即可運行之前pull的nginx鏡像。我們訪問http://localhost即可看到nginx已經啓動成功。-d代表在後臺運行而不把執行命令的結果輸出在當前宿主機下,-p代表映射的宿主機與容器端口,name用於指定容器名。

運行後當我們想要進入容器的終端時,我們使用“docker exec -it 容器id bash”

3.查看鏡像

我們可以使用 docker image ls查看我們系統中的鏡像。這裏有個問題,ls命令的size列會列出鏡像的大小,這裏的size要比我們pull時顯示的size要大的多,這是因爲pull時的size顯示的是壓縮後的體積,ls的size顯示的是展開後的大小。

如果我們使用ls後出現列名均爲none的鏡像,該鏡像成爲虛懸鏡像,這是由於新舊鏡像同名,導致舊鏡像名稱被取消,我們可以使用 docker image prune 刪除虛懸鏡像。

Dockerfile中幾個重要命令

除了使用官方鏡像外,我們也可以使用dockerfile來定製自己的鏡像。

1.FROM:

該文件的第一句一定是FROM意爲指定基礎鏡像,當我們不需要基礎鏡像時我們可以from於一個空白鏡像“FROM scratch”(這種情況可能性幾乎爲0)。

2.RUN

run用來執行命令行命令的,類似於shell腳本。但是我們不要在文件中執行多個RUN,因爲每個run都會建立一個新鏡像,執行多個run意味着創建了多層無用鏡像。

需要執行多個run命令的話要按照上圖的格式進行編寫,利用&&進行串聯起來。圖中的最後一行用於清理無關文件。

3.COPY

copy命令用於將上下文中的目錄複製到鏡像的指定目錄中,格式如下

如果未指定相應權限的話,copy的時候源文件的各種權限都會保留。

4.ADD

該命令爲COPY的升級版,最常用的功能是自動解壓縮。有可能的話儘量使用COPY命令。

5.CMD

CMD與RUN類似,也有兩種形式

該命令用於指定容器主進程的啓動命令,docker不是虛擬機,容器相當於宿主機上的一個進程,那麼在容器啓動的時候需要指定所運行的程序以及參數。這裏貼一個比較容易犯錯的地方。

6.ENTRYPOINT

和CMD目的一樣,用於指定容器啓動程序與參數,我們一般在ENTRYPOINT指定需要運行的腳本文件。這個腳本會將接到的參數(即<CMD>)作爲命令,在腳本最後執行。

7.ENV

用來設置環境變量,有倆種形式

設置完之後,後面的命令如RUN等可以使用該環境變量

8.VOLUME

該命令用於掛載數據卷,如"VOLUME /data",這樣容器中向data寫入的數據將會存儲在主機中,容器刪除後不會消失。所綁定的主機目錄可以使用“docker inspect”命令查看

構建

編寫完dockerfile之後,在dockerfile所在目錄執行 “docker build -t 鏡像名 .”,其中的“.”爲上下文路徑,當我們使用COPY /opt/xx/xx時是訪問不到該文件的,我們需要將其拷貝到dockerfile所在目錄中,即上下文目錄。需要注意的是我們的dockerfile所在目錄一般爲空目錄,因爲docker會將其所在目錄所有文件都打入鏡像,會造成鏡像臃腫。如果該目錄下沒有所需文件,那麼應該把所需文件複製一份過來。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章