前文回顧:php
今天來講說鏡像,鏡像是 Docker 中特別重要的概念,是容器運行的基礎,沒有鏡像,後面的一切都不成立。python
典型的鏡像表示方法分三部分,用 /
分隔:mysql
remote image hub/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
命令來清理系統中遺留的一些臨時鏡像,以及一些沒有被使用的鏡像。
建立鏡像有三種方式:
一、基於已有容器建立
# 運行一個容器
$ 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 官方倉庫,咱們也能夠搭建本身的私有倉庫。通常來講,公司內部都會有本身的鏡像倉庫,咱們根據需求來使用就能夠了。
這篇就到這裏吧,下篇來講說容器。
參考書籍:
往期精彩:
技術博客:
同時,也歡迎關注個人微信公衆號 AlwaysBeta,更多精彩內容等你來。