1 Docker的鏡像管理
1.1 鏡像的搜索
# 查看docker中的所有指令
docker --help
# 命令
$ docker search 鏡像名
NAME: 鏡像名字
DESCRIPTION: 描述信息
STARS: 下載量
OFFICIAL: 鏡像是否為官方發(fā)行
AUTOMATED: 是否會啟動一些腳本之類的程序
1.2 鏡像的獲取
# 下載遠程倉庫(如Docker Hub)中的鏡像
$ docker pull 鏡像名
# 下載完成之后, 就存儲到了本地的鏡像倉庫 /var/lib/docker
鏡像名為docker search xxx中Name字段對應(yīng)的名字
1.3 鏡像的查看
# 查看所有的鏡像
$ docker images
$ docker image ls
# 查看某個鏡像
$ docker images 鏡像名
$ docker image ls 鏡像名字

REPOSITORY: 鏡像的名字
TAG: 鏡像版本
IMAGE ID: 鏡像ID(唯一)
CREATED: 創(chuàng)建時間
SIZE: 鏡像的大小
注:在docker中描述一個鏡像的時候,必須用
鏡像名:版本號(TAG)的方式來描述。如果TAG為latest,TAG可以省略不寫。即:ubuntu 等價于 ubuntu:latest
1.4 鏡像的別名
$ docker tag 現(xiàn)在的名字:tag 別名:tag
不同的名字對應(yīng)的ID相同。鏡像并沒有復(fù)制, 只是多了一個別名而已。
鏡像名中必須是小寫字母。
1.5 鏡像的刪除
$ docker rmi [OPTIONS] 鏡像名/鏡像ID
- 如果鏡像有別名, 只能夠按照鏡像名:tag 進行刪除, 不能根據(jù)ID進行刪除;
- 如果鏡像有多個名字, 刪除任意一個名字,如果鏡像有多個名字,刪除任意一個名字,名字會刪除,鏡像還在;
- 當鏡像只剩下一個名字的時候,對其進行刪除,鏡像可被刪除。當鏡像只剩下一個名字的時候,對其進行刪除,鏡像可被刪除;
-
可以一次刪除多個鏡像。
在這里插入圖片描述
1.6 鏡像的導(dǎo)入和導(dǎo)出
像將自己倉庫中的鏡像文件做備份或者傳給其他人需要做鏡像的導(dǎo)入和導(dǎo)出。
注:鏡像存儲的倉庫目錄為/var/lib/docker,但是在該路徑下都是很多瑣碎的文件,并沒有完整的文件。所以不要嘗試去路徑下直接考走。
導(dǎo)入
$ docker load -i 倉庫中的鏡像名
$ docker load < 倉庫中的鏡像名
導(dǎo)出
# 將本地倉庫中的鏡像導(dǎo)出的磁盤目錄
$ docker save -o 導(dǎo)出之后鏡像名字(自己起名) 倉庫中的鏡像名
1.7 鏡像的歷史和詳細信息
# 制作鏡像的時候的操作步驟
$ docker history 倉庫中的鏡像名
# 鏡像的屬性信息, 以json格式輸出的
$ docker inspect 鏡像名/鏡像ID
關(guān)于Docker --format 格式化輸出概要操作說明可訪問:https://yq.aliyun.com/articles/230067
2 Docker的容器管理
啟動Docker的鏡像文件就會得到一個容器。一個容器可以被看做一個運行的操作系統(tǒng)。
啟動的每個容器都是一個進程。
2.1 容器的查看
# 命令, 只能看到正在運行的容器的狀態(tài)
$ docker ps
#參數(shù):
# -a, --all: 顯示所有容器, 默認只顯示running狀態(tài)的
# -q, --quiet: 只顯示容器ID

CONTAINER ID: 容器啟動之后的ID, 唯一;
IMAGE: 當前容器是基于那個鏡像啟動的;
COMMAND: 容器啟動之后, 默認執(zhí)行了什么命令;
CREATED: 容器的創(chuàng)建時間;
STATUS: 容器當前狀態(tài)。容器一共有四種狀態(tài):
- created: 容器被創(chuàng)建, 但是不能使用
- runing: 運行狀態(tài)
- pause: 暫停狀態(tài)
- exited: 終止運行
PORTS: 映射端口,具體指主機和容器之間的端口映射;
NAMES: 容器啟動之后的名字, 如果沒有指定, 會隨機生成一個, 這個名字不能重復(fù)。
2.2 容器的創(chuàng)建
容器被創(chuàng)建, 但是還不能使用,需要啟動!
$ docker create [OPTIONS] 倉庫中的鏡像名 [COMMAND]
# OPTIONS:
# -a, --attach list 給容器關(guān)聯(lián) STDIN, STDOUT or STDERR
# -t, --tty: 給容器綁定終端
# -i, --interactive: 關(guān)聯(lián)標準輸入
# --rm: 容器終止運行的時候, 自動被刪除
# --name string: 手動指定容器的名字
# COMMAND: 可以不寫, 或許寫個bash
# 例子
$ docker create -it --rm --name myubuntu ubuntu bash
可見創(chuàng)建后的容器并不是運行狀態(tài),需要docker ps -a 才可以顯示出來。
2.3 啟動創(chuàng)建的容器
$ docker start [OPTIONS] 容器名或者容器ID [CONTAINER...]
OPTIONS:
-a, --attach Attach STDOUT/STDERR and forward signals
-i, --interactive Attach container's STDIN
# 例子
$ docker start -i ubuntu

啟動后,直接進入容器內(nèi)的系統(tǒng)中
2.4 創(chuàng)建并啟動容器
docker run 等價于 docker create + docker start ,一般開發(fā)中都使用docker run
# 通過一個命令創(chuàng)建容器, 并且啟動
$ docker run [OPTIONS] 倉庫中的鏡像名 [COMMAND]
# OPTIONS:
# -d, --detach: 以守護進程的形式運行
# -a, --attach list 給容器關(guān)聯(lián) STDIN, STDOUT or STDERR
# -t, --tty: 給容器綁定終端
# -i, --interactive: 關(guān)聯(lián)標準輸入
# --rm: 容器終止運行的時候, 自動被刪除
# --name string: 手動指定容器的名字

創(chuàng)建并運行。參數(shù)-d是docker run特有的,即啟動容器后并不進入容器。
2.5 容器的暫停和重啟
# 暫停
$ docker pause 容器名或ID [CONTAINER...]
# 取消暫停
$ docker unpause 容器名或ID [CONTAINER...]
# 重啟
$ docker restart [OPTIONS] 容器名或ID [CONTAINER...]
# Options:
# -t, --time int: 延時時間, 默認10s
重啟容器后,其STATUS選項重新從0開始計時。
這三個指令都可以接多個容器。
pause后容器狀態(tài)為paused,unpause和restart后容器狀態(tài)為running。
2.6 容器的關(guān)閉、終止和刪除
# 關(guān)閉容器:狀態(tài), 容器還在, 有延時
$ docker stop [OPTIONS] 容器名或ID [CONTAINER...]
# Options:
# -t, --time int: 延時時間, 默認10s
關(guān)閉容器后,狀態(tài)從running變成exited。

# 終止容器:容器還在, 直接關(guān)閉, 沒有延時
$ docker kill [OPTIONS] 容器名或ID [CONTAINER...]
# Options:
# -s, --signal string: 指定發(fā)出的信號, 一般不用
終止容器后,狀態(tài)從running變成exited。
# 刪除未運行的容器
$ docker rm 容器名或ID
# 刪除運行中的容器
$ docker rm 容器名或ID -f
# 批量刪除容器(二者均可)
$ docker rm $(docker ps -aq) -f
$ docker rm `docker ps -aq` -f
關(guān)于批量刪除容器的解釋:
docker ps -aq 是顯示當前所有的容器的ID。把這個返回值作為docker rm 的一個參數(shù),達到一鍵刪除所有容器的功效。
這個需要記住,在開發(fā)中很有用!
2.7 容器的進入和退出
# 創(chuàng)建并啟動容器。前面提到過,例子如下:
$ docker run -itd --rm --name myubuntu ubuntu bash
# 手動進入容器中
$ docker exec [OPTIONS] 容器名字或ID COMMAND [ARG...]
# OPTIONS:
# -i, --interactive 保持與標注輸入的連接
# -t, --tty 將容器與終端綁定
# COMMAND: shell指令 -> bash
# [ARG...]: shell命令的參數(shù)
注:docker run這種創(chuàng)建、啟動并直接進入容器的方式使用頻率很低。建議多多使用docker exec這種方式。如果docker exec不加-it參數(shù),在終端將無法顯示出進入容器的效果。
同時COMMAND位置這次不是可選填項。沒有任何操作,請?zhí)韇ash。
# 容器內(nèi)輸入
$ exit
# 或直接按Ctrl+D,均可退出容器
2.8 容器的日志、信息、端口和重命名
# 查看容器日志
$ docker logs 容器名或ID
# 查看容器的詳細信息
$ docker inspect 容器名或ID
# 查看本機和容器的端口映射
$ docker port 容器名或ID
# 容器重命名
$ docker rename 容器名 新的容器名
- 容器運行一段時間后才會有日志生成,。如果沒有生成, 是看不到的;
- 查看容器詳細信息返回的是json對象。關(guān)于輸出格式的設(shè)定,可查閱:https://yq.aliyun.com/articles/230067
2.9 基于容器的鏡像導(dǎo)入和導(dǎo)出
導(dǎo)出容器的鏡像文件
# 第一種
$ docker export -o 導(dǎo)出的鏡像的名字(自定義) 容器名或ID
# 第二種
$ docker export 容器名或ID > 導(dǎo)出的鏡像的名字(自定義)
鏡像導(dǎo)入到本地的鏡像倉庫中
$ cat 要導(dǎo)入的鏡像文件 | docker import - 新的鏡像名:tag
2.10 對比
docker save 和 docker export:
- 使用save是基于倉庫內(nèi)的鏡像導(dǎo)出文件, 不能對鏡像進行修改;
- export通過容器導(dǎo)出, 原始鏡像可以通過啟動容器進行修改;
- 通過export導(dǎo)出鏡像, 會丟失鏡像的歷史記錄;
- 如果沒有通過容器對進行做任何修改, export導(dǎo)出的鏡像小。
docker load 和 docker import:
- 都是將導(dǎo)出的鏡像導(dǎo)入到本地鏡像倉庫;
- 如果使用load進行導(dǎo)入: 鏡像名無法修改;
- 如果使用import進行導(dǎo)入: 鏡像名是可以修改的。
在網(wǎng)上找到一個圖把這些指令的操作關(guān)系描述的很到位。最后分享給大家:
ps:
本人熱愛圖靈,熱愛中本聰,熱愛V神,熱愛一切被梨花照過的姑娘。