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

news2024/11/23 3:27:28

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

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python 通过代理服务器 连接 huggingface下载模型,并运行 pipeline

想在Python 代码中运行时下载模型&#xff0c;启动代理服务器客户端后 1. 检查能否科学上网 $ curl -x socks5h://127.0.0.1:1080 https://www.example.com <!doctype html> <html> <head><title>Example Domain</title><meta charset"…

Python: 如何绘制核密度散点图和箱线图?

01 数据样式 这是数据样式&#xff1a; 要求&#xff08;我就懒得再复述一遍了&#xff0c;直接贴图&#xff09;&#xff1a; Note&#xff1a;数据中存在无效值NA&#xff08;包括后续的DEM&#xff09;&#xff0c;需要注意 02 提取DEM 这里我就使用gdal去提取一下DEM列…

./ 相对路径与node程序的启动目录有关

node:internal/fs/sync:78 return binding.openSync( ^ Error: ENOENT: no such file or directory, open D:\前端的学习之路\项目\codeHub\keys\private_key.pem at Object.open (node:internal/fs/sync:78:18) at Object.openSync (node:fs:565:…

Java后台面试相关知识点解析

文章目录 JavaJava中四种引用类型及使用场景集合HashMap源码及扩容策略HashMap死循环问题ConcurrentHashMap与HashtableConCurrentHashMap 1.8 相比 1.7判断单链表是否有环&#xff0c;并且找出环的入口 IO线程池线程池的几种创建方式判断线程是否可以回收线程池的7大核心参数线…

菜鸟学会Linux的方法

系统安装是初学者的门槛&#xff0c;系统安装完毕后&#xff0c; 很多初学者不知道该如何学习&#xff0c;不知道如何快速进阶&#xff0c; 下面作者总结了菜鸟学好Linux技能的大绝招&#xff1a; 初学者完成Linux系统分区及安装之后&#xff0c;需熟练掌握Linux系统管理必备命…

蓝桥省赛倒计时 35 天-bfs 和 dfs

#include <iostream> using namespace std; int t; int m,n; char mp[55][55];//不能写成 int 数组 bool vis[55][55]; int dx[ ]{1,0,-1,0},dy[ ]{0,1,0,-1}; int res;void dfs_1(int x,int y){vis[x][y] true;//陆地向四个方向拓展for(int i0;i<4;i){int nx xdx[i…

蓝桥杯练习系统(算法训练)ALGO-973 唯一的傻子

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 腿铮找2255有点事&#xff0c;但2255太丑了&#xff0c;所以腿铮不知道他的长相。正愁不知道到如何找他的时候&#xff0c;…

基于React低代码平台开发:直击最新高效应用构建

&#x1f3e1;浩泽学编程&#xff1a;个人主页 &#x1f525; 推荐专栏&#xff1a;《深入浅出SpringBoot》《java对AI的调用开发》 《RabbitMQ》《Spring》《SpringMVC》《项目实战》 &#x1f6f8;学无止境&#xff0c;不骄不躁&#xff0c;知行合一 文章目录…

2024鸿蒙迎来大爆发,有必要转行鸿蒙开发吗?

鸿蒙开发&#xff0c;这个名字最近在科技圈引起了不小的轰动。 那么&#xff0c;鸿蒙开发到底是什么呢&#xff1f;它又能给我们带来怎样的影响呢&#xff1f; 鸿蒙开发&#xff0c;简单来说&#xff0c;就是基于鸿蒙操作系统的一种应用开发方式。鸿蒙系统&#xff0c;作为华为…

记录 Dubbo+Zookeeper 学习Demo

DubboZookeeper ZookeeperZookeeper 下载可能出现的问题 辅助程序下载dubbo-admin项目打包工程打包常见问题 SpringBoot集成Dubbo项目依赖定义服务接口服务端实现服务端配置依赖代码实现 消费端实现服务端配置依赖代码实现 启动 结合Dubbo官网学习如何完成SpringBootDubboZooke…

webstorm 保存自动格式化

webstorm 保存自动格式化 全局安装 prettier npm i -g prettierwebstorm设置

谷歌seo外链重要还是内容重要?

想做网站&#xff0c;内容跟外链缺一不可&#xff0c;如果真的要说哪个更重要&#xff0c;那内容依旧是网站的核心&#xff0c;而外链则是额外的加分项 内容永远是王道&#xff0c;不管谷歌seo的算法怎么变&#xff0c;只要你的内容没问题&#xff0c;那就肯定不会牵扯到你的网…

【牛客】HJ73 计算日期到天数转换

目录 题目链接:计算日期到天数转换_牛客题霸_牛客网 (nowcoder.com) 解题思路: 代码实现: 题目链接:计算日期到天数转换_牛客题霸_牛客网 (nowcoder.com) 解题思路: 用一个数组存放每月的天数 输入的日期天数 当月的天数 当月之前的累积天数 如果包含二月&#xff0c;再去判…

新一代国产人工心脏推出,《2024心衰器械白皮书》重磅发布

2024年3月2日&#xff0c;永仁心医疗“EVA-Pulsar™新品发布会”在京举办。在国内外众多领域知名专家、投资人、企业家的共同见证下&#xff0c;永仁心最新一代EVA-Pulsar™人工心脏&#xff08;心室辅助装置&#xff09;重磅发布。 这款人工心脏集长期植入、超小体积、脉动血…

报错:Nginx 部署后刷新页面 404 问题

文章目录 问题分析解决 问题 在部署完项目后 刷新页面&#xff0c;页面进入了404 分析 加载单页应用后路由改变均由浏览器处理&#xff0c;而刷新时将会请求当前的链接&#xff0c;而Nginx无法找到对应的页面 关键代码try_files,剩下俩如果其他地方配置了则可以省略。 在这…

CentOS 7 基于开源项目制作openssh 9.7p1二进制rpm包(内含ssh-copy-id、显示openssl版本信息)—— 筑梦之路

可参考之前的文章&#xff1a;CentOS 5/6/7 基于开源项目制作openssh 9.6p1 rpm包—— 筑梦之路_centos6 openssh9.6rpm-CSDN博客 2024年3月12日 植树节制作&#xff0c;相关文件见我的资源

【Golang】Windows与Linux交叉编译保姆级教程

【Golang】Windows与Linux交叉编译 大家好 我是寸铁&#x1f44a; 总结了一篇【golang】Windows与Linux交叉编译的文章✨ 喜欢的小伙伴可以点点关注 &#x1f49d; 问题背景 今天寸铁想将Windows中的程序部到Linux下跑&#xff0c;我们知道在从Windows与Linux下要进行交叉编译…

韶音运动耳机好用吗?南卡、墨觉、韶音骨传导耳机三款全面评测

音乐是我生活中不可或缺的调味品&#xff0c;它伴随着我度过了无数个清晨的慢跑以及夜晚的悠闲散步。但是传统入耳式耳机总是让我感到不适&#xff0c;虽然它有着不错的降噪能力&#xff0c;但是很容易忽视周围环境的安全&#xff0c;而且运动的时候老容易掉。然后我遇到了骨传…

程序员如何设定人生目标?用OW64曼陀罗计划表!

工作后&#xff0c;我们常常过着十分紧凑的生活&#xff0c;要做的事很多&#xff0c;时间却很少&#xff0c;尤其是现在快节奏的生活&#xff0c;我们时常面临各种任务和目标&#xff0c;如何有效地管理目标和时间&#xff0c;成了一个关键问题。这个时候&#xff0c;曼陀罗计…

Spring Cloud Gateway基础内容(一)

文章目录 参考文章一、Gateway概述1、工作原理概述2、gateway特点 &#xff08;官方描述&#xff09;3、网关的重要性&#xff08;来自尚硅谷&#xff09;4、基础配置 二、简单实现SpringCloudnacos1、新建Spring项目2、添加基础的配置文件3、添加gateway配置断言规则 三、网关…