docker基础dockerfile创建镜像(二)

结合 docker入门实操基础命令干货(一)所学,创建dockerfile

dockerfile仅仅是用来制作镜像的源码文件,是构建容器过程中的指令,docker能够读取dockerfile的指定进行自动构建容器,基于dockerfile制作镜像,每一个指令都会创建一个镜像层,即镜像都是多层叠加而成,因此,层越多,效率越低,创建镜像,层越少越好。因此能在一个指令完成的动作尽量通过一个指令定义。

构建三步骤

1、手动编写dockerfile文件,当前必须要符合file的规范;

2、编写好file后,直接docker bulid命令执行,获得一个自定义的镜像;

3、使用run将已经生成的镜像启动。

dockerfile内容基础知识

1、每条保留字指令都必须为大写字母且后面要跟随至少一个参数;

2、指令按照从上到下、顺序执行;

3、#便是注释;

4、每条指令都会创建一个新的镜像层,并对镜像进行提交。

docker执行dockerfile的大致流程

1、docker从基础镜像运行一个容器;

2、执行一条指令并对容器做出修改;

3、执行类似dockers commit的操作提交一个新的镜像层;

4、docker在基于刚提交的镜像运行一个新容器;

5、执行dockerfile中的下一条指令直到所有指令都执行完成。

img
dockerfile体系结构(保留字指令)

FROM 基础镜像,当前新镜像是基于哪个镜像的

MAINTAINER 镜像维护者的姓名和邮箱

RUN 容器构建时需要运行的命令

EXPOSE 当前容器对外暴露的端口

WORKDIR 指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点

ENV 用来指定在构建镜像过程中设置环境变量

ADD 将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包

COPY 类似ADD,拷贝文件和目录到镜像中。将从构建上下文目录中<源路径> 的文件/目录复制到新的一层的镜像内的<目标路径>位置。COPY src dest ,COPY [“src”,“dest”]

VOLUME 容器数据卷,用于数据保存和持久化工作

CMD 指定一个容器启动时要运行的命令。dockerfile中可以有多个CMD指令,但是最后一个生效,CMD会被docker run 之后的参数替换

ENTERPOINT 指定一个容器启动时要运行的命令。ENTERPOINT的目的和CMD一样,都是在指定容器启动程序及参数。但是ENTERPOINT不会覆盖,只会追加

ONBUILD 当构建一个被继承的dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被出发。

主流命令图
img
案例一

首先编写一个简单的dockerfile

vim dockerfile
img
如上dockerfile与我们用命令的方法大概一致,只不过通过dockerfile生成镜像,直接启动成容器不需要执行太多命令。

(docker run -it -v /宿主机的某个目录:/datatest1 -v /宿主机的某个目录:/datatest2 centos /bin/bash )

但是在dockerfile不支持 -v /宿主机:/datatest1,只能支持VOLUME,处于可移植和分享考虑,用-v /主机目录:/容器目录 这种方法不能够直接在dockerfile中实现。由于宿主机目录是依赖于特定宿主机的,并不能够保证在所有的宿主机上都存在这样的目录。

将dockerfile生成成为一个容器

docker build -f /mydocker/dockerfile -t new/centos . (最后有个点,不加会报错)
img
查看已经生成镜像
img
启动验证是否创建两个容器卷
img
通过docker inspect b633d2c6201b(经运行的容器ID),查看容器卷的两个目录在宿主机的具体位置。

/datatest1容器卷对应的宿主机目录
img
/datatest2容器卷对应的宿主机目录
img
在容器卷目录中创建两个文件,切换至宿主机对应目录查看已经共享。
img
一个简单的创建centos镜像,并添加容器卷已近完成。

案例二

自定义centos镜像,因为下载的精简版的centos,很多命令是没有的没办法使用。自己定义的centos镜像根据自我需求添加。

登陆后的默认路径/home

给centos镜像添加vim,运行成容器后能够使用vim编辑器

精简版的centos镜像运行后是无法使用ifconfig命令,在案例中我们让支持ifconfig

vim dockerfile
img
生成新的镜像
img
查看完成
img
运行验证启动后是否在/home目录
img
验证是否能使用ifconfig
img
验证是否能够使用vim
img
案例三

CMD与ENTRYPOINT的区别,CMD有多个但是只会执行最后一个,ENTRYPOINT可以有多个但是会依次执行

创建一个镜像启动后,会查看网卡信息。
img
docker build -f /mydocker/dockerfile -t centos:1.2 . 创建成一个镜像

启动镜像时,查看网卡信息。如果使用CMD就会报错。当有多个执行命令时,就需要使用ENTRYPOINT。

中…(img-Jwb0Kqb9-1617327771704)]

docker build -f /mydocker/dockerfile -t centos:1.2 . 创建成一个镜像

启动镜像时,查看网卡信息。如果使用CMD就会报错。当有多个执行命令时,就需要使用ENTRYPOINT。

img

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值