1. 程式人生 > 其它 >Docker映象與容器的基本操作

Docker映象與容器的基本操作

一、映象(image)

1、獲取映象

docker search 映象名      (搜尋映象)      
docker pull 映象:版本號  (獲取固定版本映象)
docker pull 映象名      (不加版本號預設為獲取最新版本)

2、映象檢視:

docker image ls

3、表示映象唯一性的方法:

REPOSITORY:TAG

例如
[root@lucien~]# docker image 
REPOSITORY   TAG        IMAGE ID       CREATED        SIZE
centos       7.4.1708   9f266d35e02c   2 years ago    197MB

centos的唯一表示即為:centos:7.4.1708

IMAGE ID(sha256:64位的號碼,預設只擷取12位)

  • 映象的唯一標識除了映象名:版本號以外,還可以使用映象的ID作為唯一標識
  • ID是sha256:64位的號碼,但一般情況下,不加引數查詢時,系統只顯示12位
docker image ls --no-trunc
檢視詳細的 image id 號

4、映象詳細資訊檢視

docker image inspect  centos:7.4.1708
docker image inspect  9f266d35e02c
格式:docker inspect 映象ID號
  docker inspect ae2feff98a0c

5、只檢視映象的ID

docker image ls -q

6、為本地映象新增新的標籤

格式:docker tag 名稱:[標籤] 新名稱:[新標籤]
docker tag nginx:latest nginx:web
 
docker images | grep nginx

7、刪除映象

格式:
docker rmi 倉庫名稱:標籤  #當一個映象有多個標籤時,只是刪除其中指定的標籤
或者
docker rmi 映象ID號    #會徹底刪除該映象
 
注意:如果該映象已經被容器使用,正確的做法是先刪除依賴該映象的所有容器,再去刪除映象。
 
docker rmi nginx:web

8、存出鏡像:將映象儲存成為本地檔案

格式:docker save -o 儲存檔名 儲存的映象
docker save -o nginx nginx:latest   #存出鏡像命名為nginx存在當前目錄下
ls -lh

9、載入映象:將映象檔案匯入到映象庫中

格式:
docker load < 存出的檔案
或者
docker load -i 存出的檔案
 
docker load < nginx

10、上傳映象

預設上傳到 docker Hub 官方公共倉庫,需要註冊使用公共倉庫的賬號。https://hub.docker.com
可以使用 docker login 命令來輸入使用者名稱、密碼和郵箱來完成註冊和登入。
在上傳映象之前,還需要先對本地映象新增新的標籤,然後再使用 docker push 命令進行上傳。

docker tag nginx:web ly08/nginx:web #新增新的標籤
docker login    #登入公共倉庫
Username:
password:
docker push ly08/nginx:web  #上傳映象

  

四、Docker 容器操作

1、容器建立:就是將映象載入到容器的過程

新建立的容器預設處於停止狀態,不執行任何程式,需要在其中發起一個程序來啟動容器

docker create命令能夠基於映象建立容器。

該命令執行的效果類似於docker run -d,即建立一個將在系統後臺執行的容器。

但是與docker run -d不同的是,docker create建立的容器並未實際啟動,還需要執行docker start命令或docker run命令以啟動容器。

事實上,docker create命令常用於在啟動容器之前進行必要的設定。

式:docker create [選項] 映象
常用選項:
-i:讓容器的輸入保持開啟
-t:讓 Docker 分配一個偽終端
 
docker create -it nginx:latest /bin/bash

註釋:

-it就等於-i和-t,這兩個引數的作用是,為該docker建立一個偽終端,這樣就可以進入到容器的互動模式(也就是直接進入到容器裡面)

後面的/bin/bash的作用是表示載入容器後執行bash ,docker中必須要保持一個程序的執行,要不然整個容器啟動後就會馬上kill itself,這個/bin/bash就表示啟動容器後啟動bash

2、檢視容器的執行狀態

docker ps -a    #-a 選項可以顯示所有的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8b0a7be0ff58 nginx:latest "/docker-entrypoint.…" 57 seconds ago Created inspiring_swanson
 
容器的ID號  載入的映象 執行的程式 建立時間 當前的狀態 埠對映 名稱

3、啟動容器

格式:docker start 容器的ID/名稱
docker start 8b0a7be0ff58
docker ps -a

4、建立並啟動容器

可以直接執行 docker run 命令, 等同於先執行 docker create 命令,再執行 docker start 命令。

注意:容器是一個與其中執行的 shell 命令共存亡的終端,命令執行容器執行, 命令結束容器退出。

當利用 docker run 來建立容器時, Docker 在後臺的標準執行過程是:

(1)檢查本地是否存在指定的映象。當映象不存在時,會從公有倉庫下載;

(2)利用映象建立並啟動一個容器;

(3)分配一個檔案系統給容器,在只讀的映象層外面掛載一層可讀寫層;

(4)從宿主主機配置的網橋介面中橋接一個虛擬機器介面到容器中;

(5)分配一個地址池中的 IP 地址給容器;

(6)執行使用者指定的應用程式,執行完畢後容器被終止執行。

docker run centos:7 /usr/bin/bash -c ls /
docker ps -a    #會發現建立了一個新容器並啟動執行一條 shell 命令,之後就停止了

5、在後臺持續執行 docker run 建立的容器

需要在 docker run 命令之後新增 -d 選項讓 Docker 容器以守護形式在後臺執行。並且容器所執行的程式不能結束。

docker run -d centos:7 /usr/bin/bash -c "while true;do echo hello;done"
 
docker ps -a    #可以看出容器始終處於 UP,執行狀態
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2592d3fad0fb centos:7 "/usr/bin/bash -c 'w…" 2 seconds ago Up 2 seconds peaceful_chatelet
 
docker run -itd --name test1 centos:7 /bin/bash   #給容器重新命名,並以守護形式在後臺執行

6、終止容器執行

格式:docker  stop/kill  容器ID/名稱

stop:停止容器,可以給容器一個等待時間,以防止資料的丟失。

kill:立即強行停止一個容器(相當於linux命令 kill -9) ,不會給容器反應時間,可能會造成資料丟失

格式:docker stop 容器的ID/名稱
docker stop 2592d3fad0fb
 
docker ps -a

7、容器的進入

需要進入容器進行命令操作時,可以使用 docker exec 命令進入執行著的容器。

格式:docker exec -it 容器ID/名稱 /bin/bash
-i 選項表示讓容器的輸入保持開啟;
-t 選項表示讓 Docker 分配一個偽終端。
 
docker start 2592d3fad0fb   #進入容器前,確保容器正在執行
docker exec -it 2592d3fad0fb /bin/bash
ls
exit    #退出容器後,容器仍在執行
docker ps -a

8、從宿主機中匯入檔案到容器中

docker ps -a                                               #先獲取需要匯入到的容器ID,然後重新開一個終端
 
另一個終端上操作
echo "this is test file" >> 123.txt                   #建立測試檔案
docker cp 123.txt cef59022a4dd:/opt                 #將測試檔案匯入到容器內後到容器內的/opt目錄下檢視

9、容器的匯出與匯入

使用者可以將任何一個 Docker 容器從一臺機器遷移到另一臺機器。在遷移過程中,可以使用docker export 命令將已經建立好的容器匯出為檔案,無論這個容器是處於執行狀態還是停止狀態均可匯出。可將匯出檔案傳輸到其他機器,通過相應的匯入命令實現容器的遷移。

#匯出格式:docker export 容器ID/名稱 > 檔名
docker export 2592d3fad0fb > centos7.tar
 
#匯入格式:cat 檔名 | docker import – 映象名稱:標籤
cat centos7.tar | docker import - centos7:test  #匯入後會生成映象,但不會建立容器

10、刪除容器

格式:docker rm [-f] 容器ID/名稱
docker stop 2592d3fad0fb
docker rm 2592d3fad0fb  #刪除已經終止狀態的容器
 
docker rm -f 2592d3fad0fb   #強制刪除正在執行的容器
 
docker ps -a | awk 'NR>=2{print "docker stop "$1}' | bash    #批量停止容器
 
docker ps -a | awk 'NR>=2{print "docker rm "$1}' | bash  #批量刪除所有容器
 
docker images | awk 'NR>=2{print "docker rmi "$3}' | bash    #批量刪除映象