docker images
docker images 介绍
镜像是动态的容器的静态表示,包括容器所要运行的应用代码以及运行时的配置。Docker镜像包括一个或者多个只读层(read-only layers),因此,镜像一旦被创建就再也不能被修改了,一个运行着的Docker容器时一个镜像的实例(instantiation)。从同一个镜像中运行的容器包含有相同的应用代码和运行时依赖。但是不像镜像是静态的,每个运行着的容器都有一个可写层(writable layer,也成为容器层 container layer),它位于底下的若干只读层之上。运行时的所有变化,包括对数据和文件的写和更新,都会保存在这个层中,因此,从同一个镜像运行的多个容器包含了不同的容器层。
关于镜像是什么总结:
1.一个分层存储的文件
2.一个软件的环境
3.一个镜像可以创建N个容器
4.又称一种标准化的交付
5.一个不包含Linux内核又精简的Liunx操作系统
助理解:镜像不是单一的文件,而是多层构成,我们可以通过docker history <ID/NAME> 查看镜像中各层内容及其大小,每层对应着一个Dockerfile中的一条指令,另外docker镜像存储在/var/lib/docker/<storage-d'river>中。
镜像从哪里来的呢?
Docker hub是由Docker公司负责维护的公共注册中心,包含大量的容器镜像,Docker工具默认从这个公共镜像库下载镜像,地址为:https://hub.docker.com/search/?q=&type=image
镜像加速器的配置:https://www.daocloud.io/mirror
配置方法:
curl -sSL https://get.daocloud.io/daotools/set_mirror.sg | sh -s http://f1361db2.m.daocloud.io
Docker有三种方式创建镜像:
- 基于已有镜像的容器创建:创建一个容器,运行若干命令后,在使用docker commit来生成一个新的镜像。不建议使用这种方案。
- 基于本地模板导入,使用OpenVZ提供的模板来创建,docker import来生成新的镜像。不经常用。
- 基于Dockerfile创建,创建一个Dockerfile,然后在使用docker build来创建一个镜像,大多数都会使用Dockerfile来创建镜像。
镜像相关的基础理论
1. 理解Host OS ,Guest OS and Base image相关理论
举例说明:一台主机上安装的时Centos操作系统,现在上面跑了一个Ubuntu容器。此时,Host OS时Centos,Guest OS是Ubuntu。Guest OS也被称为容器的Base Image。
说明:
- linux内核和版本:所有 Linux 发行版都采用相同的 Linux 内核(kernel),然后所有发行版对内核都有轻微改动。这些改动都会上传回 linux 社区,并被合并。
- linux容器环境:因为所有Linux发行版都包含同一个linux 内核(有轻微修改),以及不同的自己的软件,因此,会很容易地将某个 userland 软件安装在linux 内核上,来模拟不同的发行版环境。比如说,在 Ubuntu 上运行 Centos 容器,这意味着从 Centos 获取 userland 软件,运行在 Ubuntu 内核上。因此,这就像在同一个操作系统(linux 内核)上运行不同的 userland 软件(发行版的)。这就是为什么Docker 不支持在 Linux 主机上运行 FreeBSD 或者windows 容器。
容器的base image 并不是真正的base OS,base image 会远远的比 base OS更轻量。它只安装发行版特殊的部分
base image的用途或者作用是什么呢?
docker容器文件系统与host OS是隔离的,容器镜像中的应用软件无法看到主机文件系统,除非将主机文件系统挂载为容器的卷。因此,可以想象一下,你容器中的应用依赖于各种操作系统库,因此我们不得不将这些库打包到镜像之中,另外,base image会让我们使用到各个发行版的包管理系统,比如yum 和 apt-get。而且,各个linux发行版的base image也不是普通的发行版,而是一个简化了的版本。而且,base image并不带有linux内核,因为主机会使用主机的内核。
因此,需要注重理解image 和 OS这两个概念,之所以成为base OS,是因为base image中并不包括完整的OS,而这一点,是容器与虚拟机之间的本质区别之一。容器是共享主机上的linux内核。
2. Container Base image
从上面内容可以看出,容器把linux镜像从内核空间和用户空间进行了分开管理,对host OS而言,它更侧重与内核,加上少量的用户空间内容;对Guest OS 而言,它只侧重于用户空间,只包括库文件,编译器,配置文件,以及用户代码。
docker images详细用法
1.获取镜像
用法:docker pull NAME[:TAG],如果没有显示TAG,则默认是latest标签,也就是最新版本的镜像。
root@S1:~# docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
898c46f3b1a1: Pull complete
63366dfa0a50: Pull complete
041d4cd74a92: Pull complete
6e1bee0f8701: Pull complete
Digest: sha256:017eef0b616011647b269b5c65826e2e2ebddbe5d1f8c1e56b3599fb14fabec8
Status: Downloaded newer image for ubuntu:latest
默认下载的是最新的ubuntu镜像,默认下载的镜像地址registry.hub.docker.com
相当于如下命令:
docker pull registry.hub.docker.com/ubuntu:latest root@S1:~# docker run -d -t -i ubuntu /bin/bash
082d88976a54d5b05ae39fd5eed6ccff28a6a8881bde553cd48efd75ac3bd754
2.查看镜像信息:
使用docker images 命令可以列出本地主机已有的镜像。
root@S1:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 94e814e2efa8 weeks ago .9MB
hello-world latest fce289e99eb9 months ago .84kB REPOSITORY:来自哪一个仓库,比如ubuntu仓库
TAG:镜像的标签信息,最新的
镜像的id号:这个是唯一的
镜像创建时间
镜像大小 其中镜像的id信息非常重要,因为他是唯一标识了镜像
tag信息用于标记来自同一个仓库的不同镜像,后续工作我们可以使用tag为本地镜像添加新的标签,我们也可以将它用于ci/cd相结合起来使用(后续文章会介绍到,尽情关注) eg:添加一个新的标签:
root@S1:~# docker tag ubuntu:latest ubuntu:16.04
root@S1:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 16.04 94e814e2efa8 weeks ago .9MB
ubuntu latest 94e814e2efa8 weeks ago .9MB
hello-world latest fce289e99eb9 months ago .84kB 这里细心的同学会发现,不同的标签的镜像的ID是完全一致的,说明它们实际上指向了同一个镜像文件,只是名字不同而已,可以理解为linux的软连接或者window的快捷方式。 查看镜像的详细信息
root@S1:~# docker inspect 94e814e2efa8
[
{
"Id": "sha256:94e814e2efa8845d95b2112d54497fbad173e45121ce9255b93401392f538499",
"RepoTags": [
"ubuntu:16.04",
"ubuntu:latest"
],
"RepoDigests": [
"ubuntu@sha256:017eef0b616011647b269b5c65826e2e2ebddbe5d1f8c1e56b3599fb14fabec8"
],
"Parent": "",
"Comment": "",
"Created": "2019-03-12T00:20:17.419392342Z",
"Container": "94772adb8869651410d18062838667884a555cf1878d567734e99dc695d6f5bf",
"ContainerConfig": {
"Hostname": "94772adb8869",
"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:881686baf75637792ebd93d88243b6f5bb89833ce325f9e32e2e70208f0efb64",
"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:881686baf75637792ebd93d88243b6f5bb89833ce325f9e32e2e70208f0efb64",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": null
},
"Architecture": "amd64",
"Os": "linux",
"Size": ,
"VirtualSize": ,
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/e9af142ff18154b104fcae496ca9cdba91a7de36d929738a61fb044df3fd21cb/diff:/var/lib/docker/overlay2/4ebe2a5f541f89e24fc6a4c6f22817e0b5e39358ee9ba507f792e606386c2727/diff:/var/lib/docker/overlay2/66fa62d0da114b8b02bd376cc4507b196dccccf0c1f9635d9db5d5706e95cc39/diff",
"MergedDir": "/var/lib/docker/overlay2/ef8439354f7b197a7bbfa74fa6b0dfd0dabf4bd8009b7528ce5b1d0992b290a5/merged",
"UpperDir": "/var/lib/docker/overlay2/ef8439354f7b197a7bbfa74fa6b0dfd0dabf4bd8009b7528ce5b1d0992b290a5/diff",
"WorkDir": "/var/lib/docker/overlay2/ef8439354f7b197a7bbfa74fa6b0dfd0dabf4bd8009b7528ce5b1d0992b290a5/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:762d8e1a60542b83df67c13ec0d75517e5104dee84d8aa7fe5401113f89854d9",
"sha256:e45cfbc98a505924878945fdb23138b8be5d2fbe8836c6a5ab1ac31afd28aa69",
"sha256:d60e01b37e74f12aa90456c74e161f3a3e7c690b056c2974407c9e1f4c51d25b",
"sha256:b57c79f4a9f3f7e87b38c17ab61a55428d3391e417acaa5f2f761c0e7e3af409"
]
},
"Metadata": {
"LastTagTime": "2019-03-26T19:07:55.36713665+08:00"
}
}
] docker inspect命令返回的是一个JSON格式的消息,如果我们只要其中一项内容时,可以使用-f 参数来指定,如:
root@S1:~# docker inspect -f {{".Metadata"}} 94e814e2efa8
{-- ::55.36713665 + CST}
3.搜寻镜像:
使用docker search命令可以搜索远端仓库中共享的镜像,默认搜索Docker Hub官方仓库中的镜像,用法:docker search TERM
root@S1:~# docker search mysql NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… [OK]
mariadb MariaDB is a community-developed fork of MyS… [OK]
mysql/mysql-server Optimized MySQL Server Docker images. Create… [OK]
zabbix/zabbix-server-mysql Zabbix Server with MySQL database support [OK]
hypriot/rpi-mysql RPi-compatible Docker Image with Mysql
zabbix/zabbix-web-nginx-mysql Zabbix frontend based on Nginx web-server wi… [OK]
centurylink/mysql Image containing mysql. Optimized to be link… [OK]
1and1internet/ubuntu--nginx-php-phpmyadmin-mysql- ubuntu--nginx-php-phpmyadmin-mysql- [OK]
centos/mysql--centos7 MySQL 5.7 SQL database server
mysql/mysql-cluster Experimental MySQL Cluster Docker images. Cr…
tutum/mysql Base docker image to run a MySQL database se…
schickling/mysql-backup-s3 Backup MySQL to S3 (supports periodic backup… [OK]
bitnami/mysql Bitnami MySQL Docker Image [OK]
zabbix/zabbix-web-apache-mysql Zabbix frontend based on Apache web-server w… [OK]
zabbix/zabbix-proxy-mysql Zabbix proxy with MySQL database support [OK]
linuxserver/mysql A Mysql container, brought to you by LinuxSe…
centos/mysql--centos7 MySQL 5.6 SQL database server
circleci/mysql MySQL is a widely used, open-source relation…
mysql/mysql-router MySQL Router provides transparent routing be…
openshift/mysql--centos7 DEPRECATED: A Centos7 based MySQL v5. image…
dsteinkopf/backup-all-mysql backup all DBs in a mysql server [OK]
jelastic/mysql An image of the MySQL database server mainta…
cloudposse/mysql Improved `mysql` service with support for `m… [OK]
ansibleplaybookbundle/mysql-apb An APB which deploys RHSCL MySQL [OK]
widdpim/mysql-client Dockerized MySQL Client (5.7) including Curl… [OK] 返回了很多包含关键字的镜像,其中包括镜像名字,描述,星级(表示该镜像的受欢迎程度),是否官方创建,是否自动创建等 默认的输出结果是按照星级评价进行排序的,官方的镜像说明是官方项目组创建和维护的,automated资源则是允许用户验证镜像的来源和内容。 个人建议:如果自己的线上服务使用的化,自己写dockerfile构建镜像比较好
4.删除镜像
docker rmi 命令可以删除镜像,命令格式docker rmi ID/REPOSITORY:TAG(可以为标签或者ID)
使用镜像标签删除镜像: 如果一个镜像有两个或两个以上的标签,删除的只是标签。
root@S1:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 16.04 94e814e2efa8 weeks ago .9MB
ubuntu latest 94e814e2efa8 weeks ago .9MB
hello-world latest fce289e99eb9 months ago .84kB
root@S1:~# docker rmi ubuntu:16.04
Untagged: ubuntu:16.04
root@S1:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 94e814e2efa8 weeks ago .9MB
hello-world latest fce289e99eb9 months ago .84kB
现在只剩下一个标签的时候,再去用标签删除的话,会将镜像永久的删除,如下:
root@S1:~# docker rmi ubuntu:latest
Untagged: ubuntu:latest
Untagged: ubuntu@sha256:017eef0b616011647b269b5c65826e2e2ebddbe5d1f8c1e56b3599fb14fabec8
Deleted: sha256:94e814e2efa8845d95b2112d54497fbad173e45121ce9255b93401392f538499
Deleted: sha256:e783d8ee44ce099d51cbe699f699a04e43c9af445d85d8576f0172ba92e4e16c
Deleted: sha256:cc7fae10c2d465c5e4b95167987eaa53ae01a13df6894493efc5b28b95c1bba2
Deleted: sha256:99fc3504db138523ca958c0c1887dd5e8b59f8104fbd6fd4eed485c3e25d2446
Deleted: sha256:762d8e1a60542b83df67c13ec0d75517e5104dee84d8aa7fe5401113f89854d9
使用镜像ID删除镜像:
当使用docker rmi 命令后面跟上镜像的ID(也可以是ID能区分的部分前缀)时,会尝试先删除所有指向该镜像的标签,然后删除该镜像文件本身。如果有该镜像的容器存在时,镜像文件默认时无法被删除的,(可以用-f强制删除 但是不推荐)例如:
root@S1:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
59fa4f00d111 ubuntu:16.04 "/bin/bash" minutes ago Up minutes pensive_napier
root@S1:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 16.04 9361ce633ff1 weeks ago 118MB
root@S1:~# docker stop 59fa4f00d111
d59fa4f00d111
root@S1:~# docker rm 59fa4f00d111
59fa4f00d111
root@S1:~# docker rmi 9361ce633ff1
Untagged: ubuntu:16.04
Untagged: ubuntu@sha256:58d0da8bc2f434983c6ca4713b08be00ff5586eb5cdff47bcde4b2e88fd40f88
Deleted: sha256:9361ce633ff193349d54bed380a5afe86043b09fd6ea8da7549dbbedfc2a7077
Deleted: sha256:59a6856f439d187f3ce3381d0a6b0816db99cc3d8468bcf8c9d1c39d2071dcff
Deleted: sha256:82997a16a0d57ac7d8b416c0d83f5841193b6a56a7844b486ab6324730867fe0
Deleted: sha256:5c6983f277f26021b5e38501fdf06fa29f7158a93641f3f10aedbdc9869121d0
Deleted: sha256:aa54c2bc12290df2851a94b8834cae75e4627219d2b423d4d3db8b0a497e79a2
root@S1:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
root@S1:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
删除镜像的规则,应该先删除容器,在删除镜像,之前的版本删除还在容器的镜像还会生成一个临时镜像,ubuntu16.04系统,docker18.09的是可以强制删除掉的
5.创建镜像
基于已有镜像的容器创建:该方法主要是使用docker commit 命令,命令格式:docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG] ],主要选项包括:
-a --author=‘ ’ 作者信息
-c --change 对创建的镜像应用Dockerfile指令
-m --message=‘ ’ 提交信息
-p --pause=true 提交镜像的时候 暂停容器的运行
root@iZhp38fvkcax587xnn2552Z:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 14.04 390582d83ead weeks ago 188MB
启动一个镜像 并作出修改
root@iZhp38fvkcax587xnn2552Z:~# docker run -it ubuntu:14.04 /bin/bash
root@b0ca2a732416:/# mkdir
root@b0ca2a732416:/# touch
root@b0ca2a732416:/# exit
exit 这里需要记住这个容器的id号 root@iZhp38fvkcax587xnn2552Z:~# docker commit -m "add files" -a "Docker newimages" b0ca2a732416 file
sha256:03aa8fcfd2f18c4ce1c4ef35be02fced08313ba62b11d03fddcc7875c80fab34
root@iZhp38fvkcax587xnn2552Z:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
file latest 03aa8fcfd2f1 seconds ago 188MB
ubuntu 14.04 390582d83ead weeks ago 188MB
基于本地模板导入:
也可以充一个操作系统模板文件导入一个镜像。在这里,推荐使用OpenVZ提供的模板来创建。OPENVZ模板的下载地址:https://download.openvz.org/template/precreated/
root@iZhp38fvkcax587xnn2552Z:~# wget https://download.openvz.org/template/precreated/ubuntu-14.04-x86-minimal.tar.gz
---- ::-- https://download.openvz.org/template/precreated/ubuntu-14.04-x86-minimal.tar.gz
Resolving download.openvz.org (download.openvz.org)... 185.231.241.69
Connecting to download.openvz.org (download.openvz.org)|185.231.241.69|:... connected.
HTTP request sent, awaiting response... OK
Length: (73M) [application/x-gzip]
Saving to: ‘ubuntu-14.04-x86-minimal.tar.gz’ ubuntu-14.04-x86-minimal.tar.gz %[==============================================================================>] 72.71M .7KB/s in 21m 52s -- :: (56.8 KB/s) - ‘ubuntu-14.04-x86-minimal.tar.gz’ saved [/]
root@iZhp38fvkcax587xnn2552Z:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
file latest 03aa8fcfd2f1 About an hour ago 188MB
nginx latest 2bcb04bdb83f hours ago 109MB
root@iZhp38fvkcax587xnn2552Z:~# cat ubuntu-14.04-x86-minimal.tar.gz | docker import - ubuntu:14.04
sha256:5863575f1996d4738399f0b3b4c03fe5ab69098b370eb587fc2163367ffcff72
root@iZhp38fvkcax587xnn2552Z:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 14.04 5863575f1996 About a minute ago 205MB
file latest 03aa8fcfd2f1 About an hour ago 188MB
nginx latest 2bcb04bdb83f hours ago 109MB
基于Dockerfile生成镜像:
https://www.cnblogs.com/ylqh/p/10617105.html
6.导出和载入镜像
导出镜像:使用docker save命令,导出本地的ubuntu:14.04的镜像文件为:ubuntu_14.04.tar
root@iZhp38fvkcax587xnn2552Z:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
file latest 03aa8fcfd2f1 minutes ago 188MB
ubuntu 14.04 390582d83ead weeks ago 188MB
root@iZhp38fvkcax587xnn2552Z:~# docker save -o ubuntu_14..tar ubuntu:14.04
导入镜像:使用docker load从本地文件导入到本地的镜像库中,例如:
root@iZhp38fvkcax587xnn2552Z:~# ls
ubuntu_14..tar
root@iZhp38fvkcax587xnn2552Z:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
file latest 03aa8fcfd2f1 minutes ago 188MB
root@iZhp38fvkcax587xnn2552Z:~# docker load --input ubuntu_14.04.tar
Loaded image: ubuntu:14.04
root@iZhp38fvkcax587xnn2552Z:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
file latest 03aa8fcfd2f1 minutes ago 188MB
ubuntu 14.04 390582d83ead weeks ago 188MB
root@iZhp38fvkcax587xnn2552Z:~# docker rmi ubuntu:14.04
Untagged: ubuntu:14.04
root@iZhp38fvkcax587xnn2552Z:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
file latest 03aa8fcfd2f1 minutes ago 188MB
root@iZhp38fvkcax587xnn2552Z:~# docker load < ubuntu_14.04.tar
Loaded image: ubuntu:14.04
root@iZhp38fvkcax587xnn2552Z:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
file latest 03aa8fcfd2f1 minutes ago 188MB
ubuntu 14.04 390582d83ead weeks ago 188MB
7.上传镜像
使用docker push上传镜像到仓库,默认上传到Dockerhub官方仓库(需要认证),命令格式: docker push NAME[:TAG]。
用户在DockerHub网站注册后,可以上传自制的镜像,上传方式如下:
上传镜像需要登陆到docker hub上
root@S1:~# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: zhangzhanling
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded root@S1:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 14.04 390582d83ead weeks ago 188MB root@S1:~# docker tag ubuntu:14.04 zhangzhanling/ubuntu:14.04
root@S1:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 14.04 390582d83ead weeks ago 188MB
zhangzhanling/ubuntu 14.04 390582d83ead weeks ago 188MB
上传镜像
root@S1:~# docker push zhangzhanling/ubuntu
The push refers to repository [docker.io/zhangzhanling/ubuntu]
5f96fa66dc12: Mounted from library/ubuntu
dda5ec330bd9: Mounted from library/ubuntu
11a0c2f551fd: Mounted from library/ubuntu
eef560b4ec4f: Mounted from library/ubuntu
14.04: digest: sha256:76f6920c51a2e9da1fccca4b81a84af0ff287449282d6a04c33adeaeeb4df60d size:
镜像与容器的联系
容器是在镜像的最上面加了一个读写层,在运行容器里的文件改动时,会先从镜像里要写的文件复制到容器自己的文件系统中(读写层)。
如果容器删除了,最上面的读写层也就删除了,改动就丢失了,所以无论多少个容器共享一个镜像,所做的写操作都是从镜像的文件系统中复制过来操作的,并不会修改镜像的源文件,这种方式提高了磁盘利用率。
如果想持久化这些改动,可以通过docker commit将容器保存为一个新镜像
本地镜像需要可以从远端镜像服务器上pull或者push镜像文件,镜像可以实例化成容器,容器也可以commit成镜像
汇总docker images常用的相关命令
docker image 【options】
ls :列出镜像 docker image ls 或者 docker images
build : 通过dockerfile构建镜像
history :查看镜像历史
inspect:显示一个或者多个镜像详细信息
pull:从镜像仓库拉去镜像
push:推送一个镜像到镜像仓库
rm:移除一个或者多个镜像
prune:移除未使用的镜像,没有被标记或被任何容器引用的
tag:创建一个引用源镜像标记的目标镜像
export:导出容器文件系统到tar归档文件
import:导入容器文件系统tar归档文件创建镜像
save:保存一个或多个镜像到一个tar归档文件
load:加载镜像来自tar归档或标准输入
docker images的更多相关文章
- docker——容器安装tomcat
写在前面: 继续docker的学习,学习了docker的基本常用命令之后,我在docker上安装jdk,tomcat两个基本的java web工具,这里对操作流程记录一下. 软件准备: 1.jdk-7 ...
- Docker笔记一:基于Docker容器构建并运行 nginx + php + mysql ( mariadb ) 服务环境
首先为什么要自己编写Dockerfile来构建 nginx.php.mariadb这三个镜像呢?一是希望更深入了解Dockerfile的使用,也就能初步了解docker镜像是如何被构建的:二是希望将来 ...
- Docker 第一篇--初识docker
已经多年不写博客, 看完<晓松奇谈>最后一期猛然觉醒, 决定仔细梳理下自己这几年的知识脉络. 既然决定写, 那么首先就从最近2年热门的开源项目Docker开始.Docker 这两年在国内很 ...
- 在docker中运行ASP.NET Core Web API应用程序(附AWS Windows Server 2016 widt Container实战案例)
环境准备 1.亚马逊EC2 Windows Server 2016 with Container 2.Visual Studio 2015 Enterprise(Profresianal要装Updat ...
- docker for mac 学习记录
docker基本命令 docker run -d -p 80:80 --name webserver nginx 运行容器并起别名 docker ps 展示目前启动的容器 docker ps -a 展 ...
- scrapy爬虫docker部署
spider_docker 接我上篇博客,为爬虫引用创建container,包括的模块:scrapy, mongo, celery, rabbitmq,连接https://github.com/Liu ...
- [原][Docker]特性与原理解析
Docker特性与原理解析 文章假设你已经熟悉了Docker的基本命令和基本知识 首先看看Docker提供了哪些特性: 交互式Shell:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上, ...
- 开发者的利器:Docker 理解与使用
困扰写代码的机器难免会被我们安装上各种各样的开发工具.语言运行环境和引用库等一大堆的东西,长久以来不仅机器乱七八糟,而且有些相同的软件还有可能会安装不同的版本,这样又会导致一个项目正常运行了,却不小心 ...
- 使用python自动生成docker nginx反向代理配置
由于在测试环境上用docker部署了多个应用,而且他们的端口有的相同,有的又不相同,数量也比较多,在使用jenkins发版本的时候,不好配置,于是想要写一个脚本,能在docker 容器创建.停止的时候 ...
- 微服务与Docker介绍
什么是微服务 微服务应用的一个最大的优点是,它们往往比传统的应用程序更有效地利用计算资源.这是因为它们通过扩展组件来处理功能瓶颈问题.这样一来,开发人员只需要为额外的组件部署计算资源,而不需要部署一个 ...
随机推荐
- python2 线程基础
1,感谢菜鸟教程, 线程基础:导入,创建函数,创建线和运行 import thread import time # 为线程定义一个函数 def print_time(threadName, delay ...
- python&django 实现页面中关联查询小功能(中级篇)
目的 组合搜索实现如下图功能 知识点 1.使用自定义标签模板(templatetags) 实现 models.py 和 views.py和初级篇一样 重点如下:在app01目录下创建templatet ...
- 很好用的电脑桌面远程控制软件 支持多平台 Win,Mac,Debian… 等操作系统 Anydesk
很好用的电脑桌面远程控制软件 支持多平台 Win,Mac,Debian, Ubuntu, FreeBSD… 等操作系统 Anydesk 官网下载地址:https://anydesk.com/remot ...
- 管理外部表(External Tables)
Oracle数据库允许对外部表中的数据进行只读访问.外部表定义为不驻留在数据库中的表,并且可以是为其提供访问驱动程序的任何格式.通过为数据库提供描述外部表的元数据,数据库能够公开外部表中的数据,就好像 ...
- MySQL1:客户端/服务器架构
一.MySQL的客户端/服务器架构 前言 之前对MySQL的认知只限于会写些SQL,本篇算是笔记,记录和整理下自己对MySQL不熟悉的地方. 大致逻辑: MySQL的服务器程序直接和我们存储的数据打交 ...
- Oracle 数据库监听无法连接上、监听HANG住、监听无响应、TNS-12560
环境: Windows server 2003 Oracle 11.2.0.1 问题: 一套老数据库在运行了很久后,突然就连接不上了,提示监听异常. 处理: 1.CMD命令行检查监听状态:无监听 2. ...
- 解决python查询报%d format: a number is required, not str问题
文章链接:https://blog.csdn.net/u011878172/article/details/72599120 [问题描述] 1.在一条查询语句中,查询条件既包含了整形又包含了字符串型, ...
- CSS div内文字显示两行,超出部分省略号显示
1. 概述 1.1 说明 在项目过程中,有时候需要控制div内文字最多显示两行,超出的使用省略号进行处理.使用识别码/前缀-webkit进行处理可直接得到相应效果. 1.1 -webkit WebKi ...
- js 对象,数组,字符串,相互转换
1:对象转换数组 let obj = {'val1':1, 'val2':2, 'val3':3, 'val4':4}; var arr = [] for (let i in obj) { //取键 ...
- JavaScript ES6 新特性详解
JavaScript ES6 带来了新的语法和新的强大功能,使您的代码更现代,更易读 const , let and var 的区别: const , let 是 ES6 中用于声明变量的新关键字. ...