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

这篇具有很好参考价值的文章主要介绍了Docker容器化技术(使用Dockerfile制作镜像)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Docker容器化技术(使用Dockerfile制作镜像),docker,spring cloud,容器

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

 Docker容器化技术(使用Dockerfile制作镜像),docker,spring cloud,容器文章来源地址https://www.toymoban.com/news/detail-841419.html

到了这里,关于Docker容器化技术(使用Dockerfile制作镜像)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Docker容器技术之镜像制作

    上篇文章说到过,作为用户是不需要制作镜像的,因为几乎所有常用的数据局库、应用软件、中间件在Docker Hub 里面可以找到,但是如果到了万不得已的时候我们还是要自己制作镜像,比如给自己编写的软件制作镜像。 制作镜像有两种方法: 1.docker commit命令 2.编写Dockerfile利

    2024年02月05日
    浏览(52)
  • Docker技术入门| Part03:Dockerfile详解(Dockerfile概念、Dockerfile 指令、使用Dockerfile构建镜像)

    Docker镜像原理 Docker镜像是由特殊的文件系统叠加而成 最底端是bootfs,并使用宿主机的bootfs 第二层是root文件系统rootfs,称为base image 然后再往上可以叠加其他的镜像文件 统文件系统(UnionFile System)技术能够将不同的层整合成一个文件系统,为这些层提供了一个统的视角,这样就隐

    2024年02月09日
    浏览(64)
  • Docker在windows下使用教程,通过Dockerfile创建镜像/容器,以YOLO系列为例

     通过可视化界面将极大的降低学习难度。  1.1、Docker Desktop下载  下载地址:Docker Desktop: The #1 Containerization Tool for Developers | Docker 应当是这个界面,选择下载即可 1.2、下载完成后需打开window自带的虚拟机       将Hyper-V勾选即打开,勾选后需重启。  1.3、下载WSL,由于是在

    2024年02月05日
    浏览(66)
  • docker (八)-dockerfile制作镜像

    dockerfile通常包含以下几个常用命令: FROM   打包使用的基础镜像 WORKDIR   相当于cd命令,进入工作目录 COPY   将宿主机的文件复制到容器内 RUN   打包时执行的命令,相当于打包过程中在容器中执行shell脚本,通常用来安装应用程序所需要的依赖、设置权限、初始化配置文件

    2024年02月21日
    浏览(56)
  • 如何在 Linux 命令行下玩转 Docker——如何使用 Dockerfile 来构建和运行容器镜像

    作者:禅与计算机程序设计艺术 Docker 是一款开源的容器化技术,它利用 Linux 内核的容器特性,将应用部署到独立的进程环境中。基于容器技术可以极大地提高开发者和运维人员的效率,降低部署、测试和生产环节中的成本,有效地实现云计算资源的弹性伸缩。 本文主要介绍

    2024年02月07日
    浏览(59)
  • Docker容器:docker镜像的创建及dockerfile

    创建镜像有三种方法:基于现有镜像创建、基于本地模板创建及基于dockerfile创建 1.1 启动镜像 1.2 生成新镜像 2.1 OPENVZ 下载模板 2.2 导入容器生成镜像 3.1 dockerfile结构及分层 (1)dockerfile结构大致分为4个部分 基础镜像信息 维护者信息 镜像操作指令 容器启动时执行指令 Dockerfil

    2024年02月11日
    浏览(57)
  • 【云原生-Docker】docker镜像制作、上传、dockerfile命令解析

    在实际业务场景中,需要制作多个不同版本进行镜像使用,如maven版本、JDK、openJDK不同使用等,所以需要做多个针对不同版本做不同的镜像。 这里记录一下之前devops用的openJDK版本、某些部门需要用orcle JDK、特此需要做不同的镜像,镜像内包含centos、maven、jdk。 基础镜像 基础

    2024年02月03日
    浏览(56)
  • 【Docker】个人镜像文件Dockerfile制作详解

    前言 洁洁的个人主页 我就问你有没有发挥! 知行合一,志存高远。 Docker 是一个 开源的应用容器引擎 ,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux或Windows 操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之

    2024年02月13日
    浏览(53)
  • 【Docker】用Dockerfile制作个人的镜像文件

    作者简介: 辭七七,目前大一,正在学习C/C++,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: 七七的闲谈 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 前言 Docker 是一个 开源的应用容器引擎 ,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发

    2024年02月10日
    浏览(52)
  • Docker(七)—— 如何用Dockerfile制作自己的镜像

    目录 需求: 一、步骤  二、Dockerfile 三、 实战 —— 构建自己的centos 1. dockerfile编写 2. build构建 3. run 运行 四、用docker commit实现 四、实战 —— 构建jar包的镜像(helloworld版本) 五、实战 —— 构建jar包的镜像(两个容器通信版本)  自己写了一个小程序,如何带着环境打包

    2024年02月05日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包