什么是docker镜像
docker镜像是使用联合加载技术实现的层叠的只读文件系统,它是容器构建的基石。
docker镜像的存储位置可以通过docker info
来查看:
列出镜像
命令:
docker images [OPTIONS] [REPOSITORY]
无参数:显示所有镜像(不显示中间层)
-a:显示所有镜像
-f:显示时的过滤条件
--no-trunc:不以截断的形式显示数据(默认情况下会截断镜像的唯一id)
-q:只显示唯一id
docker iamges
显示当前安装的所有镜像的信息。
- REPOSITORY:镜像所属的仓库名
- TAG:镜像标签
- IMAGE ID:镜像的唯一ID,已被截断,与本地镜像存储目录下的文件名一致
- CREATED:创建时间
- SIZE:大小
REPOSITORY和REGISTRY的区别
REPOSITORY和REGISTRY都是仓库的意思,两者的区别是:
REPOSITORY是一系列相关连的镜像的集合,REGISTRY是提供仓库存储服务的。
例如docker hub就是提供镜像存储服务的,他其中有很多REPOSITORY,例如apache,nginx,centos等,而这些REPOSITORY又有具体版本的镜像,如centos的REPOSITORY中有6.5、7.0、7.2等版本的镜像。
所以,REPOSITORY是包含在REGISTRY中的,REPOSITORY组成了REGISTRY
Tag
不同的镜像利用标签来进行区分。一个完整的镜像名字是由:REPOSITORY+Tag来构成的,而一个完整的镜像名称就会构成一个镜像id。
如果不指定镜像的Tag,那么会默认指定标签为:latest。
同一仓库镜像的不同标签可能对应的相同的镜像id,这意味着可以为一个镜像根据不同的需求打上不同的标签。
docker images –no-trunc
使用--no-trunc
将会在显示中不截断镜像的id:
这个id名和存储镜像文件名一致
docker images -a
-a
选项可以显示中间层镜像
有一些没有仓库名和Tag的镜像就是中间层镜像
docker iamges -q
将只返回image id这一列的数据
指定镜像仓库查看镜像
将会放回指定镜像仓库下的所有镜像
查看镜像的详细信息
docker inspect [OPTIONS] CONTAINER|IAMGE
例如:
docker inspect myimage/httpd
或
docker inspect f54134788407
删除镜像
docker rmi [OPTIONS] IMAGE
-f:强制删除
--no-prune:保留镜像中被打标签的副镜像
如果后面接的是镜像id,那么这个id的所有镜像(不同标签)都会删除,如果接的是:镜像名称+tag,那么只有这个tag被删除,镜像本身没有删除。
查找镜像
1、通过docker hub官方网站查找镜像:
https://registry.hub.docker.com
在docker hub官网注册账户后登陆,进入镜像查找界面进行搜索即可,这里不做过多介绍。
2、docker命令行进行查找:
docker search [OPTIONS] TRRM
--automated:只显示自动化构建的镜像
--no-trunc:不以截断方式输出
-s:限定显示结果的最少星级
最多返回25条信息
可以看到,返回的内容包括:名称、描述、星级、是否为官方、是否自动构建
使用-s 指定最少星级,比如限定返回三星级以上的可以如下:
docker search -s 3 centos
拉取镜像
docker pull [OPTIONS] NAME[:TAG]
-a:下载仓库中匹配到名字的所有标签的镜像
例如下载ubuntu14.04的镜像如下:
docker pull ubuntu:14.04
推送镜像
docker push [镜像名称]
需要先登录docker hub,上传后变成公共镜像
构建镜像
构建docker镜像提供了自定义镜像的能力,能够保存对镜像的修改并再次使用,可以以软件的形式打包并分发服务以及运行环境。
docker提供了两种方式构建镜像:
1、通过容器构建镜像:docker commit
2、通过Dockerfile构建镜像:docker build
docker commit构建镜像
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
-a:指定镜像作者
-m:记录镜像构建信息
-p:不暂停正在执行的容器
首先启动一个交互式镜像:
docker run -it -p 80 --name my_test centos /bin/bash
然后对容器进行修改:
yum install -y httpd
安装完成和退出,可以看到刚建立好的容器:
[root@docker ~]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
25a839835fc7 centos "/bin/bash" 2 minutes ago Exited (0) 5 seconds ago my_test
下面用commit来创建镜像:
docker commit -a 'my docker image commit test' -m 'httpd' my_test mycommit/commit_test1
-a:指定了作者的信息
-m:指定了创建的信息
my_test:这里用的是容器名称,也可以是容器id
my_test mycommit:这里一般可以填docker hub的账户名
commit_test1:任意的镜像名称
结束后返回一个id就是镜像的唯一id
Dockerfile构建镜像
步骤:
- 创建Dockerfile
-
使用
docker build
命令Dockerfile实际上是一个包含一系列命令的文本文件,包含镜像基础、维护人、执行的命令和端口等。
首先创建Dockerfile文件:
mkdir dockerfile
cd dockerfile
vim Dockerfile
# dockerfile for test
FROM centos:latest
MAINTAINER mytest
RUN yum install httpd
EXPOSE 80
单后使用docker build
构建镜像:
docker build [OPTIONS] PATH | URL
--force-rm:
--no-trunc:
--pull:
-q:
--rm:
-t=:指定构建镜像的tag
docker build -t='dockertest/dockerfile_build' /root/dockerfile/
构建过程就是依次执行文件中的命令,每执行一次就会返回一个id,这个id就是中间层的id
本文转自:这里