首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Dockerfile基础(一)

写在前面

使用来定义并构建,加载镜像来运行容器,可以说定义了后面的玩耍范围和规则。定义了容器内部运行的一切环境,很好的进行了资源隔离,包括访问网络和磁盘,因此需要映射网络端口和指定需要拷贝的文件到镜像中。

Dockerfile

官方Dockerfile实例

创建一个空目录,然后新建一个文件,写入以下内容

requiremtns.txt内容如下:

app.py内容如下:

其实不懂python也没关系,这段代码其实创建了一个http服务,打印一些信息。

构建app

语法形式 :

根据和镜像构建上下文()来构建一个镜像。构建上下文是指或里面的一系列文件。构建过程中可以使用上下文中的任何文件,比如和命令。

这里的指的是上下文路径,比较容易和路径混淆。实际上 的文件名并不要求必须为 ,而且并不要求必须位于上下文目录中,可以用来指定某个文件作为 。

一般大家习惯性的会使用默认的文件名 Dockerfile,以及会将其置于镜像构建上下文目录中。

从上述过程看中的每一条语句都相当于创建了一个临时镜像, 执行了所要求的命令,最后提交了这一层并且移除了临时镜像。可以设置不移除临时镜像,请自行参考命令行格式。

文件可以忽略上下文中的文件打包到镜像里面。

运行app

整个流程比较清晰,重点是的语法格式

Dockerfile 基础语法(部分)

指定基础镜像

必须 是 Dockerfile 中第一条非注释命令。可以从上找到很多正式官方的基础镜像,比如,或者系统镜像 ,等。

除了这些现有基础镜像外,还存在一个特殊的镜像 ,它表示一个空白的镜像,直接 会让镜像体积更加小巧。

复制文件

指令将从构建上下文目录中 的文件/目录复制到新的一层的镜像内的

语法形式:

COPY …

COPY ["",… ""]

支持通配符;

如果 不存在会在复制文件前自动创建,不需要手动重建;

可以是容器内的绝对路径,也可以是相对于工作目录的相对路径(工作目录可以用 WORKDIR 指令来指定)

复制文件

指令和 的格式和性质基本一致。但是增加了一些功能,比如文件自动解压缩。所有的文件复制均使用 指令,仅在需要自动解压缩的场合使用

执行命令

指令是用来执行命令行命令的,有两种形式:

shell 格式:RUN

exec 格式:RUN ["可执行文件", "参数1", "参数2"]

写 其实就是在定义每一层该如何构建,每个 会创建一层,结果就是产生很多层的镜像,极大增加了构建部署的时间,可以使用下面这中形式:

指令

用于指定默认的容器主进程的启动命令。

shell 格式:CMD

exec 格式:CMD ["可执行文件", "参数1", "参数2"…]

对于容器而言,其启动程序就是容器应用进程,容器就是为了主进程而存在的,主进程退出,容器就失去了存在的意义,从而退出,其它辅助进程不是它需要关心的东西。比如启动进程,正确的做法是直接执行 nginx 可执行文件,并且要求以前台形式运行:

设置环境变量

指令可以支持环境变量展开: ADD、COPY、ENV、EXPOSE、LABEL、USER、WORKDIR、VOLUME、STOPSIGNAL、ONBUILD

示例:

指定工作目录

该目录不存在,后台会自动建立目录

声明端口

指令是声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务。在运行时使用 映射宿主端口和容器端口,换句话说,就是将容器的对应端口服务公开给外界访问,而 仅仅是声明容器打算使用什么端口而已,并不会自动在宿主进行端口映射。

参考资料

Docker Get Started,Part 2

https://docs.docker.com/get-started/part2/

2. 构建上下文

https://yeasy.gitbooks.io/docker_practice/content/image/build.html

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180506G0IZ7E00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券