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字段對應的名字
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
不同的名字對應的ID相同阱高。鏡像并沒有復制, 只是多了一個別名而已捉兴。
鏡像名中必須是小寫字母钓觉。
1.5 鏡像的刪除
$ docker rmi [OPTIONS] 鏡像名/鏡像ID
- 如果鏡像有別名, 只能夠按照鏡像名:tag 進行刪除, 不能根據(jù)ID進行刪除;
- 如果鏡像有多個名字, 刪除任意一個名字肢娘,如果鏡像有多個名字,刪除任意一個名字舆驶,名字會刪除橱健,鏡像還在;
- 當鏡像只剩下一個名字的時候沙廉,對其進行刪除拘荡,鏡像可被刪除。當鏡像只剩下一個名字的時候撬陵,對其進行刪除珊皿,鏡像可被刪除;
-
可以一次刪除多個鏡像巨税。
在這里插入圖片描述
1.6 鏡像的導入和導出
像將自己倉庫中的鏡像文件做備份或者傳給其他人需要做鏡像的導入和導出蟋定。
注:鏡像存儲的倉庫目錄為/var/lib/docker,但是在該路徑下都是很多瑣碎的文件草添,并沒有完整的文件驶兜。所以不要嘗試去路徑下直接考走。
導入
$ docker load -i 倉庫中的鏡像名
$ docker load < 倉庫中的鏡像名
導出
# 將本地倉庫中的鏡像導出的磁盤目錄
$ docker save -o 導出之后鏡像名字(自己起名) 倉庫中的鏡像名
1.7 鏡像的歷史和詳細信息
# 制作鏡像的時候的操作步驟
$ docker history 倉庫中的鏡像名
# 鏡像的屬性信息, 以json格式輸出的
$ docker inspect 鏡像名/鏡像ID
關于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: 容器啟動之后的名字, 如果沒有指定, 會隨機生成一個, 這個名字不能重復。
2.2 容器的創(chuàng)建
容器被創(chuàng)建颤专, 但是還不能使用纽哥,需要啟動!
$ docker create [OPTIONS] 倉庫中的鏡像名 [COMMAND]
# OPTIONS:
# -a, --attach list 給容器關聯(lián) STDIN, STDOUT or STDERR
# -t, --tty: 給容器綁定終端
# -i, --interactive: 關聯(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
啟動后春塌,直接進入容器內的系統(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 給容器關聯(lián) STDIN, STDOUT or STDERR
# -t, --tty: 給容器綁定終端
# -i, --interactive: 關聯(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 容器的關閉、終止和刪除
# 關閉容器:狀態(tài), 容器還在, 有延時
$ docker stop [OPTIONS] 容器名或ID [CONTAINER...]
# Options:
# -t, --time int: 延時時間, 默認10s
關閉容器后驹愚,狀態(tài)從running變成exited远搪。
# 終止容器:容器還在, 直接關閉, 沒有延時
$ 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
關于批量刪除容器的解釋:
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钥组。
# 容器內輸入
$ exit
# 或直接按Ctrl+D输硝,均可退出容器
2.8 容器的日志、信息程梦、端口和重命名
# 查看容器日志
$ docker logs 容器名或ID
# 查看容器的詳細信息
$ docker inspect 容器名或ID
# 查看本機和容器的端口映射
$ docker port 容器名或ID
# 容器重命名
$ docker rename 容器名 新的容器名
- 容器運行一段時間后才會有日志生成,点把。如果沒有生成, 是看不到的橘荠;
- 查看容器詳細信息返回的是json對象。關于輸出格式的設定郎逃,可查閱:https://yq.aliyun.com/articles/230067
2.9 基于容器的鏡像導入和導出
導出容器的鏡像文件
# 第一種
$ docker export -o 導出的鏡像的名字(自定義) 容器名或ID
# 第二種
$ docker export 容器名或ID > 導出的鏡像的名字(自定義)
鏡像導入到本地的鏡像倉庫中
$ cat 要導入的鏡像文件 | docker import - 新的鏡像名:tag
2.10 對比
docker save 和 docker export:
- 使用save是基于倉庫內的鏡像導出文件, 不能對鏡像進行修改哥童;
- export通過容器導出, 原始鏡像可以通過啟動容器進行修改;
- 通過export導出鏡像, 會丟失鏡像的歷史記錄褒翰;
- 如果沒有通過容器對進行做任何修改, export導出的鏡像小贮懈。
docker load 和 docker import:
- 都是將導出的鏡像導入到本地鏡像倉庫;
- 如果使用load進行導入: 鏡像名無法修改优训;
- 如果使用import進行導入: 鏡像名是可以修改的朵你。
在網(wǎng)上找到一個圖把這些指令的操作關系描述的很到位。最后分享給大家:
ps:
本人熱愛圖靈揣非,熱愛中本聰抡医,熱愛V神,熱愛一切被梨花照過的姑娘早敬。