我的编程空间,编程开发者的网络收藏夹
学习永远不晚

使用Dockerfile如何构建一个docker镜像

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

使用Dockerfile如何构建一个docker镜像

这篇文章给大家介绍使用Dockerfile如何构建一个docker镜像,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

使用Dockerfile构建docker镜像

1、什么是Dockerfile?

    dockerfile是一个文件,它是使用DSL语法编写一个文件,之后使用docker build命令基于该dockerfile文件中的指令构建一个新的镜像。

    假设我们的代码是:

mkdir testcd testtouch  Dockerfile

   不难看出,我们创建了一个test目录,并进入目录创建了dockerfile_test文件,这个目录就称之为我们的构建环境,Docker将这个环境称之为上下文(context)或者构建上下文,Docker会在构建镜像的时候将构建上下文和上下文中的文件和目录上传到Docker 守护进程,这样Docker守护进程就能直接访问你在镜像中存储的任何代码、文件或者其他数据。

   下面来看一个Docker file的内容:

# version: 0.0.1FROM ubuntu:14.04MAINTAINER Yeyz  'yeyz@example.com'RUN apt-get updateRUN apt-get install -y nginxRUN echo 'Hi, I am your container' > /root/test.htmlEXPOSE 80

    从上面的文件内容中不难看出来,Dockerfile包含了一系列的命令,每个命令前面都需要用大写的关键字来进行标识。以#开头的内容,会被识别为注释。

    Docker大体上按照下面的顺序来执行Dockerfile中的命令,

Docker从基础镜像运行一个容器,每个DockerFile的第一个命令都应该是From,From指定了一个基础镜像,后续指令都在这个基础上执行。

执行一条指令,对容器作出修改

执行类似docker commit的操作,提交一个新的镜像层

Docker镜像再基于刚才提交的镜像运行一个容器

执行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 kBStep 1/6 : FROM ubuntu:14.04Trying to pull repository docker.io/library/ubuntu ... 14.04: Pulling from docker.io/library/ubuntu2e6e20c8e2e6: Downloading [>                                                  ] 539.1 kB/70.69 MB95201152d9ff: 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命令运行镜像。

Dockerfile构建缓存

   当我们第一次构建的Dockerfile出现问题的时候,需要再次构建,这个时候会执行相同的指令,假设我们修改了Dockerfile中第4行的内容,那么Docker会自动将前3行通过缓存的方式来进行加载,这会节省大量的时间。

    如果我们不想使用Dockerfile的缓存,则可以通过加上--no-cache参数来避免使用Dockerfile缓存。

查看镜像的构建历史

docker history可以查看构建好的镜像的构建历史,以及构建好的镜像的每一层。

[root@VM-16-13-centos test]# docker images mysqlREPOSITORY          TAG                 IMAGE ID            CREATED             SIZEdocker.io/mysql     latest              4f1413420360        7 weeks ago         545 MB[root@VM-16-13-centos test]# docker history 4f1413420360IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT4f1413420360        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镜像就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

使用Dockerfile如何构建一个docker镜像

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

使用Dockerfile如何构建一个docker镜像

这篇文章给大家介绍使用Dockerfile如何构建一个docker镜像,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。使用Dockerfile构建docker镜像1、什么是Dockerfile? dockerfil
2023-06-14

使用Dockerfile怎么构建一个Docker镜像

这篇文章将为大家详细讲解有关使用Dockerfile怎么构建一个Docker镜像,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Dockerfile是一个文本文件,其内包含了一条条的指令(In
2023-06-06

如何用dockerfile指令构建docker镜像

本篇内容主要讲解“如何用dockerfile指令构建docker镜像”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何用dockerfile指令构建docker镜像”吧!初识Dockerfile
2023-06-30

如何搭建Dockerfile构建镜像

这篇文章给大家介绍如何搭建Dockerfile构建镜像,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。几乎所有的image都是通过Dockerfile生成出来的,使用Dockerfile可以让我们很轻松的构建出一个镜像,
2023-06-19

怎么在python中利用Dockerfile构建一个镜像

今天就跟大家聊聊有关怎么在python中利用Dockerfile构建一个镜像,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。python的数据类型有哪些?python的数据类型:1.
2023-06-14

如何使用Docker镜像构建Go应用

这篇文章主要介绍了如何使用Docker镜像构建Go应用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何使用Docker镜像构建Go应用文章都会有所收获,下面我们一起来看看吧。修炼背景我夜以继日,加班加点开发了
2023-06-29

使用DockerFile构建镜像与镜像上传的实现步骤

本文详细介绍了使用Dockerfile构建镜像和上传镜像的步骤。通过创建Dockerfile文件并添加必要的指令,用户可以构建自定义镜像。然后,他们可以通过登录DockerHub、标记镜像并将其上传到DockerHub来上传镜像。本文还讨论了多阶段构建、缓存指令、自动化构建和最佳实践等高级概念。
使用DockerFile构建镜像与镜像上传的实现步骤
2024-04-02

Docker镜像构建中docker commit怎么使用

这篇“Docker镜像构建中docker commit怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Docker镜像
2023-06-29

如何使用docker构建jenkins镜像并运行容器

这篇文章主要讲解了“如何使用docker构建jenkins镜像并运行容器”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用docker构建jenkins镜像并运行容器”吧!目录:1、基于
2023-06-19

如何使用Dockerfile定制Java Web镜像

本篇内容介绍了“如何使用Dockerfile定制Java Web镜像”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、前言对使用 Docke
2023-06-19

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录