【原創】docker實踐之一些常見概念和操作(上)

-------前言
之前我寫過兩篇文章,介紹過如何在Ubuntu和Debian下安裝docker,安裝之後如何快速上手呢,接下來我們來娓娓道來。

一、docker裏面的3個重要概念


1.鏡像(images)
2.容器(Container)
3.倉庫(Repository)
a)、Docker鏡像
簡單理解,安裝過系統的都知道 我們需要一個鏡像文件來安裝系統,鏡像相當於是操作系統的源文件,裏面的很多東西都是原生的。書面化的解讀是這樣的,操作系統分爲內核和用戶空間。對於Linux而言,內核啓動後,會掛在root文件系統爲其提供用戶空間支持。Docker鏡像就相當於這裏的root文件系統。比如官方鏡像Ubuntu 18.04,就包含了完整的一套ubuntu 18.04的最小系統的root文件系統。
Docker鏡像是一個特殊的文件系統,除了提供容器運行時所需的程序、庫、資源等配置文件外,還包含了一些爲運行時準備的一些配置參數(如匿名卷、環境變量、用戶等)。鏡像不包含任何動態數據,其內容在創建後也不會被改變。

b)、Docker容器
docker容器,是運行中的鏡像,更通常的說法是鏡像運行時的實體。容器可以被創建、啓動、停止、刪除、暫停等。
容器的實質是進程,但與直接在宿主執行的進程不同,容器進程運行於屬於自己的命名空間。因此容器擁有自己root文件系統、自己的網絡配置、自己的進程空間,甚至自己的用戶ID空間。容器內的進程是運行在一個隔離的環境裏,使用起來就好像是一個獨立於宿主的系統下操作一樣。這種特性使得容器封裝的應用比直接在宿主運行更加安全。

c)、Docker Registry
鏡像構建完成後,可以很容易的在當前宿主機上運行,但是如果需要在其他容器上使用這個鏡像,我們就需要一個集中的存儲、分發鏡像的服務,Docker Registry 就是這樣的服務。
一個Docker Registry 可以包含多個倉庫(Repository);每個倉庫 可以包含多個標籤(Tag);每個標籤對應一個鏡像。
一般情況下,一個倉庫會包含同一個軟件不同版本的鏡像,而標籤就是用來標記該軟件的各個版本。我們通常用<倉庫名>:<標籤>來表示鏡像的不同版本。如果不給出標籤,默認使用latest。
以Debian 爲例,debian是倉庫的名字,其內包含不同的版本標籤,如8.0.4,9.0.4。我們可以通過debian 8.0.4來具體指定我們需要哪個版本的鏡像文件。如果忽略了標籤,將默認使用debian:latest

二、Docker的一些常見命令

docker pull -------- 下載鏡像文件到本地
docker run -------- 運行某個容器
docker search ------- 查找
docker exec ----- 查看某個容器的內容
docker images ls ------ 列出當前所有的鏡像
docker export --------導出某個容器
docker import ---------導入某個容器
docker container ls ------ 列出所有的容器
docker container rm -----刪除容器
docker container prune -----清理終止狀態的容器
docker diff -----

下面我們來具體的講解:
I).從docker公有庫從下載鏡像到本地:
docker pull [options] NAME[:TAG]
docker pull golang的示例述
II).運行某個容器
docker run [OPTIONS] IMAGE [COMMAND]
示例:運行hello-world鏡像,一般會用到的兩個選項(OPTIONS)是
-d 後臺運行並且打印出container的id
-p 指定容器的端口號給到主機
運行hello-world鏡像在這裏插入圖片描述
III) 查找某個鏡像
docker search [options] TERM
這裏的options常用的有:
-f, --filter Filter output based on conditions provided
下面我們看一下,如果我要找星標不少於20個的wordpress的鏡像
在這裏插入圖片描述
返回結果一共包含了5個信息:
NAME -------- 鏡像的名字
DESCRIPTION -------- 鏡像的描述
STARTS --------- 星標數(體現了該鏡像的受歡迎程度)
OFFICIAL ---------- 是否官方鏡像
AUTOMATED ----------- 是否自動創建
官方的鏡像說明是官方創建和維護,automated資源運行用戶驗證鏡像的來源和內容。根據是否是官方提供可以將資源分爲兩類。
一種是類似:CentOS這樣的鏡像,被稱爲基礎鏡像或者根鏡像,這些鏡像由docker公司創建、驗證、支持和維護,這樣的鏡像往往使用單個單詞作爲名字。
還有一種類型,比如:tianon/centos鏡像,這種是由docker公司的用戶創建並維護的,往往帶有用戶名稱前綴,可以通過前綴username/ 來指定使用某個用戶提供的鏡像,比如tianon用戶。

IV) 進入某個容器
docker exec [OPTIONS] container [COMMAND]
其中OPTIONS最常用的幾個參數:
-d 進入後臺執行的模式
-i 保持命令行的交互模式,允許輸入
-t Allocate a pseudo-TTY
示例:進入redis容器

docker exec -it redis bash

V) 刪除某個容器
docker rm [OPTIONS] container
常用的options:
-f 強制刪除一個正在運行的鏡像,f 代表force
-v 刪除和該容器相關的文件卷 volume
刪除redis容器,可以執行下面的指令
在這裏插入圖片描述
注:如果這裏我們不加-f參數,會報錯“必須先停止容器的錯誤”
在這裏插入圖片描述

這裏需要注意的是,使用docker rm進行刪除的時候,有幾種情況是無法直接直接刪除鏡像的:
1.該鏡像對應有多個標籤
2.該鏡像中的某一層被其它鏡像依賴的時候
3.依賴於該鏡像的容器在運行的時候

由於時間關係,後面幾個指令就不做演示了,下一章我會講解一下如何使用dockerfile來生成容器,以及在docker裏面tar文件的使用。

小練習

下面我們來做一個小練習:
練習1.進入Nginx鏡像,然後把Nginx的歡迎頁面修改成Hello world!
解析:第一步運行docker裏面的Nginx鏡像,然後再進入Nginx鏡像,最後纔是修改的這一步

$ docker run --name webserver -d -p 80:80 nginx
$ docker exec -it webserver bash
$ echo '<h1>Hello Docker!</h1>' > /usr/share/nginx/html/index.html
$ exit
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章