Docker镜像(Docker Image)就是一个只读的模板。比如,一个镜像可以包含一个完整的Ubuntu操作系统环境。镜像可以用来创建Docker容器。
在Docker的术语里,一个只读层被称为镜像,一个镜像是永远不会变的。
由于Docker使用一个统一文件系统,Docker进程认为整个文件系统是以读写方式挂载的。 但是所有的变更都发生在顶层的可写层,而下层的原始的只读镜像文件并未变化。由于镜像不可写,所以镜像是无状态的。
每一个镜像都可能依赖于由一个或多个下层镜像组成的另一个镜像。我们有时说,下层那个镜像是上层镜像的父镜像。而没有任何父镜像的镜像,谓之基础镜像(Base Image)。
可以看一下这篇博客,会让你对Docker的整体架构有一个很清晰的了解:Docker - 这应该就是你想要的Docker架构分析。
通过该命令可以查看Image下有哪些命令。
docker image help
[root@izoq008ryseuupz ~]# docker image help
Usage: docker image COMMAND
Manage images
Commands:
build Build an image from a Dockerfile
history Show the history of an image
import Import the contents from a tarball to create a filesystem image
inspect Display detailed information on one or more images
load Load an image from a tar archive or STDIN
ls List images
prune Remove unused images
pull Pull an image or a repository from a registry
push Push an image or a repository to a registry
rm Remove one or more images
save Save one or more images to a tar archive (streamed to STDOUT by default)
tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
Run 'docker image COMMAND --help' for more information on a command.
通过docker image COMMAND --help
来知道每一个Image命令的详细信息。
Run 'docker image COMMAND --help' for more information on a command.
docker image ls --help
[root@izoq008ryseuupz ~]# docker image ls --help
Usage: docker image ls [OPTIONS] [REPOSITORY[:TAG]]
List images
Aliases:
ls, images, list
Options:
-a, --all Show all images (default hides intermediate images)
--digests Show digests
-f, --filter filter Filter output based on conditions provided
--format string Pretty-print images using a Go template
--no-trunc Don't truncate output
-q, --quiet Only show numeric IDs
比如docker image ls -a
,展示所有Image的关键信息。
[root@izoq008ryseuupz ~]# docker image ls -a
REPOSITORY TAG IMAGE ID CREATED SIZE
node latest 5377c9a2fb1f 5 weeks ago 943MB
openzipkin/zipkin latest 1850194f377c 3 months ago 160MB
rancher/server stable 98d8bb571885 6 months ago 1.08GB
redis 5.0.7 7eed8df88d3b 8 months ago 98.2MB
hello-world latest bf756fb1ae65 10 months ago 13.3kB
docker images
、docker image ls
和docker image ls -a
是一样的效果。
比如docker image ls -q
,就只输出Image的IMAGE ID 。
[root@izoq008ryseuupz ~]# docker image ls -q
5377c9a2fb1f
1850194f377c
98d8bb571885
7eed8df88d3b
bf756fb1ae65
其他的命令选项可以自己试一试。
拉取镜像。
docker image pull --help
[root@izoq008ryseuupz ~]# docker image pull --help
Usage: docker image pull [OPTIONS] NAME[:TAG|@DIGEST]
Pull an image or a repository from a registry
Options:
-a, --all-tags Download all tagged images in the repository
--disable-content-trust Skip image verification (default true)
--platform string Set platform if server is multi-platform capable
-q, --quiet Suppress verbose output
拉取centos:7
镜像。
docker image pull centos:7
[root@izoq008ryseuupz ~]# docker image pull centos:7
7: Pulling from library/centos
2d473b07cdd5: Pull complete
Digest: sha256:0f4ec88e21daf75124b8a9e5ca03c37a5e937e0e108a255d890492430789b60e
Status: Downloaded newer image for centos:7
docker.io/library/centos:7
拉取centos:6
镜像,只想要输出pull
的简要信息,不输出pull
的详细信息,如Downloading
的进度。
docker image pull -q centos:6
[root@izoq008ryseuupz ~]# docker image pull -q centos:6
docker.io/library/centos:6
其他的命令选项可以自己试一试。
此命令会把所有未使用的镜像进行删除(Remove unused images
),慎用!
docker image prune --help
[root@izoq008ryseuupz ~]# docker image prune --help
Usage: docker image prune [OPTIONS]
Remove unused images
Options:
-a, --all Remove all unused images, not just dangling ones
--filter filter Provide filter values (e.g. 'until=<timestamp>')
-f, --force Do not prompt for confirmation
docker image prune
[root@izoq008ryseuupz ~]# docker image prune
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y
Total reclaimed space: 0B
删除指定镜像。
docker image rm --help
[root@izoq008ryseuupz ~]# docker image rm --help
Usage: docker image rm [OPTIONS] IMAGE [IMAGE...]
Remove one or more images
Aliases:
rm, rmi, remove
Options:
-f, --force Force removal of the image
--no-prune Do not delete untagged parents
删除centos:7
。
docker image rm centos:7
[root@izoq008ryseuupz ~]# docker image rm centos:7
Untagged: centos:7
Untagged: centos@sha256:0f4ec88e21daf75124b8a9e5ca03c37a5e937e0e108a255d890492430789b60e
Deleted: sha256:8652b9f0cb4c0599575e5a003f5906876e10c1ceb2ab9fe1786712dac14a50cf
Deleted: sha256:174f5685490326fc0a1c0f5570b8663732189b327007e47ff13d2ca59673db02
强制删除centos:6
。
docker image rm -f centos:6
[root@izoq008ryseuupz ~]# docker image rm -f centos:6
Untagged: centos:6
Untagged: centos@sha256:dec8f471302de43f4cfcf82f56d99a5227b5ea1aa6d02fa56344986e1f4610e7
Deleted: sha256:d0957ffdf8a2ea8c8925903862b65a1b6850dbb019f88d45e927d3d5a3fa0c31
Deleted: sha256:af6bf1987c2eb07d73f33836b0d8fd825d7c785273526b077e46780e8b4b2ae9
其他的命令选项可以自己试一试。
对原有镜像打tag
,会生成新镜像。
docker image tag --help
[root@izoq008ryseuupz ~]# docker image tag --help
Usage: docker image tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
docker image tag centos:6 centos:kaven.blog
保存镜像。
docker image save --help
[root@izoq008ryseuupz ~]# docker image save --help
Usage: docker image save [OPTIONS] IMAGE [IMAGE...]
Save one or more images to a tar archive (streamed to STDOUT by default)
Options:
-o, --output string Write to a file, instead of STDOUT
docker image save centos:kaven.blog > kaven.blog.tar
[root@izoq008ryseuupz ~]# docker image save centos:kaven.blog > kaven.blog.tar #保存到当前目录
[root@izoq008ryseuupz ~]# ls kaven*
kaven.blog.tar
docker image save centos:kaven.blog -o /usr/kaven.blog.tar
[root@izoq008ryseuupz ~]# docker image save centos:kaven.blog -o /usr/kaven.blog.tar #保存到别的目录
[root@izoq008ryseuupz ~]# ls /usr/kaven*
/usr/kaven.blog.tar
加载镜像。
docker image load --help
[root@izoq008ryseuupz ~]# docker image load --help
Usage: docker image load [OPTIONS]
Load an image from a tar archive or STDIN
Options:
-i, --input string Read from tar archive file, instead of STDIN
-q, --quiet Suppress the load output
docker image load < kaven.blog.tar
[root@izoq008ryseuupz ~]# docker image rm centos:kaven.blog
Untagged: centos:kaven.blog
[root@izoq008ryseuupz ~]# docker image load < kaven.blog.tar
Loaded image: centos:kaven.blog
docker image load -i /usr/kaven.blog.tar
[root@izoq008ryseuupz ~]# docker image rm centos:kaven.blog
Untagged: centos:kaven.blog
[root@izoq008ryseuupz ~]# docker image load -i /usr/kaven.blog.tar
Loaded image: centos:kaven.blog
其他的命令选项可以自己试一试。
显示镜像的操作历史。
docker image history --help
[root@izoq008ryseuupz ~]# docker image history --help
Usage: docker image history [OPTIONS] IMAGE
Show the history of an image
Options:
--format string Pretty-print images using a Go template
-H, --human Print sizes and dates in human readable format (default true)
--no-trunc Don't truncate output
-q, --quiet Only show numeric IDs
docker image history centos:kaven.blog
[root@izoq008ryseuupz ~]# docker image history centos:kaven.blog
IMAGE CREATED CREATED BY SIZE COMMENT
d0957ffdf8a2 20 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 20 months ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B
<missing> 20 months ago /bin/sh -c #(nop) ADD file:0065316a41144e95b… 194MB
<missing> 2 years ago /bin/sh -c #(nop) MAINTAINER https://github… 0B
只想展示镜像操作历史的简要信息(IMAGE)。
docker image history -q centos:6
[root@izoq008ryseuupz ~]# docker image history -q centos:6
d0957ffdf8a2
<missing>
<missing>
<missing>
其他的命令选项可以自己试一试。
显示镜像的详细信息。
docker image inspect --help
[root@izoq008ryseuupz ~]# docker image inspect --help
Usage: docker image inspect [OPTIONS] IMAGE [IMAGE...]
Display detailed information on one or more images
Options:
-f, --format string Format the output using the given Go template
docker image inspect centos:6
[root@izoq008ryseuupz ~]# docker image inspect centos:6
[
{
"Id": "sha256:d0957ffdf8a2ea8c8925903862b65a1b6850dbb019f88d45e927d3d5a3fa0c31",
"RepoTags": [
"centos:6",
"centos:kaven.blog"
],
"RepoDigests": [
"centos@sha256:dec8f471302de43f4cfcf82f56d99a5227b5ea1aa6d02fa56344986e1f4610e7"
],
"Parent": "",
"Comment": "",
"Created": "2019-03-14T21:20:11.486358099Z",
"Container": "d519f3e5c41d16388d3fba0dac626427b21deb98cce150dee80c180b9baf9435",
"ContainerConfig": {
"Hostname": "d519f3e5c41d",
"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:143abcd43bce45f4fd9ba51c7361051d7ea9e9e1eadb66e5c94a9c1b7754524f",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {
"org.label-schema.build-date": "20181006",
"org.label-schema.license": "GPLv2",
"org.label-schema.name": "CentOS Base Image",
"org.label-schema.schema-version": "1.0",
"org.label-schema.vendor": "CentOS"
}
},
"DockerVersion": "18.06.1-ce",
"Author": "https://github.com/CentOS/sig-cloud-instance-images",
"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:143abcd43bce45f4fd9ba51c7361051d7ea9e9e1eadb66e5c94a9c1b7754524f",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {
"org.label-schema.build-date": "20181006",
"org.label-schema.license": "GPLv2",
"org.label-schema.name": "CentOS Base Image",
"org.label-schema.schema-version": "1.0",
"org.label-schema.vendor": "CentOS"
}
},
"Architecture": "amd64",
"Os": "linux",
"Size": 193901906,
"VirtualSize": 193901906,
"GraphDriver": {
"Data": {
"MergedDir": "/var/lib/docker/overlay2/ae0f8ac6c397e63561b52142c4e945909b8af2351d28e5af66f3490ff7078587/merged",
"UpperDir": "/var/lib/docker/overlay2/ae0f8ac6c397e63561b52142c4e945909b8af2351d28e5af66f3490ff7078587/diff",
"WorkDir": "/var/lib/docker/overlay2/ae0f8ac6c397e63561b52142c4e945909b8af2351d28e5af66f3490ff7078587/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:af6bf1987c2eb07d73f33836b0d8fd825d7c785273526b077e46780e8b4b2ae9"
]
},
"Metadata": {
"LastTagTime": "2020-11-22T11:46:01.910880961+08:00"
}
}
]
其他的命令选项可以自己试一试。
从归档文件中创建镜像。
docker image import --help
[root@izoq008ryseuupz ~]# docker image import --help
Usage: docker image import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
Import the contents from a tarball to create a filesystem image
Options:
-c, --change list Apply Dockerfile instruction to the created image
-m, --message string Set commit message for imported image
--platform string Set platform if server is multi-platform capable
docker image import kaven.blog.tar centos:6.kaven
[root@izoq008ryseuupz ~]# docker image import kaven.blog.tar centos:6.kaven
sha256:3a568400d73096f71c5f5165f110414bb83e8024bca2ee3eea77336a194e920f
其他的命令选项可以自己试一试。
上传镜像到仓库。
docker image push --help
[root@izoq008ryseuupz ~]# docker image push --help
Usage: docker image push [OPTIONS] NAME[:TAG]
Push an image or a repository to a registry
Options:
--disable-content-trust Skip image signing (default true)
创建镜像。
docker image build --help
[root@izoq008ryseuupz ~]# docker image build --help
Usage: docker image build [OPTIONS] PATH | URL | -
Build an image from a Dockerfile
Options:
--add-host list Add a custom host-to-IP mapping (host:ip)
--build-arg list Set build-time variables
--cache-from strings Images to consider as cache sources
--cgroup-parent string Optional parent cgroup for the container
--compress Compress the build context using gzip
--cpu-period int Limit the CPU CFS (Completely Fair Scheduler) period
--cpu-quota int Limit the CPU CFS (Completely Fair Scheduler) quota
-c, --cpu-shares int CPU shares (relative weight)
--cpuset-cpus string CPUs in which to allow execution (0-3, 0,1)
--cpuset-mems string MEMs in which to allow execution (0-3, 0,1)
--disable-content-trust Skip image verification (default true)
-f, --file string Name of the Dockerfile (Default is 'PATH/Dockerfile')
--force-rm Always remove intermediate containers
--iidfile string Write the image ID to the file
--isolation string Container isolation technology
--label list Set metadata for an image
-m, --memory bytes Memory limit
--memory-swap bytes Swap limit equal to memory plus swap: '-1' to enable unlimited swap
--network string Set the networking mode for the RUN instructions during build (default "default")
--no-cache Do not use cache when building the image
-o, --output stringArray Output destination (format: type=local,dest=path)
--platform string Set platform if server is multi-platform capable
--progress string Set type of progress output (auto, plain, tty). Use plain to show container output (default "auto")
--pull Always attempt to pull a newer version of the image
-q, --quiet Suppress the build output and print image ID on success
--rm Remove intermediate containers after a successful build (default true)
--secret stringArray Secret file to expose to the build (only if BuildKit enabled): id=mysecret,src=/local/secret
--security-opt strings Security options
--shm-size bytes Size of /dev/shm
--squash Squash newly built layers into a single new layer
--ssh stringArray SSH agent socket or keys to expose to the build (only if BuildKit enabled) (format: default|<id>[=<socket>|<key>[,<key>]])
--stream Stream attaches to server to negotiate build context
-t, --tag list Name and optionally a tag in the 'name:tag' format
--target string Set the target build stage to build.
--ulimit ulimit Ulimit options (default [])
这里会介绍将一个简单的C语言程序,Build成一个Image。
先在当前目录下创建一个hello.c
程序。
vim hello.c
程序如下:
#include<stdio.h>
int main()
{
printf("hello kaven\n");
printf("this is docker\n");
}
不知道怎么退出VIM,可以看一下这篇博客:怎么保存退出 vim 编辑。
[root@izoq008ryseuupz ~]# ls
hello.c kaven.blog.tar logs mall.jar
[root@izoq008ryseuupz ~]# gcc hello.c -o hello
[root@izoq008ryseuupz ~]# ls
hello hello.c kaven.blog.tar logs mall.jar
[root@izoq008ryseuupz ~]# ./hello
hello kaven
this is docker
在当前目录下创建Dockerfile
。
vim Dockerfile
输入:
FROM scratch
ADD hello /
CMD ["/hello"]
现在看不懂没关系,自己跟着体验一次,之后的博客会详细讲解这些Dockerfile
操作。
docker image build -t kaven/hello:v1 .
[root@izoq008ryseuupz ~]# docker image build -t kaven/hello:v1 .
Sending build context to Docker daemon 564.4MB
Step 1/3 : FROM scratch
--->
Step 2/3 : ADD hello /
---> 5d49f50c725b
Step 3/3 : CMD ["/hello"]
---> Running in b0b3bdce9078
Removing intermediate container b0b3bdce9078
---> b1013ca7925d
Successfully built b1013ca7925d
Successfully tagged kaven/hello:v1
这样kaven/hello:v1
就有了。
Docker Image及Image命令详解就介绍到这里。
写博客是博主记录自己的学习过程,如果有错误,请指正,谢谢!
文章浏览阅读836次,点赞4次,收藏3次。title: 懒汉、饿汉单例模式-完整的懒汉单例模式实现date: 2019-06-07 23:22:50tags: [设计模式,多线程]本文主要介绍懒汉和饿汉单例模式实现以及多线线程场景下完整的懒汉单例模式的实现一般实现饿汉式单例(一开始就实例化)class Singleton { private static Singleton singleton = new ..._题目:用懒汉式单例模式实现身份证问题。 ①. 问题说明:每个人都有一个身份证,且每
文章浏览阅读1.5k次,点赞2次,收藏13次。ES使用JAVA api在开发中的详细使用(与mysql对比),实例讲解_java 结合es的api查询构建和mysql对比
文章浏览阅读55次。近日,滴滴在GitHub上开源了跨端解决方案 Chameleon,简写CML,中文名卡梅龙;中文意思变色龙,意味着就像变色龙一样能适应不同环境的跨端整体解决方案,具有易用、开发快、高性能等特点。下文将详细介绍Chameleon项目的研发背景和性能特点。背景研发同学在端内既追求h5的灵活性,也要追求性能趋近于原生。 面对入口扩张,主端、独立端、微信小程序、支付宝小程序、百度小程序、Android厂商..._无法为文档e:\ projects \ cmlprogram-window-management \ chameleon.config.js
文章浏览阅读803次。源码介绍:彩虹网盘外链是一款PHP网盘与外链分享程序,支持所有格式文件的上传,可以生成文件外链、图片外链、音乐视频外链,生成外链同时自动生成相应的UBB代码和HTML代码,还可支持文本、图片、音乐、视频在线预览,这不仅仅是一个网盘,更是一个图床亦或是音乐在线试听网站。新版本增加了图片违规检测,对接阿里云内容安全服务。源码截图:下载地址:http://www.bytepan.com/6MafHqTfhkV..._百度网盘 视频外链 seo
文章浏览阅读183次。电话_列表标签符合
文章浏览阅读1.1k次。要想学的好,就应该不断地去尝试,当我们_程序员如何定义自己的程序段
文章浏览阅读1.4k次。庚子年,我们的EGO1在疫情当中作为口袋实验平台成为了众多高校的复课利器。其中的成功案例更是得到了新华社网媒与CCTV教育频道的报道。借此东风,为了让更多的老师与学生熟悉了解Xilinx,更好的入门学习FPGA知识,我们的师资培训直播已开设EGO1专题直播,欢迎新老朋友跟踪关注。第二课---- EGO1数码管与键盘本周的直播我们将介绍EGO1的外设使用案例,介绍数码管扫描的原理和PS/2..._fpgaego1 键盘
文章浏览阅读1.9k次。index.html;<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="description" content="京东JD.COM-专业的综合网上购物商城,为您提供正品低价的购 物选择、优质便捷的服务体验。商品来自..._京东商品界面javascript
文章浏览阅读8.6k次。DDD是什么领域驱动设计(Domain Driven Design) 是一种从系统分析到软件建模的一套方法论。以领域为核心驱动力的设计体系。为什么需要DDD面向对象设计,数据行为绑定,告别贫血模型 优先考虑领域模型,而不是切割数据和行为 准确传达业务规则 代码即设计DDD的一些概念战略设计:限界上下文、上下文映射图、子域战术设计:聚合、实体、值对象、资源库、领域服..._ddd
文章浏览阅读1.2k次。外部SD卡无法写入_sd 卡无法写入 媒体 文件
文章浏览阅读802次。jQuery 选择器允许您对 HTML 元素组或单个元素进行操作。jQuery 选择器基于元素的 id、类、类型、属性、属性值等"查找"(或选择)HTML 元素。 它基于已经存在的 CSS 选择器,除此之外,它还有一些自定义的选择器。jQuery 中所有选择器都以美元符号开头:$()。 本文对jQuery选择器作一个总结。1、说明 通用语法:$('具体_jquery $("#input_commonnodesubtypeid option")得到的是什么
文章浏览阅读2.5k次,点赞6次,收藏15次。关于变长(动态)数组 ArrayList缘起在c语言的程序设计中,想要实现对一个数组的长度的动态变化其实是比较困难的,并且也是低效且不尽实用的。但是看到别人在做arraylist时,我决定将网课上所学习的变长数组放上来。另一方面,正是由于变长数组的缺点使得我们可以引入链表的学习。java实现arraylist代码h文件中的代码样例#ifndef __ARRAY_H__#define ..._c语言list实现变长数组