Michael.W談Docker 第二期-docker的鏡像管理和容器管理

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
  1. 如果鏡像有別名, 只能夠按照鏡像名:tag 進行刪除, 不能根據(jù)ID進行刪除;
  2. 如果鏡像有多個名字, 刪除任意一個名字,如果鏡像有多個名字,刪除任意一個名字,名字會刪除,鏡像還在;
  3. 當鏡像只剩下一個名字的時候,對其進行刪除,鏡像可被刪除。當鏡像只剩下一個名字的時候,對其進行刪除,鏡像可被刪除;
  4. 可以一次刪除多個鏡像。


    在這里插入圖片描述

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):

  1. created: 容器被創(chuàng)建, 但是不能使用
  2. runing: 運行狀態(tài)
  3. pause: 暫停狀態(tài)
  4. 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 容器名 新的容器名
在這里插入圖片描述
  1. 容器運行一段時間后才會有日志生成,。如果沒有生成, 是看不到的;
  2. 查看容器詳細信息返回的是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:

  1. 使用save是基于倉庫內(nèi)的鏡像導(dǎo)出文件, 不能對鏡像進行修改;
  2. export通過容器導(dǎo)出, 原始鏡像可以通過啟動容器進行修改;
  3. 通過export導(dǎo)出鏡像, 會丟失鏡像的歷史記錄;
  4. 如果沒有通過容器對進行做任何修改, export導(dǎo)出的鏡像小。

docker load 和 docker import:

  1. 都是將導(dǎo)出的鏡像導(dǎo)入到本地鏡像倉庫;
  2. 如果使用load進行導(dǎo)入: 鏡像名無法修改;
  3. 如果使用import進行導(dǎo)入: 鏡像名是可以修改的。

在網(wǎng)上找到一個圖把這些指令的操作關(guān)系描述的很到位。最后分享給大家:


在這里插入圖片描述

ps:
本人熱愛圖靈,熱愛中本聰,熱愛V神,熱愛一切被梨花照過的姑娘。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容