Docker之镜像
1、镜像
镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容包括代码、运行时、库、环境变量和配置文件。
镜像由多个层组成,每层叠加之后,从外部看来就如一个独立的对象。镜像内部是一个精简的操作系统(OS),同时还包含应用运行所必须的文件和依赖包。
2、镜像相关命令
2.1、查看镜像列表(docker images)
docker images 命令列出本地主机上的镜像:
上面可以看到只有一个 hello-world 的镜像。
上面的各个选项说明:
-
REPOSITORY:表示镜像的仓库源
-
TAG:镜像的标签
-
IMAGE ID:镜像ID
-
CREATED:镜像创建时间
-
SIZE:镜像大小
同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,如 ubuntu 仓库源里,有 12.10、14.04 等多个不同的版本,我们使用 REPOSITORY:TAG(比如:tomcat:3.2 )来定义不同的镜像。如果不指定一个镜像的版本标签,docker 将默认使用该镜像的 latest ,即最新镜像。
也可以通过直接查看某个镜像:docker images 镜像名,示例:
2.2、搜索镜像(docker search)
我们可以通过浏览 Docker Hub 网站来搜索镜像,也可以使用 docker search 命令来搜索镜像。
比如我们搜索 tomcat 镜像:
可以发现,第一个就是我们想要找的 tomcat 镜像。
2.3、获取镜像(docker pull)
当我们在本地主机上直接通过 run 来使用一个不存在的镜像时,Docker 会自动下载这个镜像。当然,我们也可以通过 docker pull 命令来手动下载它。
docker pull tomcat #默认下载最新版本,等价于 docker pull tomcat:latest
如果我们在下载或者使用时不指定版本,则默认使用的是最新版本。
当然,我们也可以下载指定版本的镜像,直接在冒号后面加上版本号即可:
docker pull tomcat:3.2
2.4、删除镜像(docker rmi)
镜像删除使用 docker rmi 命令,比如我们删除 hello-world 镜像:
docker rmi hello-world
docker rmi -f hello-world #强制删除
docker rmi hello-world tomcat #要想同时删除多个只需用空格分开镜像名称即可
docker rmi $(docker images -qa) #删除全部镜像
2.5、创建镜像
2.5.1、基于原有的镜像创建新镜像(docker commit)
我们可以基于现有的在运行的容器来做些修改,然后通过 docker commit 命令来将修改后的容器构建成一个镜像。语法如下:
docker commit -m="描述信息" -a="作者名" 容器ID 镜像名:标签 #示例 docker commit -m="mytomcat" -a="wen" 85f874987777 wen/wentomcat:1.0 # wen/是命名空间,不用命名空间也行。镜像名不能有大写字母
比如我们先运行一个 tomcat 容器,然后将该容器的 webapps.dist 文件夹内容复制到 webapps 下,修改过后通过 docker commit 命令将修改过后的容器构建成一个新的镜像:
由此我们就可以看到在本地已经有我们新创建的镜像了:
下面运行该镜像:
上面我们通过将宿主机的 7777 端口映射到新的 tomcat 镜像的 8080 端口上运行,我们可以通过访问宿主机的 ip:7777 来访问 tomcat 的默认项目的首页:
2.5.2、通过dockerfile创建镜像
docker build 命令可用于从Dockerfile构建映像。
语法结构如下:
docker build -f 本地dockerfile文件绝对路径 -t 镜像名 . #最后的 . 不要漏掉,表示Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径 #示例 docker build -f /usr/data/Dockerfile -t mycentos:1.0 .