Dockerfile 自动制作 Docker 镜像(一)—— 基本命令

前言

a. 本文主要为 Docker的视频教程 笔记。

b. 环境为 CentOS 7.0 云服务器

c. 上一篇:手动制作Docker镜像

Dockerfile 基本命令

编辑 Dockerfile 文件:

FROM centos:7
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
RUN yum install httpd
CMD ["httpd","-D","FOREGROUND"]

Dockerfile 中, FROM 表示要基于哪个镜像RUN 表示在容器中执行的命令CMD 表示执行命令,注意在 CMD 命令中每个参数都要使用引号和逗号隔开。

构建:

docker image build -t centos7_httpd .	# 可以使用 -t <NAME>:<TAG> 格式的参数表示构建出的镜像名

构建过程:

Sending build context to Docker daemon 2.048kB

Step 1/5 : FROM centos:7

---> 5e35e350aded

Step 2/5 : RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

---> Running in 2d8d6373ba83

...... # 此处省略

Removing intermediate container 2d8d6373ba83 # 注意此处

---> 44dd8be815d9

Step 3/5 : RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

---> Running in 7f04af4134f5

...... # 此处省略

Removing intermediate container 7f04af4134f5 # 注意此处

---> 5b6b8fadb9aa

Step 4/5 : RUN yum install httpd -y

---> Running in 97c2e32381fc

...... # 此处省略

Removing intermediate container 97c2e32381fc # 注意此处

---> 47a33ea682ed

Step 5/5 : CMD ["httpd","-D","FOREGROUND"]

---> Running in b62798cd6f92

Removing intermediate container b62798cd6f92 # 注意此处

---> 3a24eb0f4fa0

Successfully built 3a24eb0f4fa0

Successfully tagged centos7_httpd:latest

再次构建时会对不变的命令使用缓存,快了很多。

Sending build context to Docker daemon 2.048kB

Step 1/5 : FROM centos:7

---> 5e35e350aded

Step 2/5 : RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

---> Using cache

---> 44dd8be815d9

Step 3/5 : RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

---> Using cache

---> 5b6b8fadb9aa

Step 4/5 : RUN yum install httpd -y

---> Using cache

---> 47a33ea682ed

Step 5/5 : CMD ["httpd","-D","FOREGROUND"]

---> Using cache

---> 3a24eb0f4fa0

Successfully built 3a24eb0f4fa0

Successfully tagged centos7_httpd1:latest

运行镜像 docker run -d -p 8890:80 centos7_httpd,可以访问成功。

注意以上特别标注的地方:Docker 执行每个 RUN 命令时实际上都是在上一个基础上新建一个容器,执行完成后立即保存,在此基础上再执行下一个,直至完成。

因此需要注意的是,很多命令是不生效的,比如 cd 命令,在下一条命令又会变回原始工作路径。如果一定要执行,可以在 dockerfile 中使用 WORKDIR 命令来设置目录,或使用 “&&” 符号关联多条命令。同时注意修改 host 文件也是不会生效的,因为 Docker 每次启动新容器都会修改它的 host 以设置网络

TIPS: 使用 docker image prune 删除名字和标签均为 “<none> ” 的镜像(强制删除有容器使用的镜像 和 构建过程中被终止时会产生)。

后记

这篇应该是发布时间在一天中最早的了。身为上班社畜,感觉周六似乎是睡不了懒觉的了,又是工作日的时间起床,233333。不过这篇是提前写好的,因为感觉学习不是一个线性的过程,很多时候前面的内容需要学习后面内容后才能理解的更加深刻和透彻,在写后面内容有关文章时,也在不断补充和完善之前的文章(也包括文章结构的调整,这也许就是传说中的重构doge)。

Dockerfile 自动制作 Docker 镜像(一)—— 基本命令的更多相关文章

  1. Dockerfile自动制作Docker镜像(二)—— 其它常用命令

    Dockerfile自动制作Docker镜像(二)-- 其它常用命令 前言 a. 本文主要为 Docker的视频教程 笔记. b. 环境为 CentOS 7.0 云服务器 c. 上一篇:Dockerf ...

  2. Dockerfile 自动制作 Docker 镜像(三)—— 镜像的分层与 Dockerfile 的优化

    Dockerfile 自动制作 Docker 镜像(三)-- 镜像的分层与 Dockerfile 的优化 前言 a. 本文主要为 Docker的视频教程 笔记. b. 环境为 CentOS 7.0 云 ...

  3. dockerfile自动创建docker镜像

    特点:类似于ansible 剧本,大小几kb 而,手动做的镜像,要几百M,甚至上G ,传输不方便 dockerfile 支持自定义容器的初始命令 dockerfile只要组成部分: 基础镜像信息 FR ...

  4. 在docker hub,用github的dockerfile自动生成docker镜像

    简介: 我已经深深的爱上了docker技术. 在日常使用中,经常看到docker hub 中有很多autobuild的镜像.基本使用是在github中上传dockerfile,过一会儿,docker ...

  5. SpringBoot系列: 制作Docker镜像的全过程

    本文主要参考了 https://segmentfault.com/a/1190000016449865 , 感谢作者的付出. 另外,  在本文中, 演示了Windows+Maven+Docker To ...

  6. 制作Docker镜像的两种方式

    此文已由作者朱笑天授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 一.使用docker commit命令制作docker镜像 1. pull一个centos6.6的基础镜像, ...

  7. [开源]制作docker镜像不依赖linux和Docker环境

    背景 最近群友们经常反馈docker镜像制作起来有点麻烦,我开源的antdeploy工具虽然可以制作镜像但是必须有一个提前:有一台安装好docker的linux服务器.因为大家开发环境基本上都是win ...

  8. 体验SpringBoot(2.3)应用制作Docker镜像(官方方案)

    关于<SpringBoot-2.3容器化技术>系列 <SpringBoot-2.3容器化技术>系列,旨在和大家一起学习实践2.3版本带来的最新容器化技术,让咱们的Java应用更 ...

  9. 详解SpringBoot(2.3)应用制作Docker镜像(官方方案)

    关于<SpringBoot-2.3容器化技术>系列 <SpringBoot-2.3容器化技术>系列,旨在和大家一起学习实践2.3版本带来的最新容器化技术,让咱们的Java应用更 ...

随机推荐

  1. 了解CSS in JS(JSS)以及在React项目中配置并使用JSS

    目录 认识JSS 什么是JSS JSS 的常见实现 JSS 的好处与坏处 好处 坏处 使用模块化CSS实现JSS 安装插件 在React项目中的tsconfig.json中添加配置 vscode项目中 ...

  2. dubbo学习实践(2)之Dubbo入门Demo

    开篇之前,先来了解下dubbo服务治理与技术架构,直接看图 dubbo技术架构图: 1. 新建dubbo项目,目录结构如下 代码说明: 1.代码分为Provider(服务提供方)与consumer(服 ...

  3. E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable) E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?

    E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)E: Unable to l ...

  4. NOIP 模拟 $27\; \rm 牛半仙的妹子图$

    题解 \(by\;zj\varphi\) 颜色数很少,考虑枚举颜色数. 建出来一棵最小生成树,可以证明在最小生成树上,一个点到另一个点的路径上的最大权值最小(易证,考虑 \(\rm kruskal\) ...

  5. nacos项目搭建(服务提供者,服务消费者)

    spring cloud ablibaba 版本说明 https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明 启动nacos服务 官网: h ...

  6. 转: SIFT原理解释

    1.SIFT概述 SIFT的全称是Scale Invariant Feature Transform,尺度不变特征变换,由加拿大教授David G.Lowe提出的.SIFT特征对旋转.尺度缩放.亮度变 ...

  7. SQL查询对分数进行排名

    编写SQL查询以对分数进行排名. 如果两个分数之间存在平局,则两者应具有相同的排名. 请注意,在平局之后,下一个排名数应该是下一个连续的整数值. 换句话说,等级之间不应该存在"漏洞" ...

  8. SpringBoot中的静态资源访问

    一.说在前面的话 我们之间介绍过SpringBoot自动配置的原理,基本上是如下: xxxxAutoConfiguration:帮我们给容器中自动配置组件: xxxxProperties:配置类来封装 ...

  9. linux 下的用户的管理

  10. 关于servlet中要写初始化逻辑应该重载有参还是无参的init

    关于开发者在写初始化逻辑的时候,应该选用的哪个init方法@author mzy 在查看servlet的源码的时候,因为servlet是一个接口使用较麻烦: 所以我们使用它的实现类:GenericSe ...