5.Dockerfile

简介: 5.Dockerfile

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

Docker镜像原理

![[Pasted image 20230920093626.png]]

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

镜像制作

![[Pasted image 20230920093639.png]] 要想把自己在docker中部署的服务转给别人,需要把容器先转为镜像,再传给别人把镜像还原成容器,就可以实现了。 但是镜像是不可以直接发送的,需要再把镜像做成压缩文件,就可以传了。

  • 容器转为镜像docker commit 容器id 镜像名称:版本号docker save -o 压缩文件名称 镜像名称:版本号docker load -i 压缩文件名称

这个方法没有办法保存里面的数据,解压缩镜像后就成为了一个全新的镜像

Dockerfile

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

通过dockerfile构建镜像: docker build -t 镜像名称:版本 [dockerfile文件路径]

Dockerfile关键字

ENTRYPOINT是Dockerfile中的一个指令,用于指定容器启动时要执行的命令或可执行文件。它类似于CMD指令,但是ENTRYPOINT的参数不会被docker run命令行中的参数覆盖。

ENTRYPOINT指令的格式可以有两种形式:

  1. ENTRYPOINT ["executable", "param1", "param2"]:使用JSON数组的形式指定执行的可执行文件和参数。这种形式可以保留参数的原样性,不会被解释为字符串。
  2. ENTRYPOINT command param1 param2:使用Shell形式指定执行的命令和参数。这种形式会被解释为字符串。

当容器启动时,ENTRYPOINT指定的命令或可执行文件会作为容器的主进程运行。如果有多个ENTRYPOINT指令,只有最后一个会生效。

使用ENTRYPOINT指令的好处是可以确保容器始终运行指定的命令或可执行文件,而不会被覆盖或修改。这对于构建可复用的镜像和遵循最佳实践非常有用。

Dockerfile 案例

案例一:自定义centos7镜像

要求:默认登录路径为/user;可以使用vim

实现步骤

  1. 定义父镜像:FROM centos:7
  2. 定义作者信息:MAINTAINER itheima <itheima@itcastcn>
  3. 执行安装vim命令: RUN yum install -y vim
  4. 定义默认的工作目录: WORKDIR/usr
  5. 定义容器启动执行的命令:CMD/bin/bash最后还需要build命令用Dockerfile构建
  • docker build

案例二:发布springboot项目

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

使用 Dockerfile 定制镜像 · Docker -- 从入门到实践 (docker-practice.github.io)


相关文章
|
数据库连接 Python
Python中的异常处理除了Try语句,你还会啥?
Python中的异常处理除了Try语句,你还会啥?
163 1
|
6月前
|
数据库
【YashanDB知识库】沙箱备库
YashanDB的沙箱备库是一种与主库断开网络连接的备份数据库,可通过手动回放归档日志保持数据同步。沙箱备库支持只读服务,必要时可切换为主库角色。本文介绍了如何通过备份影像恢复方式构建沙箱备库,包括配置参数、恢复数据库、注册和回放归档日志等步骤,同时说明了强制升主的操作及注意事项。此方案适用于数据保护和灾难恢复场景。
|
存储 编解码 API
【图像文本化】Base64编解码OpenCV4中 Mat 对象
【图像文本化】Base64编解码OpenCV4中 Mat 对象
294 0
|
11月前
|
SQL 数据采集 安全
扫描工具原理
扫描工具原理
|
运维 网络协议 Linux
揭秘CentOS 7:系统目录奥秘大起底,网卡配置秒变高手,让你的服务器管理飞一般的感觉!
【8月更文挑战第5天】CentOS 7作为RHEL的社区版本,以其稳定性和丰富功能广受好评。本文通过案例分析介绍其系统目录结构及网卡配置方法。系统目录如/(根)、/bin(基本命令)、/boot(启动文件)、/dev(设备文件)、/etc(配置文件)、/home(用户目录)和/lib(共享库)等各司其职。网卡配置通过编辑/etc/sysconfig/network-scripts/下的ifcfg文件实现,如设置ens33接口的静态IP地址、子网掩码、网关和DNS服务器,并通过重启网络服务使配置生效。这是系统管理员必备的技能之一。
226 2
|
存储 分布式计算 数据挖掘
MaxCompute
MaxCompute是阿里云提供的一种大数据处理平台,它能够处理海量数据的存储和计算,提供PB级别的数据存储和处理能力。
1054 1
|
存储 弹性计算 固态存储
阿里云服务器CPU内存、系统盘和公网带宽大小怎么选合适?
阿里云服务器配置如何选择?个人用户选择ECS共享型s6云服务器,1核2G、2核4G配置即可,企业公司用户可以选择独享型ECS计算型c6、通用型g7等,4核8G、8核16G、4核32G等配置,阿里云百科来详细说下不同用户选择阿里云服务器配置避坑指南:
746 0
阿里云服务器CPU内存、系统盘和公网带宽大小怎么选合适?
|
机器学习/深度学习 传感器 算法
【疲劳检测】基于形态学实现疲劳检测附matlab代码
【疲劳检测】基于形态学实现疲劳检测附matlab代码
|
数据可视化 Linux Docker
ElasticSearch学习笔记(二) Elasticsearch安装及索引基础操作
前面了解了Elasticsearch的一些基本概念,现在我们开始学习怎么使用Elasticsearch。在使用之前先需要准备一个Elasticsearch环境,我们需要使用到Elasticsearch及Kibana(Kibana 是为 Elasticsearch设计的开源分析和可视化平台)。这里我们使用docker-compose在Linux环境中安装一套Elasticsearch及Kibana。
245 0
|
安全 关系型数据库 MySQL
怎么在 window 系统里本地安装 mysql
怎么在 window 系统里本地安装 mysql
193 0
怎么在 window 系统里本地安装 mysql