Dockerfile

2023-05-16

1、Docker 镜像原理

操作系统组成部分:

  • 进程调度子系统
  • 进程通信子系统
  • 内存管理子系统
  • 设备管理子系统
  • 文件管理子系统
  • 网络通信子系统
  • 作业控制子系统

Linux文件系统由bootfsrootfs两部分组成

  • bootfs:包含bootloader(引导加载程序)和 kernel(内核)
  • rootfsroot文件系统,包含的就是典型 Linux 系统中的/dev/proc/bin/etc等标准目录和文件
  • 不同的linux发行版,bootfs基本一样,而rootfs不同,如ubuntucentos

 

        Docker镜像是由特殊的文件系统叠加而成最底端是 bootfs,并使用宿主机的bootfs第二层是 root文件系统rootfs,称为base image然后再往上可以叠加其他的镜像文件统一文件系统(Union File System)技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统。一个镜像可以放在另一个镜像的上面。位于下面的镜像称为父镜像,最底部的镜像成为基础镜像。当从一个镜像启动容器时,Docker会在最顶层加载一个读写文件系统作为容器

 

 

2、镜像制作

2.1、容器转为镜像

docker commit 容器id 镜像名称:版本号

docker save -o 压缩文件名称 镜像名称:版本号

docker load –i 压缩文件名称

 2.2、dockerfile

3、dockerfile概念 

        Dockerfile 是一个文本文件,包含了一条条的指令,每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像。对于开发人员:可以为开发团队提供一个完全一致的开发环境;对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了;对于运维人员:在部署时,可以实现应用的无缝移植。

Dochub网址:https://hub.docker.com

 

4、Dockerfile 关键字 

关键字作用备注
FROM指定父镜像指定dockerfile基于那个image构建
MAINTAINER作者信息用来标明这个dockerfile谁写的
LABEL标签用来标明dockerfile的标签 可以使用Label代替Maintainer 最终都是在docker image基本信息中可以查看
RUN执行命令执行一段命令 默认是/bin/sh 格式: RUN command 或者 RUN ["command" , "param1","param2"]
CMD容器启动命令提供启动容器时候的默认命令 和ENTRYPOINT配合使用.格式 CMD command param1 param2 或者 CMD ["command" , "param1","param2"]
ENTRYPOINT入口一般在制作一些执行就关闭的容器中会使用
COPY复制文件build的时候复制文件到image中
ADD添加文件build的时候添加文件到image中 不仅仅局限于当前build上下文 可以来源于远程服务
ENV环境变量指定build时候的环境变量 可以在启动的容器的时候 通过-e覆盖 格式ENV name=value
ARG构建参数构建参数 只在构建的时候使用的参数 如果有ENV 那么ENV的相同名字的值始终覆盖arg的参数
VOLUME定义外部可以挂载的数据卷指定build的image那些目录可以启动的时候挂载到文件系统中 启动容器的时候使用 -v 绑定 格式 VOLUME ["目录"]
EXPOSE暴露端口定义容器运行的时候监听的端口 启动容器的使用-p来绑定暴露端口 格式: EXPOSE 8080 或者 EXPOSE 8080/udp
WORKDIR工作目录指定容器内部的工作目录 如果没有创建则自动创建 如果指定/ 使用的是绝对地址 如果不是/开头那么是在上一条workdir的路径的相对路径
USER指定执行用户指定build或者启动的时候 用户 在RUN CMD ENTRYPONT执行的时候的用户
HEALTHCHECK健康检查指定监测当前容器的健康监测的命令 基本上没用 因为很多时候 应用本身有健康监测机制
ONBUILD触发器当存在ONBUILD关键字的镜像作为基础镜像的时候 当执行FROM完成之后 会执行 ONBUILD的命令 但是不影响当前镜像 用处也不怎么大
STOPSIGNAL发送信号量到宿主机该STOPSIGNAL指令设置将发送到容器的系统调用信号以退出。
SHELL指定执行脚本的shell指定RUN CMD ENTRYPOINT 执行命令的时候 使用的shell

 

5、Dockerfile 案例

需求一:

自定义centos7镜像。要求:

1. 默认登录路径为 /usr

2. 可以使用vim

实现步骤

  1. 定义父镜像:FROM centos:7
  2. 定义作者信息:MAINTAINER  itheima <itheima@itcast.cn>
  3. 执行安装vim命令: RUN yum install -y vim
  4. 定义默认的工作目录:WORKDIR /usr
  5. 定义容器启动执行的命令:CMD /bin/bash
  6. 通过dockerfile构建镜像:docker bulid –f dockerfile文件路径 –t 镜像名称:版本

 需求二:

定义dockerfile,发布springboot项目

实现步骤

  1. 定义父镜像:FROM java:8
  2. 定义作者信息:MAINTAINER  itheima <itheima@itcast.cn>
  3. jar包添加到容器: ADD springboot.jar app.jar
  4. 定义容器启动执行的命令:CMD java–jar app.jar
  5. 通过dockerfile构建镜像:docker bulid –f dockerfile文件路径 –t 镜像名称:版本

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Dockerfile 的相关文章

随机推荐

  • Jenkins在Linux环境下的安装与配置,包含遇到的问题以及解决方法

    一 Jenkins简介 Jenkins是一个开源软件项目 xff0c 是基于Java开发的一种持续集成 xff08 CI xff09 工具 xff0c 用于解决持续重复的部署 监控工作 xff1b 它一个开放易用的软件平台 xff0c 大大
  • win10添加ubuntu的网络硬盘,实现远程操作ubuntu硬盘

    1 前言 在工作时候经常需要在本地windows10和另外一台ubuntu上实现数据共享 xff0c 如果使用远程工具会非常麻烦 xff0c 需要收发文件 既然在同一个局域网情况下 xff0c 那么有没有办法实现远程操作硬盘呢 xff0c
  • (1)数据包嗅探和欺骗-SEED Ubuntu 20.04

    数据包嗅探和欺骗 网络安全课程实验一 在做的时候参考了很多网上主要就是CSDN上的教程 xff08 感觉最近还是很忙 xff0c 所以等我有空想起来再来写这个教程 xff09 xff08 下面放一下我的实验报告部分 xff0c 里面有流程
  • 实验一的命令代码

    实验一 dcbuild 下载容器所需的image镜像 xff0c 如果已经有了 xff0c 就跳过 dcup 即docker compose up 安装容器并启动 cd Labsetup1 1 1 vi test1 py 写一个python
  • 安装Proxmox VE系统报错

    安装Proxmox VE系统 报错内容如下 xff1a Waiting for dev to be fully populated 8 344009 hdaudio hdaudioCoD2 Unable tobind the codecdo
  • PUT和DELETE部署在内网服务器后 外网无法请求的问题

    PUT和DELETE部署在内网服务器后 外网无法请求的问题 这问题困扰我好几天 xff0c 本身就不是搞运维的 xff0c 且实习时长 俩年半 半年的小辣鸡 xff0c 被赶鸭子上架 系统部署在甲方的内网服务器里 xff0c 然后他们通过V
  • C语言冒泡排序法,用函数形式实现。

    冒泡排序法 释疑 xff1a 冒泡排序法是将数组中的元素依次从小到大 xff08 Also 从大到小 xff09 进行排序下来 请看如下操作 xff01 共有4个数 xff0c 如 2 xff0c 4 xff0c 1 xff0c 3 进行N
  • Gorm之下载安装gorm.io/driver/sqlite依赖

    文章目录 Gorm之下载安装gorm io driver sqlite依赖1 会出错2 下载MinGW3 配置MinGW环境变量4 检测是否配置成功5 再次下载依赖即可成功 Gorm之下载安装gorm io driver sqlite依赖
  • Sheep to sheep

    背景 最近被这只羊折腾的够呛 xff0c 不管怎样就是过不了 xff0c 最终幡然醒悟 xff0c 还是得借助点外力 xff0c 上点技术手段才行 在网上找一下可行的方法 xff0c 看到比较简单的方法有两种 xff1a 抓包 xff1b
  • CentOS8.4 OpenLDAP服务配置

    目录 OpenLDAP简介 基本操作 配置文件 服务端配置 配置下载证书 生成数据库并设置权限 调用模块 定义访问和认证信息 定义目录结构 配置用户认证结构 测试 NFS服务配置 客户端配置 测试 挂载用户目录 相关知识 注意事项 环境 服
  • C语言排序算法之选择排序

    文章目录 一 选择排序的概述二 选择排序算法代码详解 xff08 1 xff09 算法分析 xff08 2 xff09 选择排序算法代码详解 三 总代码 一 选择排序的概述 选择排序 xff08 Selection sort xff09 是
  • CodeForces - 501B Misha and Changing Handles(Map)

    题目大意 xff1a 就是讲在codeforces网站上 xff0c 由于一个黑客 xff0c 大家都可以随便改名字了 xff0c 有的人就改了一次又一次 xff0c xff08 当然也有的人就只改一次 xff09 然后题目问你一共有多少个
  • LINUX文件编程之——open(文件打开及创建)

    文件的打开及创建 C语言打开及创建文件需要用到open 函数 xff0c open函数在三个头文件当中 xff1a open函数 函数原型 xff1a open函数的返回值是一个小的 非负整数 xff0c 这个整数是被open打开的文件描述
  • linux文件编程之——write、read、lseek、close(文件的写、读、光标移动,关闭操作)

    文件的写入 xff08 write xff09 昨天已经学习了文件的打开及创建 xff0c 及使用open函数 xff0c 传递不同的参数可以实现文件的打开及创建 xff0c 并赋予文件的权限 xff0c 今天延续昨天的学习内容 文件的写入
  • 嵌入式笔试——笔试题目

    单选 xff08 15题 xff09 第一题 栈简介 栈由操作系统 xff08 编译器 xff09 自动分配释放 xff0c 用于存放函数的参数值 局部变量等 xff0c 其操作方式类似于数据结构中的栈 堆简介 堆由开发人员分配和释放 xf
  • ARM———第一天

    1 为什么学习ARM xff1f 嵌入式 xff1a 操作硬件的软件 嵌入式系统分两大类 xff1a 1 应用程序 xff0b 硬件 2 应用程序 xff0b 操作系统 xff0b 硬件 ARM是学习嵌入式的入门 xff0c 也是学习系统移
  • ARM———第二天

    1 什么是汇编指令 汇编指令 xff1a 是机器指令的助记符 xff0c 经过编译后会得到一串01010组成的机器码 xff0c 可以由cpu读取执行 伪指令 xff1a 本质上不是指令 xff0c 只是和指令一起写在代码中 xff0c 是
  • LINUX内核

    Linux内核功能 内存管理 操作系统内核功能管理设备实际的物理内存 xff0c 还可以创建和管理虚拟内存 xff08 Swap xff09 xff1b 通过硬盘的存储空间来创建虚拟内存 xff0c 叫内存交换空间 xff08 Swap s
  • man手册各章节的意义

    man手册分成很多section xff0c 使用man时可以指定不同的section来浏览 xff0c 各个section意义如下 xff1a 1 commands 2 system calls 3 library calls 4 spe
  • Dockerfile

    1 Docker 镜像原理 操作系统组成部分 xff1a 进程调度子系统 进程通信子系统 内存管理子系统 设备管理子系统 文件管理子系统 网络通信子系统 作业控制子系统 Linux 文件系统由 bootfs 和 rootfs 两部分组成 b