Docker(五)如何构建Dockerfile
摘自
https://mp.weixin.qq.com/s/_hq9dPe6390htN8BTkoQeQ
一、Dockerfile的指令集
由于Dockerfile中所有的命令都是以下格式:INSTRUCTION argument,指令(INSTRUCTION)不分大小写,但是约定俗成是大写的。
1、FROM
FROM是用于制定基础的images,一般格式为FROM<images> or FROM<IMAGE>:<TAG> ,所以有的Dockerfile都用该以FROM开头,FROM命令指明Dockerfile所创建的镜像文件以什么镜像为基础,FROM以后的所有指令都会在FROM的基础上进行创建镜像。可以在同一个Dockerfile中多次使用FROM命令用于创建多个镜像。比如我们需要指定python2.7的基础镜像,可以像如下写法一样:
FROM python:2.7
2、MAINTAINER
MAINTAINER是用于指定镜像创建者和联系方式,一般格式为MAINTAINER<name>。这里我设置我的ID和邮箱
MAINTAINER AAA <AAA@ffff.com>
3、COPY
COPY是用于复制本地主机的<src>(为Dockerfile所在目录的相对路径)到容器中的<dest>。当使用本地目录为源目录时,推荐使用copy。一般格式为copy <src><dest>。例如我们要拷贝当前目录到容器中的/app目录下,我们可以这样操作
COPY . /app
4、WORKDIR
WORKDIR用于配合RUN,CMD,ENTRYPOINT命令设置当前工作路径。可以设置多次,如果是相对路径。一般格式为 WORKDIR/path/to/word/dir。
WORKDIR /app
5、RUN
RUN pip install -r requirements.txt
6、EXPOSE
EXPOSE命令用来指定对外开放的端口。一般格式为EXPOSE<PORT>,例如上面那个例子,开放5000端口:
EXPOSE
7、ENTRYPOINT
ENTRYPOINT可以让你的容器表现得像一个可执行程序一样。一个Dockerfile中只能有一个ENTRYPOINT,如果有多个,则最后一个生效。格式有两种
- ENTRYPOINT["executable", "param1", "param2"]:推荐使用的exec形式
- ENTRYPOINT command param1 param2: shell形式
例如下面这个,我们要将python变成那个可执行的程序,我们可以这样取做:
ENTRYPOINT ["python"]
8、CMD
CMD命令用于启动容器时默认的执行命令,CMD命令可以包含可执行文件,也可以不包含可执行文件。不包含可执行文件的情况下就要用ENTRYPOINT指定一个,然后CMD命令参数就会作为ENTRYPOINT的参数。
CMD命令有三种格式:
- CMD["executable", "param1", "param2"]: 推荐使用的exec形式
- CMD["param1", "param2"]: 无可执行程序形式
- CMD command param1 param2: shell形式
一个Dockerfile中只能有一个CMD,如果有多个,则最后一个生效。而CMD的shell形式默认调用 /bin/sh -c执行命令。CMD命令会被Docker命令行传入的参数覆盖: docker run busybox /bin/ echo Hello Docker会把CMD里的命令覆盖。
例如我们要启动 /app,我们可以用如下命令实现:
CMD ["app.py"]
二、构建Dockerfile
我们大体已经把Dockerfile的写法讲述完毕,我们可以自己动手写一个例子:
FROM nginx MAINTAINER AAAA <AAAA@FFFF.com> RUN echo 'Hello World' > /usr/share/nginx/html/index.html
Docker(五)如何构建Dockerfile的更多相关文章
- Docker容器学习梳理 - Dockerfile构建镜像
在Docker的运用中,从下载镜像,启动容器,在容器中输入命令来运行程序,这些命令都是手工一条条往里输入的,无法重复利用,而且效率很低.所以就需要一 种文件或脚本,我们把想执行的操作以命令的方式写入其 ...
- docker学习笔记:简单构建Dockerfile【Docker for Windows】
参考与入门推荐:https://www.cnblogs.com/ECJTUACM-873284962/p/9789130.html#autoid-0-0-9 最近学习docker,写一个简单构建Doc ...
- Docker镜像的构建(五)
目录 构建镜像 1.使用 commit 命令构建 1.1 运行一个要进行修改的容器 1.2 安装 Apache 软件包 1.3 提交定制容器 2.使用 Dockerfile 构建 2.1 我们的第一个 ...
- Docker(五):Dockerfile
我们使用 Dockerfile 定义镜像,依赖镜像来运行容器,因此 Dockerfile 是镜像和容器的关键,Dockerfile 可以非常容易的定义镜像内容,同时在我们后期的微服务实践中,Docke ...
- docker学习之使用 DockerFile 构建镜像并搭建 swarm+compose 集群
题目要求 (1)将springboot应用程序打成jar包:Hot.jar (2)利用dockerfile将Hot.jar构建成镜像 (3)构建 Swarm 集群 (4)在 Swarm 集群中使用 c ...
- Docker学习重点(7)~DockerFile
一.DockerFile DockerFile是用来构建docker镜像的文件,可以理解为命令参数脚本! 1.构建步骤: 编写一个dockerfile文件 docker build 构建成为一个镜像 ...
- Docker多步构建更小的Java镜像
译者按: 最新版Docker将支持多步构建(Multi-stage build),这样使用单个Dockerfile就可以定义多个中间镜像用于构建,测试以及发布等多个步骤,并且有效减小最终镜像的大小. ...
- Docker学习笔记三 Dockerfile 指令 定制镜像
本文地址:https://www.cnblogs.com/veinyin/p/10412079.html 镜像是分层存储的,每一层都是独立存在的,修改当前层并不会修改其依赖的上一层,删除某一层也只是 ...
- [转帖]Docker五种存储驱动原理及应用场景和性能测试对比
Docker五种存储驱动原理及应用场景和性能测试对比 来源:http://dockone.io/article/1513 作者: 陈爱珍 布道师@七牛云 Docker最开始采用AUFS作为文件系统 ...
随机推荐
- [WC2018]州区划分
[WC2018]州区划分 注意审题: 1.有序选择 2.若干个州 3.贡献是州满意度的乘积 枚举最后一个州是哪一个,合法时候贡献sum[s]^p,否则贡献0 存在欧拉回路:每个点都是偶度数,且图连通( ...
- P1966 火柴排队
这道题需要小小的思考一波 (然而我思考了两节课) 好,我们先得出一个结论:a中第k大的与b中第k大的一定要排在一起,才能保证最小. 然后发现:挪a,b其实没有区别,故我们固定a,挪b. 然后我们就思考 ...
- c 结构体 & 函数指针模拟实现一个java class(类) 和方法
闲来无事,纯粹练习. student.h #ifndef STUDENT_H_INCLUDED #define STUDENT_H_INCLUDED #include <memory.h> ...
- bs4抓取糗事百科
抓取糗事百科内容及评论,不包含图片信息.user-agent填入浏览器的即可.user-agent对应的value,360极速浏览器的话,可以在地址栏输入about:version,回车,用户代理后面 ...
- The 2018 ACM-ICPC Asia Beijing Regional Contest
http://hihocoder.com/problemset/problem/ #1870 : Jin Yong’s Wukong Ranking List 我是每加1个点就dfs判断1次. 正解是 ...
- 论文总结(negFIN: An efficient algorithm for fast mining frequent itemsets)
一.论文整体思路: 作者提出了一种基于前缀树的数据结构,NegNodeset,其实是对之前前缀树的一种改进,主要区别在于采用了位图编码,通过这种数据结构产生的算法称为negFIN. negFIN算法高 ...
- linux umask使用方法
A 什么是umask? 当我们登录系统之后创建一个文件总是有一个默认权限的,那么这个权限是怎么来的呢?这就是umask干的事情.umask设置了用户创建文件的默认 权限,它与chmod的效果刚好相 ...
- 谈.Net委托与线程——创建无阻塞的异步调用(二)
了解IAsyncResult 现在我们已经了解,EndInvoke可以给我们提供传出参数与更新后的ref参数:也可以向我们导出异步函数中的异常信息.例如,我们使用BeginInvoke调用了异步函数S ...
- 面向对象【day08】:异常处理(六)
本节内容 1.概述 2.异常梳理 3.异常梳理流程图 4.异常大全 5.自定义异常 一.概述 异常处理是当程序出错了,但是我们又不想让用户看到这个错误,而且我在写程序的时候已经预料到了它可以出现这样的 ...
- 8.Hystrix-Feign配置服务降级
项目中用到Feign调用服务端方法并做服务降级处理 1.application.properties配置: feign.hystrix.enabled=true 2.pom: <!--feign ...