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 #批量刪除映象