鏡像是Docker的三大核心概念之一(另外兩個分別是:容器和倉庫)。java
Docker運行容器前須要本地存在鏡像,若是本地不存在鏡像,Docker則會嘗試從遠端倉庫拉去鏡像。鏡像是Docker一大核心,咱們今天就來了解下Docker鏡像的相關操做。linux
本文發佈於掘金號【Happyjava】。Happy的掘金地址:juejin.im/user/5cc289…,Happy的我的博客:(blog.happyjava.cn)[blog.happyjava.cn]。歡迎轉載,但須保留此段聲明。docker
命令格式:shell
docker pull <name:tag>
複製代碼
若是不顯式指定tag,則會默認選擇latest標籤,即下載倉庫中最新版本的鏡像。json
如:拉取一個ubuntu鏡像:ubuntu
不指定tag則會默認拉取最新版本centos
使用 docker images 能夠查看本地的鏡像信息:bash
能夠列出:鏡像倉庫、標籤、鏡像ID、建立時間和大小。app
使用 docker inspect <image_id> 能夠查看鏡像詳細信息:ui
[
{
"Id": "sha256:4c108a37151f54439950335c409802e948883e00c93fdb751d206c9a9674c1f6",
"RepoTags": [
"ubuntu:latest"
],
"RepoDigests": [
"ubuntu@sha256:9b1702dcfe32c873a770a32cfd306dd7fc1c4fd134adfb783db68defc8894b3c"
],
"Parent": "",
"Comment": "",
"Created": "2019-06-18T22:51:38.340092056Z",
"Container": "fdea049ea807b599050e885a88784e009ed78ebcc4d498be93744bb9374c6134",
"ContainerConfig": {
"Hostname": "fdea049ea807",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": [
"/bin/sh",
"-c",
"#(nop) ",
"CMD [\"/bin/bash\"]"
],
"ArgsEscaped": true,
"Image": "sha256:ae950a0376fe6c4d08fa7ff395f50f4a909e26e9f2d865d8641cda024161c6ee",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {}
},
"DockerVersion": "18.06.1-ce",
"Author": "",
"Config": {
"Hostname": "",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": [
"/bin/bash"
],
"ArgsEscaped": true,
"Image": "sha256:ae950a0376fe6c4d08fa7ff395f50f4a909e26e9f2d865d8641cda024161c6ee",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": null
},
"Architecture": "amd64",
"Os": "linux",
"Size": 64184378,
"VirtualSize": 64184378,
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/fc1c2e7f7d583af0ddaa86f2d10be50371a966dd564c9d95b1816c33296520c7/diff:/var/lib/docker/overlay2/615da971b39e6d5121eb018b14f350b1466ef9445870ddba03d2d2da3ecd25d7/diff:/var/lib/docker/overlay2/e508ef7c05f3bdcd784d1f59064574d92f11516e6592cd5df24cfdac7ae13768/diff",
"MergedDir": "/var/lib/docker/overlay2/f6b9b965a5e2714452cf355e1a530b8b2f8c5d818e73f723debd7b27d955ae5e/merged",
"UpperDir": "/var/lib/docker/overlay2/f6b9b965a5e2714452cf355e1a530b8b2f8c5d818e73f723debd7b27d955ae5e/diff",
"WorkDir": "/var/lib/docker/overlay2/f6b9b965a5e2714452cf355e1a530b8b2f8c5d818e73f723debd7b27d955ae5e/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:ba9de9d8475e7f5e40086358a1353b3cc080994fc6d31e4272dd3acb69b0151e",
"sha256:fbd2732ad777cb5db2515fa62b6122b797be233d01db02e0a19e5d894688cad6",
"sha256:dda1518598187bf87704acc22aa0ec2a67d9e7835c24346dfca118ab42c5cd0b",
"sha256:75e70aa52609fdbd63b58d46d6f7c20470062e1c9bb75616f7703a358a61e5ca"
]
},
"Metadata": {
"LastTagTime": "0001-01-01T00:00:00Z"
}
}
]
複製代碼
咱們使用默認tag拉取鏡像,在本地TAG會顯示爲latest,其實這是很很差的,由於時間久了,可能咱們也忘記其具體的版本號了。不過咱們能夠經過以下命令修改鏡像TAG:
docker tag <iamges_name>:<images_tag> <new_iamges_name>:<new_images_tag>
複製代碼
如:
咱們能夠看到ubuntu 18.09 和 latest 的 image id 是同樣的,說明這是同一個鏡像。
docker search name
複製代碼
其中,官方鏡像會有OFFICIAL標識
使用鏡像ID刪除
docker rmi <iamge_id>
複製代碼
使用名字和TAG刪除
docker rmi <name>:<tag>
複製代碼
期中tag字段是可選的。
如遇到刪除不了的鏡像,好比正在使用的,能夠經過 -f 參數強制刪除
建立鏡像有三種方式:基於容器建立、基於本地模板導入、基於Dockerfile建立。
建立一個ubuntu容器
docker run -it --name ubuntu ubuntu:18.09 /bin/bash
# 在容器內部建立一個文件
touch happyjava.txt
# 退出
exit
複製代碼
這時候就能夠建立鏡像了,命令以下
docker commit -m "commit message" -a "author" <container_id> <image_name>:<tag>
複製代碼
如:
docker commit -m "create a new file happyjava.txt" -a "Happy" d51e6f5e99d4 personalrepo:99
複製代碼
docker images查看鏡像:
這就跟GIT的commit操做同樣,能夠把變更提交上去。咱們可使用本身建立的鏡像新建一個容器,就能夠看到咱們建立的happyjava.txt文件了。
推薦模板下載地址:
https://wiki.openvz.org/Download/template/precreated
複製代碼
建立命令以下:
cat centos-5-x86.tar.gz |docker import - <name>:<tag>
複製代碼
基於Dockerfile方式建立鏡像,這個放到之後再作講解~~~
docker save -o <filename> <name:tag/id>
複製代碼
如:
docker load --input <filename>
複製代碼
或者
docker load < <filename>
複製代碼
本文總結了Docker中對於鏡像的經常使用操做,包括鏡像搜索、拉取、建立、刪除等。鏡像是使用Docker的前提,其基本操做是須要熟練掌握的。