dockerfile介绍与使用案例

1.概述

dockerfile 可以理解为一个制作镜像的脚本,但远没有脚本复杂。他根据某种格式自定义内容,
就可以快速创建出需求的镜像。
docker 容器启动的时候在最上层挂载了一个可写层,比如说我在容器里面创建一个文件,这个
文件是存放在可写层的,这时候容器要是销毁了,那么我们对容器的一些写入操作也就没了,
我这个文件也会随着容器销毁而销毁了,我们要是想要保存我们对容器的一些写入操作的话,
可以使用 commit 命令然后将容器制作成一个镜像,这样下次 run 起来该镜像的时候,我们之
前的写入操作就还存在了。
除了使用 commit 方式制作镜像,还有一种方式就是编写 Dockerfile 然后使用 build 命令来制
作镜像了。

2.Dockerfile 的规则

格式:
是注释
指令建议要大写,内容小写
docker 的实际运用 < 54
执行顺序:
docker 是按照 Dockerfile 指令顺序依次执行的,也就是说从上到下

3.指令
1)FROM:底层镜像(如系统)

这个 FROM 指令是 dockerfile 的第一个指令,然后指定了基础镜像,后面的所有指令都是运行
在该基础镜像环境上的 MAINTAINER 该指令是描述的维护者信息。
底层的系统镜像用的是什么,使用 from 指定,绝大部分情况都用的底层有个系统或者基础的环
境用的是什么,对 docker 不熟练使用 centos 镜像即可。

2)RUN:构建时容器内运行的命令。

RUN 指令用于在容器中执行命令。我们常用来安装基础软件。
镜像安装软件依赖包都可以放在 run 中。

3)COPY:复制 docker 目录中的文件到镜像中。

COPY 指令类似 ADD 指令,但是 ADD 指令范围更广些,ADD 能够自动解压文件,能够访问网
络资源,而 COPY 指令做不到。
非目录需要重新指定,放在目录中非常便利,属于好的一种习惯,值得推荐使用目录。

4)ADD:复制 docker 目录中的文件到镜像中。(过程可以解压)

ADD 指令是用来将宿主机某个文件或目录放到(复制)容器某个目录下面。
官方不推荐 ADD,高级复制功能,需求不精准,推荐使用 COPY。

5)EXPOSE:声明开放端口。

EXPOSE 指令用于暴露容器里的端口,我们在 3.5 里面演示过了,nginx 暴露的端口是 80,但
是启动容器的时候需要指定宿主机端口来映射你暴露的端口。需要暴露多个端口的话可以使用
多个 EXPOSE,也可以一个 EXPOSE 指令后面跟多个端口,端口之间用空格隔开。
声明不是变更,变更使用-p 构建容器时候使用。

6)ENV:设置环境变量。

ENV 指令是用于设置环境变量的 。
底层环境变量需要需提前设置。

7)CMD:容器启动时执行的命令,最多只能执行一条。

CMD 指令是你在容器启动的时候帮你运行的命令,而 RUN 这个指令是构建镜像的时候帮你运
行的命令。
容器启动时执行命令,最多执行一条。

8)WORKDIR:声明工作目录。类似 cd。

WORKDIR 是指下面的指令都在 WORKDIR 指定目录下面工作,这个与 linux 里面的 cd 差不
多。
切换目录使用 WORKDIR。
做容器轻量级最好,比较小就很好,使用一条命令就不要使用两天命令。

4.Dockerfile 步骤
1、创建 dockerfile 目录,名字可以自定义。在大目录里面创建各种小目录和文档,比较有层次。
2、在该目录中编辑 dockerfile。
3、用 COPY 或 ADD,需要把被 COPY 文件提前放到 dockerfile 目录中。
4、官方推荐用 COPY,如果需要过程中解压,用 ADD。
5、CMD 字段,需要用[“命令”,”选项 1”]这种格式书写。强制格式写法,必须使用[“命令”,”

选项 1”],类似于 python 的数组。

6、CMD 字段只能写一条命令,且这条命令尽量是前台执行的命令。如果是后台命令,这条命

令结束,docker 就会自动关闭。
区别:前台执行命令和后台执行命
1)后台命令:
当在前台运行某个作业时,终端被该作业占据;而在后台运行作业时,它不会占据终端。可以
使用&命令把作业放到后台执行。当在后台执行命令时,可以继续使用你的终端做其他事情。适
docker 的实际运用 < 56
合在后台运行的命令有 find、费时的打印作业、费时的排序及一些 shell 脚本。在后台运行作业
时要当心:需要用户交互的命令不要放在后台执行。
注意:经常操作的 shell 命令都属于后台命令。

5、示例
1)用 dockerfile 创建并启动一个 centos 的 apache 镜像。指定自定义内容。
FROM centos:7
RUN yum -y install httpd
EXPOSE 80
COPY index.html /usr/share/httpd/noindex/index.html
CMD ["/usr/sbin/httpd","-D","FOREGROUND"]
2)构建镜像
[root@docker ~] docker build -t apache :v1 .
3)验证
[root@docker ~] docker run -itd -p 345:80 apache:v1
[root@docker ~] docker ps

通过访问宿主机 ip 端口,查看 true,防火墙关闭

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

科学熊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值