使用 Docker 鏡像 | Docker 系列

前文回顧:php

今天來講說鏡像,鏡像是 Docker 中特別重要的概念,是容器運行的基礎,沒有鏡像,後面的一切都不成立。python

典型的鏡像表示方法分三部分,用 / 分隔:mysql

remote image hub/namespace/name:tag
複製代碼
  • remote image hub:存儲鏡像的 Web 服務器地址;
  • namespace:命名空間,表示一個用戶或組織下的全部鏡像;
  • name:鏡像名稱;
  • tag:鏡像標籤。

其實,咱們常看到的鏡像是長這樣的 name:tag,由於從 Docker 官方倉庫拉下來的鏡像,是能夠省略前兩部分的。git

獲取鏡像

使用 docker pull name[:tag] 命令來下載鏡像,若是不顯式指定 tag,則默認會選擇 latest 標籤。github

$ docker pull busybox
Using default tag: latest
latest: Pulling from library/busybox
76df9210b28c: Pull complete
Digest: sha256:95cf004f559831017cdf4628aaf1bb30133677be8702a8c5f2994629f637a209
Status: Downloaded newer image for busybox:latest
docker.io/library/busybox:latest
複製代碼

查看鏡像信息

使用 docker images 命令列出本機鏡像。sql

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
busybox             latest              1c35c4412082        6 days ago          1.22MB
複製代碼

鏡像 ID 十分重要,它惟一標識了鏡像。docker

使用 docker tag 命令來給本地鏡像添加新的標籤。shell

$ docker tag busybox:latest mybusybox:latest
 $ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
busybox             latest              1c35c4412082        6 days ago          1.22MB
mybusybox           latest              1c35c4412082        6 days ago          1.22MB
複製代碼

能夠看到,如今本地的兩個鏡像 ID 是相同的,表示它們指向了同一個鏡像,只是標籤不一樣而已。centos

使用 docker inspect 命令來獲取鏡像的詳細信息。bash

使用 docker history 命令列出鏡像各層的建立信息。

搜索鏡像

使用 docker search 命令來搜索鏡像。

$ docker search centos
NAME                               DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
centos                             The official build of CentOS.                   6039                [OK]
ansible/centos7-ansible            Ansible on Centos7                              130                                     [OK]
consol/centos-xfce-vnc             Centos container with "headless" VNC session…   116                                     [OK]
jdeathe/centos-ssh                 OpenSSH / Supervisor / EPEL/IUS/SCL Repos - …   114                                     [OK]
centos/mysql-57-centos7            MySQL 5.7 SQL database server                   76
imagine10255/centos6-lnmp-php56    centos6-lnmp-php56                              58                                      [OK]
複製代碼

刪除和清理鏡像

使用 docker rmi 命令來刪除鏡像,分兩種方式:一種是經過鏡像名和標籤來刪除;一種是經過鏡像 ID 來刪除。平時使用過程當中,大部分都是經過鏡像 ID 來刪除。

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
busybox             latest              1c35c4412082        8 days ago          1.22MB
mybusybox           latest              1c35c4412082        8 days ago          1.22MB
 $ docker rmi mybusybox:latest
# 或者
$ docker rmi 1c35c4412082
複製代碼

若是鏡像被容器引用了的話,是沒法刪除的,須要先刪除依賴該鏡像的容器,而後再刪除鏡像。或者比較暴力的話,直接使用 -f 參數來刪除,也能達到效果,但仍是不推薦這種作法。

使用 docker image prune 命令來清理系統中遺留的一些臨時鏡像,以及一些沒有被使用的鏡像。

建立鏡像

建立鏡像有三種方式:

  • 基於已有容器建立
  • 基於本地模板導入
  • 基於 Dockerfile 建立

一、基於已有容器建立

# 運行一個容器
$ docker run -it centos /bin/bash
 # 在容器中建立一個文件,而後退出
[root@f0767e2e8964 /]# touch text.txt
[root@f0767e2e8964 /]# exit
exit
 # 查看容器
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
f0767e2e8964        centos              "/bin/bash"         17 seconds ago      Exited (0) 4 seconds ago                       stupefied_ptolemy
 # 基於容器建立鏡像
$ docker commit -a 'add file' f0767e2e8964 centos:1.0
sha256:a651491d9bfe6d00eef7a23bd290be839d59efafa31183ef2038399271dee459
 # 查看除了原有鏡像,還有新生成的鏡像,標籤不一樣
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              1.0                 a651491d9bfe        4 seconds ago       237MB
centos              latest              470671670cac        4 months ago        237MB
複製代碼

二、基於本地模板導入

使用 docker import 命令將模板導入成鏡像。

三、基於 Dockerfile 建立

這是在實際工做中使用最多的方法,先賣個關子,後續單獨寫一篇來詳細介紹。

存出和載入鏡像

使用 docker save 命令保存鏡像到文件。

$ docker save -o busybox.tar busybox
複製代碼

執行以後,在當前目錄下就會有 busybox.tar 文件了,而後能夠把這個文件分享給其餘人。

收到文件以後,使用 docker load 命令來載入鏡像。

$ docker load < busybox.tar
複製代碼

上傳鏡像

使用 docker push 命令將鏡像上傳到鏡像倉庫,這樣在其餘服務器上想用這個鏡像,直接 docker pull 一下就能夠了,很是方便。

默認的話,會上傳到 Docker Hub 官方倉庫,咱們也能夠搭建本身的私有倉庫。通常來講,公司內部都會有本身的鏡像倉庫,咱們根據需求來使用就能夠了。

這篇就到這裏吧,下篇來講說容器。

參考書籍:

  • 《Docker 技術入門與實戰》
  • 《Docker 進階與實戰》

往期精彩:

初識 Docker 與安裝 | Docker 系列

技術博客:

github.com/yongxinz/te…

同時,也歡迎關注個人微信公衆號 AlwaysBeta,更多精彩內容等你來。

相關文章
相關標籤/搜索