dockerfile镜像介绍(使用Dockerfile构建docker镜像)
dockerfile镜像介绍
使用Dockerfile构建docker镜像目录
- 使用Dockerfile构建docker镜像
- 1、什么是Dockerfile?
- 2、执行一个Dockerfile,构建镜像
今天我们看看Dockerfile创建的方法。
构建docker镜像,有两种方法:
1、一种是使用docker commit命令
2、另外一种是基于docker build命令和dockerfile文件
通常情况下,dockerfile构建镜像比docker commit命令构建 镜像更加灵活,因此采用后者较多。
使用Dockerfile构建docker镜像1、什么是Dockerfile?
dockerfile是一个文件,它是使用DSL语法编写一个文件,之后使用docker build命令基于该dockerfile文件中的指令构建一个新的镜像。
假设我们的代码是:
mkdir test cd test touch Dockerfile
不难看出,我们创建了一个test目录,并进入目录创建了dockerfile_test文件,这个目录就称之为我们的构建环境,Docker将这个环境称之为上下文(context)或者构建上下文,Docker会在构建镜像的时候将构建上下文和上下文中的文件和目录上传到Docker 守护进程,这样Docker守护进程就能直接访问你在镜像中存储的任何代码、文件或者其他数据。
下面来看一个Docker file的内容:
# version: 0.0.1 FROM ubuntu:14.04 MAINTAINER Yeyz 'yeyz@example.com' RUN apt-get update RUN apt-get install -y nginx RUN echo 'Hi, I am your container' > /root/test.html EXPOSE 80
从上面的文件内容中不难看出来,Dockerfile包含了一系列的命令,每个命令前面都需要用大写的关键字来进行标识。以#开头的内容,会被识别为注释。
Docker大体上按照下面的顺序来执行Dockerfile中的命令,
1、Docker从基础镜像运行一个容器,每个DockerFile的第一个命令都应该是From,From指定了一个基础镜像,后续指令都在这个基础上执行。
2、执行一条指令,对容器作出修改
3、执行类似docker commit的操作,提交一个新的镜像层
4、Docker镜像再基于刚才提交的镜像运行一个容器
5、执行Dockerfile中的下一条指令,知道所有的容器指令都执行完成
上面的过程中,任意一个步骤执行失败,都意味着目标镜像创建失败,但是因为目标镜像是一个一个镜像堆积的结果,其实我们得到了一个可以运行的镜像,只不过还没有达到最终的镜像的样子,这个特性对于调试镜像很重要。
我们对上面的镜像进行解释:
Version:代表注释,表示版本
From指令,From指定了一个基础镜像ubuntu,说明我们的操作是在ubuntu这个基础镜像上进行的
Maintainer指令,这个指令代表的是镜像的作者,以及作者的电子邮件地址
RUN指令,RUN指令会在当前镜像中运行指定的命令,三条指令分别是更新apt仓库,安装nginx包,打印一条命令到指定的文件中。每条命令都会创建一个镜像层。如果该命令成功,这个镜像层就会提交,之后继续指定DockerFile中的下面一条指令。默认情况下,RUN命令会使用shell中的/bin/bash -c来执行后面的指令。
Expose指令,这条指令告诉容器内的应用程序使用容器的指定端口。当然,可以使用多个EXPOSE来向外面公开多个端口。
2、执行一个Dockerfile,构建镜像
我们执行刚才的Dockerfile,得到如下结果:
[root test]# docker build -t='yeyz:test0' . Sending build context to Docker daemon 2.048 kB Step 1/6 : FROM ubuntu:14.04 Trying to pull repository docker.io/library/ubuntu ... 14.04: Pulling from docker.io/library/ubuntu 2e6e20c8e2e6: Downloading [> ] 539.1 kB/70.69 MB 95201152d9ff: Download complete 5f63a3b65493: Download complete
其中,-t选项是用来指定镜像和仓库名称的,yeyz为仓库名字,而test0为镜像名字。命令中的.代表了当前目录,Docker默认从本地目录中去寻找DockerFile,也可以替换成一个指定的Git仓库源地址来指定DockerFile的位置。如下:
docker build -t='yeyz/test0' xxxx.com:yeyz/test0
如果想要保留版本信息,可以指定一个标签,如下:
docker build -t='yeyz/test0:v1' .
如果我们只想上传某个目录下面的部分文件,可以创建一个.dockerignore的文件,每一行都是一个文件过滤匹配模式,这样,在生成镜像的时候,会自动过滤掉那些不需要的文件。
最终的返回值是一个镜像ID,我们拿到镜像ID之后,就可以使用docker run命令运行镜像。
3、Dockerfile构建缓存
当我们第一次构建的Dockerfile出现问题的时候,需要再次构建,这个时候会执行相同的指令,假设我们修改了Dockerfile中第4行的内容,那么Docker会自动将前3行通过缓存的方式来进行加载,这会节省大量的时间。
如果我们不想使用Dockerfile的缓存,则可以通过加上--no-cache参数来避免使用Dockerfile缓存。
4、查看镜像的构建历史
docker history可以查看构建好的镜像的构建历史,以及构建好的镜像的每一层。
[root@VM-16-13-centos test]# docker images mysql REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/mysql latest 4f1413420360 7 weeks ago 545 MB [root@VM-16-13-centos test]# docker history 4f1413420360 IMAGE CREATED CREATED BY SIZE COMMENT 4f1413420360 7 weeks ago /bin/sh -c #(nop) CMD ["mysqld"] 0 B <missing> 7 weeks ago /bin/sh -c #(nop) EXPOSE 3306 33060 0 B <missing> 7 weeks ago /bin/sh -c #(nop) ENTRYPOINT ["docker-ent... 0 B <missing> 7 weeks ago /bin/sh -c ln -s usr/local/bin/docker-entr... 34 B <missing> 7 weeks ago /bin/sh -c #(nop) COPY file:f9202f6b715c0e... 13.1 kB <missing> 7 weeks ago /bin/sh -c #(nop) COPY dir:2e040acc386ebd2... 1.12 kB <missing> 7 weeks ago /bin/sh -c #(nop) VOLUME [/var/lib/mysql] 0 B <missing> 7 weeks ago /bin/sh -c { echo mysql-community-server... 410 MB <missing> 7 weeks ago /bin/sh -c echo "deb http://repo.mysql.com... 55 B <missing> 7 weeks ago /bin/sh -c #(nop) ENV MYSQL_VERSION=8.0.2... 0 B <missing> 7 weeks ago /bin/sh -c #(nop) ENV MYSQL_MAJOR=8.0 0 B <missing> 7 weeks ago /bin/sh -c set -ex; key='A4A9406876FCBD3C... 2.61 kB <missing> 7 weeks ago /bin/sh -c apt-get update && apt-get insta... 52.2 MB <missing> 7 weeks ago /bin/sh -c mkdir /docker-entrypoint-initdb.d 0 B <missing> 7 weeks ago /bin/sh -c set -eux; savedAptMark="$(apt-... 4.17 MB <missing> 7 weeks ago /bin/sh -c #(nop) ENV GOSU_VERSION=1.12 0 B <missing> 7 weeks ago /bin/sh -c apt-get update && apt-get insta... 9.34 MB <missing> 7 weeks ago /bin/sh -c groupadd -r mysql && useradd -r... 329 kB <missing> 7 weeks ago /bin/sh -c #(nop) CMD ["bash"] 0 B <missing> 7 weeks ago /bin/sh -c #(nop) ADD file:d2abb0e4e7ac177... 69.2 MB
以上就是使用Dockerfile构建docker镜像的详细内容,更多关于用Dockerfile构建docker镜像的资料请关注开心学习网其它相关文章!
- docker如何加volume(Dockerfile 中 VOLUME 与 docker -v 的区别说明)
- dockerfile配置参数(dockerfile中ENTRYPOINT与CMD的结合使用及区别)
- 2022-01-25 00:54:18
- docker 命令上传镜像到镜像仓库(Docker 制作镜像Dockerfile和commit操作)
- idea生成dockerfile(idea集合docker实现镜像打包一键部署)
- docker怎么增加端口(docker 添加端口及获取dockerfile的方法)
- docker和tomcat建立连接(如何基于Dockerfile构建tomcat镜像)
- dockerfile挂载目录(解决docker run中使用 ./ 相对路径挂载文件或目录失败的问题)
- docker怎么使用supervisor(supervisor下的Dockerfile的多服务镜像封装操作)
- 如何使用docker启动tomcat(Docker容器上用DockerFile部署多个tomcat服务的步骤)
- dockerfile镜像介绍(使用Dockerfile构建docker镜像)
- dockerfile构建镜像两种方式(通过Dockerfile构建Docker镜像的方法步骤)
- dockerfile深度解析(Dockerfile文本文件使用方法实例解析)
- dockerfile启动容器服务(docker文件存放路径, 获取容器启动命令操作)
- dockerfile的镜像原理(dockerfile制作apache镜像的方法)
- dockerfile映射目录(Dockerfile中ENTRYPOINT 和 CMD的区别说明)
- 《道德经》:功成不局,泰而不骄(道德经:功成不局)
- 每日一典 过江之鲫(每日一典过江之鲫)
- 红色代表什么(红色代表什么意义和象征)
- 菲律宾安全吗(菲律宾安全吗2023)
- 彩礼重要吗()
- 写信告诉我今天海是什么颜色(写信告诉我今天海是什么颜色回答)
热门推荐
- 手机网站设计的几个建议
- SQLServer2019安装教程图文详解(SQLServer2019安装教程图文详解)
- dedecms 操作日志代码修改(dedecms 调用单页栏目内容到首页的方法)
- css如何使用z-index(CSS中的z-index属性基本使用教程)
- python人脸识别库(python3人脸识别的两种方法)
- 微信小程序canvas缩放(微信小程序之html5 canvas绘图并保存到系统相册)
- 单元格内容过多超出怎么办(单元格内文本显示超过单元格宽度的快速解决办法)
- 微信小程序css使用技巧(微信小程序 CSS filter滤镜的使用示例详解)
- javascript页面滚动窗口(javascript实现简单滚动窗口)
- sqlsever查看视图数据类型(SQL Sever查询语句大全集锦)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9