Docker_使用DockerFile监本构建镜像

使用DockerFile监本构建镜像

DockerFile是由一系列命令和参数构建的脚本

是一个镜像的描述版本

build 参数详解

options 说明
–add-host list 添加自定义Host到ip的映射(主机:ip)
–build-arg list 设置构建时的变量
–cache-from strings 将镜像视为缓存源
–cgroup-parent string 可选的容器父cgroup
–compress 使用gzip工具压缩构建的上下文
–console 显示控制台输出,仅使用 buildkit,参数有:true、false、auto(默认为 auto)
–cpu-period int 限制CPU CFS(完全公平的调度)的周期
–cpu-quota int 限制CPU CFS(完全公平的调度)的限额
-c, --cpu-shares int 设置CPU的共享权重
–cpuset-cpus string 允许执行的cpu个数 (0-3,0,1)
–cpuset-mems string 允许执行的MEM个数 (0-3,0,1)
–disable-content-trust 跳过镜像的验证(默认为 true)
-f, --file string 构建的Dockerfile的名称(默认为 ‘PATH/Dockerfile’)
–force-rm 总是移除中间容器
–iidfile string 将镜像ID写入到指定文件
–isolation string 容器隔离技术
–label list 为镜像设置元数据
-m, --memory bytes 内存限额
–memory-swap bytes 如果启用无限交换,则交换限制等于内存加上交换:’-1’即可
–network string 在构建期间为 RUN 指令设置网络模式(默认为 “default”)
–no-cache 在构建映像时不使用缓存(设定后,每次都会重新去拉取,默认使用缓存的)
–platform string 如果服务器具有多平台能力,则设置该平台
–pull 总是尝试拉取该镜像的新版本
-q, --quiet 镜像构建成功后禁止生成输出和打印镜像的ID
–rm 构建成功后删除中间容器(默认为 true)
–security-opt strings 安全选项
–shm-size bytes 设定/dev/shm的大小
–squash 将新建的镜像层压缩成一个新的镜像层
–stream 将流附加到服务器以协商构建上下文
-t, --tag list 名称和可选的标签(格式为 ‘name:tag’ )
–target string 设置需要构建的目标构建阶段
–ulimit ulimit U 限制项 (默认为 [])

DockerFile 创建容器卷

创建dockerfile文件

FROM centos
VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
CMD echo "finished,-----success1"
CMD /bin/bash

DockerFile生成镜像

切记有点,如果本地有centos会快很多,不然会从远程拉取在

docker build -f d:/Docker/DockerFile -t zql/centos1 .

在这里插入图片描述

创建之后会有对应的宿主机的共享文件夹对应 查看

docker inspect 容器ID

“Volumes”:这个里面会有信息

DockerFile 命令

FROM 继承镜像

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

MAINTAINER 镜像作者

镜像维护者的姓名和邮箱地址

RUN 执行shell命令

容器构建时候需要运行的命令,执行具体的shell 命令

EXPOSE 暴露端口

当前容器对外暴露的端口

WORKDIR 工作目录

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

ENV 环境变量

用来构建镜像过程中的环境变量

ADD 复制文件&解压

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

COPY 复制文件

类似ADD,拷贝文件和目录到镜像中

将从构建上线文目录中<原路径>的文件、目录复制到新一层的镜像内的<目标路径>位置

COPY src dest
COPY ["src","dest"]

VOLUME 共享目录

容器数据卷,用于数据保存和持久化工作。和上级下级镜像共享文件夹

CMD 执行shell(最后一个)

指定一个容器启动时候要运行的命令

DockerFIle中可以有多个CMD指令,但是只有最后一个生效,CMD会被docker run之后的参数替换

ENTRYPOINT 执行shell

指定一个容器启动时要运行的命令

ENTRPPOINT的目的和CMD一样,都是在指定容器启动程序及参数,不会覆盖,追加模式

ONBUILD 父镜像触发器

当构建一个被继承的Dockerfile时运行命令,父镜像在被子镜像继承后父镜像的onbuild被触发

创建DockerFile

FROM centos
RUN yum install -y curl
ENTRYPOINT ["curl","-s","http://ip.cn]
ONBUILD RUN echo 'father---onbuild'

生成images

docker build -f DockerFile3 -t my_father_centos .

在这里插入图片描述

创建子DockerFile

FROM  my_father_centos
RUN yum install -y curl
ENTRYPOINT ["curl","-s","http://ip.cn]

生成子images

docker build -f DockerFile4 -t my_son_centos .

在这里插入图片描述

案例

base镜像(search) Docker Hub中99%的镜像都是通过在base镜像中安装和配置需要的软件构建出来的

案例解析

精简版的centos 只是拥有内核,没有其他,目的实现有其他shell的
在这里插入图片描述
自定义mycentos

  • 登陆后的默认路径
  • VIM 编辑器
  • 查看网络配置ifconfig

编写DockerFile

FROM centos

ENV MYPATH /usr/local
WORKDIR $MYPATH

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

EXPOSE 80

CMD echo $MYPATH
CMD echo 'ok'
CMD /bin/bash

DockerFile build 镜像

docker build -f DockerFile2 -t mycentos:1.3 .

在这里插入图片描述
CMD 可以执行,但是解析不了shell命令,只能是最后一个
在这里插入图片描述

镜像构建历史

docker history 镜像ID或者名称

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E83krEQ8-1577178435709)(Docker.assets/image-20191221105933333.png)]

发布了48 篇原创文章 · 获赞 31 · 访问量 4571

猜你喜欢

转载自blog.csdn.net/qq_39787367/article/details/103686190