一.docker镜像原理

1.操作系统组成部分

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

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

2.docker镜像原理

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

3.docker镜像本质
是一个分层文件系统

案例
Docker 中一个centos镜像为什么只有200MB,而一个centos操作系统的iso文件要几个个G?
Centos的iso镜像文件包含bootfs和rootfs,而docker的centos镜像复用操作系统的bootfs,只有rootfs和其他镜像层
Docker 中一个tomcat镜像为什么有500MB,而一个tomcat安装包只有70多MB?
由于docker中镜像是分层的,tomcat虽然只有70多MB,但他需要依赖于父镜像和基础镜像,所有整个对外暴露的tomcat镜像大小500多MB

4.镜像制作

容器转为镜像

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

压缩镜像

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

解压镜像压缩包

docker load –i 压缩文件名称

二.dockerfile概念

1.定义

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

2.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

三.dockerfile部署springboot项目

1.准备一个简单的springboot项目
2.在云服务器中进行相关操作

dockerfile文件

FROM java:8
MAINTAINER henrik <10791894@qq.com>
ADD hellodocker-0.0.1-SNAPSHOT.jar app.jar
CMD java -jar app.jar

3.执行构建命令

docker build -f ./springboot_dockerfile -t app .

4.运行

docker run -id -p 9000:8080 app

docker镜像原理基础与dockerfile部署springboot项目相关推荐

  1. Docker系列之Jenkins+Git实现流水线部署SpringBoot项目

    1. 概述 本文使用Docker.Jenkins和Gitee持续部署SpringBoot项目,小伙伴们需要提前准备好Docker和Jenkins开发环境,有不清楚如何安装Docker和Jenkins的 ...

  2. Docker上部署SpringBoot项目并推送镜像到Docker Hub上---以MacOS为例

    Docker部署.镜像推送至Docker Hub.拉取.运行 Docker部署 Dockerfile文件内容 文件内容解释 制作镜像 查看镜像 本地运行镜像 镜像推送.拉取.运行 镜像推送 镜像拉取 ...

  3. Docker 部署 SpringBoot 项目整合 Redis 镜像做访问计数Demo

    Docker 部署SpringBoot项目整合 Redis 镜像做访问计数Demo 最终效果如下 大概就几个步骤 1.安装 Docker CE 2.运行 Redis 镜像 3.Java 环境准备 4. ...

  4. K8S实战基础篇:一文带你深入了解K8S实战部署SpringBoot项目

    K8S实战基础篇:一文带你深入了解K8S实战部署SpringBoot项目 1.前言 2.简介 2.1.为什么写这篇文章 2.2.需求描述 2.3.需求分析 3. 部署实战 3.1 环境准备 3.2 i ...

  5. Docker 部署SpringBoot项目不香吗?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:流星007 链接:toutiao.com/i68433912 ...

  6. IDEA配置Docker一键部署SpringBoot项目(企业级做法)

    Docker一键部署SpringBoot项目 前言 一.开启Linux的Docker远程访问 1.1 安装vim工具: 1.2 修改`daemon.json`的配置: 1.3 加入配置: 1.4 重新 ...

  7. docker安装以及部署springboot项目

    一.docker安装 1.安装 Docker Engine-Community 安装最新版本的 Docker Engine-Community 和 containerd,或者转到下一步安装特定版本: ...

  8. 【docker系列】docker之部署springboot项目

    目录 一.项目依赖 二.引入docker依赖 三.项目打包 四.编写Dockerfile文件 五.构建镜像 六.启动容器 七.测试 一.项目依赖 本篇主题主要实战如何使用Docker部署springb ...

  9. 【Docker】11、IDEA集成Docker插件实现一键部署SpringBoot项目

    日常开发项目的过程中,我们每次需要部署线上的时候,都需要安装一大堆的运行环境,例如:JDK.MySQL.Redis 等,非常花费时间.我们可以使用 Docker 的容器技术,方便快捷地搭建项目启动所需 ...

最新文章

  1. python3和2的区别大吗_python3和2为什么区别大吗
  2. 【渝粤教育】电大中专沟通技巧作业 题库
  3. MVC利用URLRoute实现伪静态后正真的静态html无法访问
  4. 20200716:最多 K 次交换相邻数位后得到的最小整数(leetcode 1505)
  5. python有关迭代器和生成器的面试题_python面试题之生成器迭代器
  6. jquery表单选择器input、:text、:password、:radio、:checkbox、:submit、:reset、:image、:button、:file、:hidden
  7. ubb码转换的java类库 ubb2html_ubb代码转换为html
  8. DSP28335定时器
  9. 如何从苹果手机中导出视频且保证画面不失真
  10. 为civil3D2018 添加snoop DB工具
  11. 选一个适合自己的加密芯片,加密IC,如何才能真正的做到不被破解。
  12. WireShark 不能正常解析 Radius 包,提示 Malformed Packet .
  13. itext将html转换为pdf,使用itext将html转换为pdf
  14. 第六部分 项目成本管理
  15. c++头文件:stdio.h ,cstdio ,iostream ,bits/stdc++.h
  16. 蓝宇风:高强度加密狗
  17. [活动预告]倒数1天!开源世界高峰论坛将于北京举行,偶数科技将进行主题演讲和产品展示
  18. 【JAVA面试】来自某双非本科菜比的秋招历程分享
  19. 手写公式自动识别方法汇总
  20. 【文件系统】如何在ubi之上运行squashfs

热门文章

  1. 常见建模软件导出gltf
  2. dd linux 格式化u盘启动盘_Ubuntu使用dd命令制作U盘系统启动盘
  3. [RUST]nightly版本安装和切换
  4. div +css 纵向导航
  5. 起点中文网月票等字体数据爬取Python
  6. 摩天大楼如何靠一颗铁球防风抗震?
  7. python编程实验,模拟聪明版的尼姆游戏设计原理
  8. Ayoa永久免费版网页在线思维脑图软件
  9. 这款APP让你免费无限畅享高质量阅读
  10. xp系统qq安装不上网络连接服务器,XP系统安装QQ提示无法访问Windows Installer的解决步骤...