Docker-镜像

2018-05-17  本文已影响45人  yuanzicheng

应用程序或者环境依赖以Docker的形式打包以后就是Docker镜像,镜像可以作为模板运行创建、启动容器,从而运行应用程序。

镜像的唯一标识是长度128位的Image ID(跟Container ID相似),也可以使用前16位表示;也可以使用镜像的名字(REPOSITORY)和版本号(TAG)两部分组合唯一标示,如mariadb:latest。

1.镜像分层

Docker镜像采用分层机制,相同的部分独立成为一个文件层级,如果有多个镜像包含相同的文件层级,同一台机器上只需要保持一份即可,大大节省镜像空间。

Docker的镜像通过联合文件系统(Union FileSystem)将各层文件系统叠加成一个完成的文件系统。docker history IMAGE命令可以查看镜像的分层信息。

已有的分层只能读不能修改,并且上层优先级高于下层优先级,如果需要修改下层的文件,需要在原有镜像分层的基础上添加一个空白层,空白层中可以描述对下层文件的修改。

2.生成镜像

2.1 通过docker commit命令从容器生成镜像

大致步骤为基于镜像创建容器 --> 在容器中修改部分内容 --> 使用docker commit生成新镜像

这种方式生成镜像,层数越来越多,可能超过联合文件系统允许的最大层数;另外,如果需要修改镜像,尤其是底层镜像,上层镜像需要跟着一起修改时,通过容器方式生成新镜像,工作量巨大,维护困难。

2.2 通过Dockerfile生成镜像(推荐)

这种方式生成镜像与Linux系统中的make工具类似,make工具依赖于Makefile文件,Makefile文件描述了整个工程所有文件的编译顺序、编译规则,Makefile有自己的书写格式、关键字、函数。通过Makefile文件,make工具才能做到以一行命令完成程序的自动编译。

Docker使用了同样的机制来创建镜像,Dockerfile起到了至关重要的作用。

3.镜像相关命令

3.1 查看本地镜像
docker images
3.2 查找Docker仓库中的镜像
docker search IMAGE
3.3 从Docker仓库下载镜像
dokcer pull IMAGE
3.4 以镜像为模板创建并启动容器
docker run IMAGE 
3.5 将容器提交为新镜像
docker commit [选项] CONTAINER_ID IMAGE
选项
-m "改动信息"
-a "作者相关信息"
3.6 向Docker仓库推送镜像
docker push IMAGE
3.7 删除指定名称镜像
docker rmi IMAGE
3.8 删除所有镜像
docker rmi -f $(docker images)

4.实例

通过MariaDB镜像创建并启动容器,同时指定容器名称(--name)、映射本地端口(-p)、配置环境变量(-e)、绑定数据卷(-v [host-dir]:[container-dir]:[rw|ro]),并且后台运行(-d)。

sudo docker run --name mariadb \
  -v /data/mariadb/data:/var/lib/mysql \
  -p 3307:3306 \
  -e MYSQL_ROOT_PASSWORD= \
  -e MYSQL_ROOT_HOST=% \
  -d mariadb:10.2
上一篇 下一篇

猜你喜欢

热点阅读