Docker容器化技术(使用Dockerfile制作镜像)

Docker中的镜像分层

Docker 支持通过扩展现有镜像,创建新的镜像。实际上,Docker Hub 中 99% 的镜像都是通过在 base 镜像中安装和配置需要的软件构建出来的。

1、Docker 镜像为什么分层

镜像分层最大的一个好处就是共享资源。 比如说有多个镜像都从相同的 base 镜像构建而来,那么 Docker Host 只需在磁盘上保存一份 base 镜 像;同时内存中也只需加载一份 base 镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共 享。

如果多个容器共享一份基础镜像,当某个容器修改了基础镜像的内容,比如 /etc 下的文件,这时其他容 器的 /etc 是不会被修改的,修改只会被限制在单个容器内。这就是容器 Copy-on-Write 特性。

2、可写的容器层

当容器启动时,一个新的可写层被加载到镜像的顶部。这一层通常被称作“容器层”,“容器层”之下的都叫 “镜像层”。 

所有对容器的改动 - 无论添加、删除、还是修改文件都只会发生在容器层中。只有容器层是可写的,容 器层下面的所有镜像层都是只读的。

3、容器层的细节说明

镜像层数量可能会很多,所有镜像层会联合在一起组成一个统一的文件系统。如果不同层中有一个相同 路径的文件,比如 /a,上层的 /a 会覆盖下层的 /a,也就是说用户只能访问到上层中的文件 /a。在容器 层中,用户看到的是一个叠加之后的文件系统。

Dockerfile 介绍

  Docker中有个非常重要的概念叫做——镜像(Image)。Docker 镜像是一个特殊的文件系统,除 了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数 (如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。   

        镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构 建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,那么之前提及的无法重复的问题、镜 像构建透明性的问题、体积的问题就都会解决。这个脚本就是 Dockerfile。   

        Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每 一条指令的内容,就是描述该层应当如何构建。

[root@localhost ~]# mkdir /db
[root@localhost ~]# cd /db
[root@localhost db]# systemctl start docker
[root@localhost db]# 
[root@localhost db]# vim Dockerfile
ARG VER=latest
FROM busybox:$VER
MAINTAINER wyx<wyx@111.com>
ENV WEB_DOC_ROOT="/data/web/html"

RUN mkdir -p ${WEB_DOC_ROOT}
COPY index.html ${WEB_DOC_ROOT}/index.html

EXPOSE 80
CMD /bin/httpd -f -h ${WEB_DOC_ROOT}

Dcokerfile指令介绍 

 FROM 

 介绍

  • FROM 指令必须是 Dockerfile 中非注释行的第一个指令,即一个 Dockerfile 从FROM语句; FROM 指令用于为镜像文件构建过程指定基础镜像,后续的指令运行于此基础镜像所提供的运行环 境;
  • 实践中,基准镜像可以是任何可用镜像文件,默认情况下,docker build会在docker主机上查找指 定的镜像文件,在其不存在时,则会自动从 Docker 的公共库 pull 镜像下来。如果找不到指定的 镜像文件,docker build 会返回一个错误信息;
  • FROM可以在一个 Dockerfile 中出现多次,如果有需求在一个 Dockerfile 中创建多个镜像。 如果FROM语句没有指定镜像标签,则默认使用latest标签。

ARG

介绍

  • ARG指令类似ENV,定义了一个变量;区别于ENV:用户可以在构建时docker build --build-arg = 进行对变量的修改;ENV不可以;
  • 如果用户指定了未在Dockerfile中定义的构建参数,那么构建输出警告。 

 MAINTAINER 

介绍

        用于让dockerfile制作者提供本人的详细信息 dockerfile 并不限制MAINTAINER 指令可在出现的位置,但推荐将其放置于FROM指令之后

COPY

介绍

用于从docker 主机复制新文件或者目录至创建的新镜像指定路径中

 EXPOSE

介绍

用于为容器打开指定要监听的端口以实现与外部通信

RUN

介绍

用于指定docker build过程中运行的程序,其可以是任何命令 

ENV

介绍

  • 用于为镜像定义所需的环境变量,并可被Dockerfile文件中位于其后的其它指令(如ENV、ADD、 COPY等)所调用
  • 调用格式为$variable_ name 或 ${variable_ name}

示例 

[root@localhost db]# docker build -t web:v2 ./  --load
[+] Building 1.5s (7/7) FINISHED                                                                                                                  docker-container:default
 => [internal] load build definition from Dockerfile                                                                                                                  0.0s
 => => transferring dockerfile: 344B                                                                                                                                  0.0s
 => [internal] load metadata for docker.io/library/busybox:latest                                                                                                     1.3s
 => [internal] load .dockerignore                                                                                                                                     0.0s
 => => transferring context: 2B                                                                                                                                       0.0s
 => [1/2] FROM docker.io/library/busybox:latest@sha256:650fd573e056b679a5110a70aabeb01e26b76e545ec4b9c70a9523f2dfaf18c6                                               0.0s
 => => resolve docker.io/library/busybox:latest@sha256:650fd573e056b679a5110a70aabeb01e26b76e545ec4b9c70a9523f2dfaf18c6                                               0.0s
 => CACHED [2/2] RUN mkdir -p /data/web/html &&     echo "<h1>Busybox httpd server</h1>" > /data/web/html/index.html                                                  0.0s
 => exporting to docker image format                                                                                                                                  0.1s
 => => exporting layers                                                                                                                                               0.0s
 => => exporting manifest sha256:ac9ab7ea17a22df4d6b811825b8d72617057773c55d4ac1333202c077d02edc9                                                                     0.0s
 => => exporting config sha256:d295a55faa063775dc81658b0f9a2b022e8c3ebee479fe7b94386155c695c810                                                                       0.0s
 => => sending tarball                                                                                                                                                0.1s
 => importing to docker                                                                                                                                               0.0s
 => => loading layer 29daefb0147a 223B / 223B                                                                                                                         0.0s
[root@localhost db]# docker images
REPOSITORY                      TAG               IMAGE ID       CREATED         SIZE
web                             v2                d295a55faa06   6 minutes ago   4.26MB
moby/buildkit                   buildx-stable-1   480495983c47   5 weeks ago     172MB
wordpress                       latest            2fc2a7b04129   5 weeks ago     739MB
tencentci/discuz                latest            caba9d3ea6d8   8 weeks ago     574MB
mysql                           5.7               5107333e08a8   3 months ago    501MB
goharbor/harbor-exporter        v2.8.4            b8d33e28ec68   6 months ago    97.7MB
goharbor/redis-photon           v2.8.4            7b7324d651ca   6 months ago    120MB
goharbor/trivy-adapter-photon   v2.8.4            91d8e9f0b21a   6 months ago    464MB
goharbor/notary-server-photon   v2.8.4            a46f91560454   6 months ago    113MB
goharbor/notary-signer-photon   v2.8.4            da66bd8d944b   6 months ago    110MB
goharbor/harbor-registryctl     v2.8.4            805b38ca6bee   6 months ago    141MB
goharbor/registry-photon        v2.8.4            756769e94123   6 months ago    79MB
goharbor/nginx-photon           v2.8.4            375018db778b   6 months ago    116MB
goharbor/harbor-log             v2.8.4            8a2045fb24d2   6 months ago    124MB
goharbor/harbor-jobservice      v2.8.4            97808fc10f64   6 months ago    141MB
goharbor/harbor-core            v2.8.4            c26fcd0714d8   6 months ago    164MB
goharbor/harbor-portal          v2.8.4            4a8b0205c0f9   6 months ago    124MB
goharbor/harbor-db              v2.8.4            5b8af16d7420   6 months ago    174MB
goharbor/prepare                v2.8.4            bdbf974d86ce   6 months ago    166MB
busybox                         latest            ba5dc23f65d4   9 months ago    4.26MB
mysql                           5.6               dd3b2a5dcb48   2 years ago     303MB
y109/discuz                     latest            607a1b6e9cc4   8 years ago     542MB
training/webapp                 latest            6fae60ef3446   8 years ago     349MB
training/postgres               latest            6fa973bb3c26   9 years ago     365MB
[root@localhost db]# docker run -d --name test1 -P web:v2
ed9d72069d829036d826e87875f1b15242c358d67d95130862ef8ee440caa0f3
[root@localhost db]# docker ps
CONTAINER ID   IMAGE                           COMMAND                  CREATED          STATUS          PORTS                   NAMES
ed9d72069d82   web:v2                          "/bin/sh -c '/bin/ht…"   5 seconds ago    Up 4 seconds    0.0.0.0:32768->80/tcp   test1
faed7103e3ff   moby/buildkit:buildx-stable-1   "buildkitd"              11 minutes ago   Up 11 minutes                           buildx_buildkit_default

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/461151.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

springboot“力炫”健身馆网站

摘要 随着网络科技的不断发展以及人们经济水平的逐步提高&#xff0c;网络技术如今已成为人们生活中不可缺少的一部分&#xff0c;而信息管理系统是通过计算机技术&#xff0c;针对用户需求开发与设计&#xff0c;该技术尤其在各行业领域发挥了巨大的作用&#xff0c;有效地促…

当前组件端口莫名增加127.0.0.1:3658和8563

当部署组件到服务器中&#xff0c;可以通过下方的命令查询服务pid占用的端口&#xff0c; netstat -nap |grep PID | grep LISTEN查询之后发现除了自己组件的端口还增加 百思不得其解后&#xff0c;知道了3658 8563端口是近期使用的arthas组件的端口&#xff0c; 启动arthas组…

ROS——集成开发环境搭建

1.4 ROS集成开发环境搭建 和大多数开发环境一样&#xff0c;理论上&#xff0c;在 ROS 中&#xff0c;只需要记事本就可以编写基本的 ROS 程序&#xff0c;但是工欲善其事必先利其器&#xff0c;为了提高开发效率&#xff0c;可以先安装集成开发工具和使用方便的工具:终端、ID…

基于GT911触控IC的电容屏在MSP430上的驱动

背景 最近参加公司一个电池测试仪的项目&#xff0c;负责电容屏驱动开发&#xff0c;电容屏的触控IC是汇顶科技的GT911&#xff0c;电容屏的总线接口是I2C。 因为项目沟通方面的失误&#xff0c;本应接到主控芯片的电容屏&#xff0c;被连到了MSP430这款负责供电管理的MCU&…

NCP1380BDR2G芯片中文资料规格书PDF数据手册引脚图图片参数功能价格

产品描述&#xff1a; NCP1380 是一款高性能器件&#xff0c;旨在为准谐振转换器供电。该控制器基于专属的谷锁闭系统&#xff0c;可以在功率负载变轻时进行切换并降低开关频率。这样将产生稳定的运行&#xff0c;即使在漏极-源极谷中总是触发的开关事件下也是如此。此系统可在…

关于数据文件上传到服务器的格式及上传实现的方法

文件上传的格式&#xff1a; 第一种&#xff1a;form-data格式的&#xff1a; let fm new FormData; fm.append(file,file) fm.append(filename, ) // 在请求体中进行添加请求头的信息 axios.post(https://127.0.0.1:8888/upload_single,fm,{ headers:{ …

SPI机制详解

SPI机制详解 什么是SPI机制&#xff1f; SPI&#xff1a;Service Provider Interface&#xff0c;中文直译&#xff1a;服务提供者接口&#xff0c;它通过在ClassPath路径下的META-INF/service文件夹中查找文件&#xff0c;并自动加载文件里所定义的类 在面向对象的设计原则…

踩坑(乱改配置,电脑都打不开,无奈暴力重装)文末有惊喜喔

总结我的论文项目的傻逼开端。&#xff08;想的很好&#xff0c;思路也对&#xff0c;也做了&#xff0c;但是过程和结果好像并不是想象中那么容易&#xff09; 故事讲解&#xff1a; 本来我只有一台电脑&#xff0c;这个电脑上面东西比较杂。学习资料呀&#xff0c;笔记呀&a…

【使用postman测试python接口】

打开python服务 设置postman如下&#xff0c;并发送&#xff1a; postman新建请求设置请求方式为post设置地址、raw、json方式、内容如下 结果&#xff1a; python如下&#xff1a; from flask import Flask, request, jsonifyapp Flask(__name__) # 实例化对象app.route…

JVM理解学习

参考视频 运行时数据区 JVM架构总览图 绿色的&#xff1a;方法区&#xff0c;堆&#xff0c;是所有线程共享的 黄色的&#xff1a; 虚拟机栈&#xff0c;本地方法栈&#xff0c;程序计数器&#xff0c;是线程私有的 程序计数器 程序计数器是一块较小的内存空间&#xff0c;物…

macbook安装brew出现错误解决办法

我是使用国内的源安装brew的时候&#xff1a; /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 我选择了 1: 就出错了&#xff0c;后来切换为2重新安装就好了 安装完成后提示获取不到系统版本&#xff1a; Failed to co…

Linux使用Docker部署Registry结合内网穿透实现公网远程拉取推送镜像

文章目录 1. 部署Docker Registry2. 本地测试推送镜像3. Linux 安装cpolar4. 配置Docker Registry公网访问地址5. 公网远程推送Docker Registry6. 固定Docker Registry公网地址 Docker Registry 本地镜像仓库,简单几步结合cpolar内网穿透工具实现远程pull or push (拉取和推送)…

Linux服务器(Debian系)包含UOS安全相关巡检shell脚本

#!/bin/bash# Define output file current_date$(date "%Y%m%d") # Gets the current date in YYYYMMDD format output_file"server_security_inspection_report_${current_date}.txt"# Empty the file initially echo > $output_file# 获取巡检时间 (…

Hadoop学习1:概述、单体搭建、伪分布式搭建

文章目录 概述基础知识Hadoop组件构成Hadoop配置文件 环境准备配置Hadoop配置下载配置环境变量 Hadoop运行模式Standalone Operation&#xff08;本地&#xff09;官方DemoWordCount单词统计Demo Pseudo-Distributed Operation&#xff08;伪分布式模式&#xff09;配置修改启动…

NCV4275CDT50RKG稳压器芯片中文资料规格书PDF数据手册引脚图图片价格功能

产品概述&#xff1a; NCV4275C 是一款低漏稳压器&#xff0c;可用于严酷汽车环境。它包括了较宽的运行温度范围和输出电压范围。输出调节为 5.0 V 或 3.3 V&#xff0c;额定输出电流为 450 mA。它还提供过电流保护、超温保护和可编程微处理器重置等多种功能。NCV4275C 采用 D…

Python Learn day05

Python Learn day05 本文主要讲解 继承、多态、定制类 继承和多态 什么是继承 当新类想要拥有现有类的功能结构&#xff0c;可以使用继承。继承的前提是新类 is a 现有类&#xff0c;即&#xff1a; 子类 is 父类 总是从某个类继承&#xff1a; class Myclass(object):pass…

Vue+OpenLayers7入门到实战:OpenLayers如何使用全屏控件,来实现地图容器的全屏和退出全屏功能

返回《Vue+OpenLayers7》专栏目录:Vue+OpenLayers7入门到实战 前言 本章介绍如何使用OpenLayers7在地图上使用地图全屏控件,来控制地图容器的全屏和退出全屏的功能。 注意:这里的全屏控件全屏指的是地图容器全屏,并非整个网页全屏。 网页整体全屏和指定网页节点全屏可以参…

十五、计算机视觉-sobel算子

文章目录 前言一、sobel算子的概念二、sobel算子的计算方式三、具体实现 前言 上节课我们学习了梯度的知识&#xff0c;学习了如何去计算梯度&#xff0c;本节我们继续学习计算梯度的方法&#xff0c;本节我们学习使用Sobel算子计算梯度&#xff0c;这与上节课梯度计算方法有所…

ARMv8架构特殊寄存器介绍-0

一、zero 寄存器 零寄存器用作源寄存器时读取零&#xff0c;用作目标寄存器时丢弃结果。您可以在大多数指令中使用零寄存器&#xff0c;但不是所有指令。二、sp寄存器 在ARMv8架构中&#xff0c;要使用的堆栈指针的选择在某种程度上与Exception级别。默认情况下&#xff0c;异…

大数据Doris(六十九):项目线上表现

文章目录 项目线上表现 一、查询响应时间