【云原生】Dockerfile文件详解

前言

本文主要讲解了dockerfile的使用,在文章的最后加了一个dockerfile实现自制镜像的实战,如果你希望使用docker commit来制作镜像可以参考:
手动构建自己的docker容器镜像实战

个人主页:我是沐风晓月
个人简介:大家好,我是沐风晓月,阿里云社区博客专家
 座右铭: 先努力成长自己,再帮助更多的人 ,一起加油进步
欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信

文章目录

  • 前言
  • 一. dockerfile的介绍
    • 1.1 关于dockerfile
    • 1.2 dockerfile文件的组成部分
    • 1.3 dockerfile的执行
  • 二. docker bulid 命令的介绍
  • 三. 使用dockerfile构建镜像实战
  • 总结

一. dockerfile的介绍

1.1 关于dockerfile

官网中的介绍: Docker can build images automatically by reading the instructions from a Dockerfile. A Dockerfile is a text document that contains all the commands a user could call on the command line to assemble an image。

Dockerfile 是一个文本文件,里面包含组装新镜像时用到的基础镜像和各种指令。

使用dockerfile 文件来定义镜像,然后运行镜像,启动容器。

1.2 dockerfile文件的组成部分

一个dockerfile文件包含以下部分:

  • 基础镜像信息: 使用FROM关键字指定基础镜像信息,FROM是dockerfile文件的第一条指令。
  • 维护者信息: 使用MAINTAINER关键字指定,通常可以使用dockerfile文件创建者的名字或者邮件作为维护者的信息。
  • 镜像操作指令: 没执行一条镜像操作指令,都会在镜像中添加新的一层。
  • 容器启动执行命令: 用户指定在启动容器时需要执行的命令,通过:CMD ENTRYPOINT指定

常见的镜像操作指令:

指令 描述
FROM # 基础镜像,一切从这里开始构建
MAINTAINER 镜像是谁写的,姓名+邮箱
RUN 镜像构建的时候需要运行的命令
ADD 添加内容: 比如加一个tomcat压缩包
WORKDIR 镜像的工作目录
VOLUME 镜像挂载的目录
EXPOSE 保留暴露的端口
CMD 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可以被代替
ENTRYPOINT 指定这个容器启动的时候需要运行的命令,可以追加命令
ONBUILD 当构建一个被继承DockerFile 的时候就会运行 ONBUILD 的指令。触发指令
COPY 类似ADD ,将我们的文件拷贝到镜像中
ENV 构建的时候设置环境变量

1.3 dockerfile的执行

在完成dockerfile文件的编写后,执行docker build命令,则会根据dockerfile文件中上下文的内容构建新的docker镜像。

整个构建过程会被递归处理,如果在dockerfile中包含了路径或者URL,都会被递归构建。

二. docker bulid 命令的介绍

docker build 命令用于使用 Dockerfile 创建镜像

语法:

docker build [OPTIONS] PATH | URL | -

常用参数:

参数 解释
–build-arg=[] 设置镜像创建时的变量;
–cpu-shares 设置 cpu 使用权重;
–cpu-period 限制 CPU CFS周期;
–cpu-quota 限制 CPU CFS配额;
–cpuset-cpus 指定使用的CPU id;
–cpuset-mems 指定使用的内存 id;
–disable-content-trust 忽略校验,默认开启;
-f 指定要使用的Dockerfile路径;
–force-rm 设置镜像过程中删除中间容器;
–isolation 使用容器隔离技术;
–label=[] 设置镜像使用的元数据;
-m 设置内存最大值;
–memory-swap 设置Swap的最大值为内存+swap,"-1"表示不限swap;
–no-cache 创建镜像的过程不使用缓存;
–pull 尝试去更新镜像的新版本;
–quiet, -q 安静模式,成功后只输出镜像 ID;
–rm 设置镜像成功后删除中间容器;
–shm-size 设置/dev/shm的大小,默认值是64M;
–ulimit Ulimit配置。
–squash 将 Dockerfile 中所有的操作压缩为一层。
–tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。
–network: 默认 default。在构建期间设置RUN指令的网络模式

三. 使用dockerfile构建镜像实战

编写一个简单的centos镜像

在本地创建一个文件名为Dockerfile的文件

  • 代码如下
FROM centos:7.9.2009
# 指定基础镜像为 centos
MAINTAINER  mufenggrow [email protected]
ENV  MYPATH  /usr/local
WORKDIR $MYPATH

RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE  80
 
CMD echo $MYPATH
CMD echo "-----end-----"
CMD /bin/bash


  • 构建并测试
    通过命令构建镜像 最后有个 .
    语法如下:

docker build -f dockerfile 文件名 -t 镜像名:[tag] .

测试:

因为最开始我们创建的文件名叫Dockerfile所以,不需要使用-f 参数

[root@mufenggrow ~]# ls
anaconda-ks.cfg  Dockerfile 

[root@mufenggrow ~]# docker build -t mufeng_centos .
[root@mufenggrow ~]# docker images
REPOSITORY      TAG        IMAGE ID       CREATED         SIZE
mufeng_centos   latest     5233b48a8b4e   9 seconds ago   667MB
centos          7.9.2009   eeb6ee3f44bd   19 months ago   204MB

  • 启动测试,查看是否有ifconfig命令
[root@mufenggrow ~]# ls
anaconda-ks.cfg  Dockerfile  initial-setup-ks.cfg  公共  模板  视频  图片  文档  下载  音乐  桌面
[root@mufenggrow ~]# docker run -itd mufeng_centos /bin/bash
0801e25a61e5999b1616d1f0073f39a7e5431e34d983445b3f349b7da6bf3fe6
[root@mufenggrow ~]# docker exec -it 0801e25a /bin/bash
[root@0801e25a61e5 local]# pwd
/usr/local
[root@0801e25a61e5 local]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
        RX packets 8  bytes 656 (656.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

总结

好啦,这就是今天要分享给大家的全部内容了,我们下期再见!
本文由沐风晓月原创,首发于CSDN博客, 博客主页:mufeng.blog.csdn.net
日拱一卒无尽有,功不唐捐终入海
喜欢的话记得点赞收藏哦

你可能感兴趣的:(#,1,-,容器管理,云原生,docker,容器)