深入理解docker镜像的分层(小白必看)

深入理解docker镜像的分层(小白必看)

Docker 镜像是用于创建 Docker 容器的模板,它们包含应用程序代码、运行时、系统工具和库等依赖项。Docker 镜像具有分层结构,每个分层包含了部分文件系统的文件,在 Docker 容器启动时,这些分层会组合成一个完整的文件系统。

镜像分层的原理

每个 Docker 镜像都由多个只读层组成,每个层都是基于上一个层创建的。当容器启动时,Docker 将这些层组合在一起形成容器的文件系统。每个层都由文件或目录的变更组成,这可以是添加、修改或删除文件。因此,如果我们修改了一个镜像的任何层,都会影响到它自身和继承它的所有容器。

以下是一个示例 Docker 镜像的分层结构:

Layer 3 - Modified Files
Layer 2 - Modified Files
Layer 1 - Modified Files
Layer 0 - Base Image

其中:

  • Layer 0 是基础镜像,是其他层的基础,包含了操作系统
  • Layer 1 包含操作系统上编译的软件(例如Apache)
  • Layer 2 包含操作系统和软件上的配置信息
  • Layer 3 包含应用程序和数据文件

镜像分层的优点

Docker 镜像的分层结构有以下优点:

  • 共享:Docker 镜像的不同部分(层)可以被多个镜像共享。例如,可以有一个镜像作为基础镜像,其他镜像在此基础上构建而来。
  • 缓存:Docker 使用每个镜像的层缓存中间状态。如果再次构建一个基于原始镜像的容器时,Docker 会使用缓存而不是再一次构建完整的镜像。
  • 聚焦:每个层都包含了完整的文件系统,因此不必将所有文件复制到一个镜像中。这使得镜像更加轻量级。

示例1:创建自定义镜像

以下是一个例子,演示了如何构建自定义 Docker 镜像以及如何利用镜像缓存。

我们假设我们有一个基于 Ubuntu 基础镜像的应用程序,应用程序需要安装 curl 工具。

我们先从 Docker Hub 上拉取 Ubuntu 镜像。

docker pull ubuntu:latest

接下来,我们要在这个镜像上创建一个新层并安装 curl 工具。创建一个名为 Dockerfile 的文件,包含以下内容:

FROM ubuntu:latest
RUN apt-get update && apt-get install -y curl

这个文件告诉 Docker 使用 ubuntu:latest 作为基础镜像,并在上面安装 curl 工具,最后将这个新的镜像保存为 my-ubuntu。要构建自定义镜像,我们运行以下命令:

docker build -t my-ubuntu .

这个命令会读取 Dockerfile 文件中的说明,并构建一个新的 Docker 镜像。我们也可以在本地获得这个镜像,而不是从 Docker Hub 上拉取:

docker images

这会显示本地可用的所有 Docker 镜像,包括我们刚刚构建的 my-ubuntu 镜像。

现在,我们可以运行一个容器,使用我们刚刚构建的镜像,并在启动过程中安装 curl:

docker run -it my-ubuntu /bin/bash

这启动了一个交互式 Shell,我们可以在其中执行一些命令进行测试。例如,使用 curl 命令进行网络请求:

curl -I www.google.com

此时,Docker 会使用之前构建的镜像缓存,因为除了我们添加的 curl 工具层,其他所有层都与之前构建时相同。

示例2:优化 Docker 镜像大小

使用 Docker 镜像时,考虑到其小巧的大小是非常重要的,因此,以下是一些优化 Docker 镜像大小的技巧:

  • 减少不必要的软件包和依赖项以及不必要的文件
  • 使用多个 FROM 语句以构建更小的镜像
  • 使用 alpine 等小型 Linux 发行版作为基础镜像

以下是一个简单的例子,演示如何使用 alpine 作为基础镜像,并创建一个简单的 Python 应用程序:

FROM alpine:latest
RUN apk add --no-cache python3
COPY . /app
WORKDIR /app
ENTRYPOINT ["python3"]
CMD ["app.py"]

这个代码使用了 alpine 作为基础镜像,并在上面安装了 Python3,最后使用 COPY 命令将应用程序代码复制到容器中,使用 ENTRYPOINT 和 CMD 命令定义了容器启动时要运行的 Python 脚本。

通过上述两个示例,我们可以更深入地了解 Docker 镜像的分层结构以及如何使用 Docker 镜像进行应用程序部署。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:深入理解docker镜像的分层(小白必看) - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • 远程云服务器上docker安装redis的过程

    首先明确一点,云服务环境你已经安装好了docker(可参考菜鸟教程:https://www.runoob.com/docker/centos-docker-install.html) 1.安装好以后,输入版本查看命令: docker -v 2.进入docker hub官网查看你所需要的redis的版本信息 docker hub     3.远程连接服务的工具…

    Docker 2023年4月10日
    00
  • Docker容器的使用方法简单示例

    下面我将详细讲解“Docker容器的使用方法简单示例”的完整攻略,其中包含两条示例说明。 Docker容器的使用方法简单示例 Docker 是一个开源的应用容器引擎,可以让开发者将自己的应用打包到一个可移植的容器中,然后发布到任意的 Linux 及 Windows 等操作系统上。下面分别给出两个示例,展示 Docker 容器的使用方法。 示例一:使用 Doc…

    Docker 2023年5月16日
    00
  • Docker快速部署Nacos

    Nacos+Docker 前置 机器配置不能太低 ( 2c2g的轻量服务器直接崩掉了) Docker https://www.docker.com/ 开始安装 mysql 使用docker安装mysql (推荐8.0) 可以不输入这个直接跳到下一步,docker会帮你下载. docker pull mysql:8.0 运行mysql docker run -…

    2023年4月10日
    00
  • docker与gosu

    1.容器中不要使用root账号 gosu是个工具,用来提升指定账号的权限,作用与sudo命令类似,而docker中使用gosu的起源来自安全问题; docker容器中运行的进程,如果以root身份运行的会有安全隐患,该进程拥有容器内的全部权限,更可怕的是如果有数据卷映射到宿主机,那么通过该容器就能操作宿主机的文件夹了,一旦该容器的进程有漏洞被外部利用后果是很…

    Docker 2023年4月11日
    00
  • Docker命令行入门大全(这18条,你不得不知)

    下面为大家详细讲解“Docker命令行入门大全(这18条,你不得不知)”的攻略。 1. docker version 该命令可以查看Docker客户端和服务端的版本信息,用于确认Docker是否正确安装和运行。具体的使用方法为: docker version 2. docker info 该命令可以查看Docker的一些详细信息,包括镜像数量、容器数量、运行…

    Docker 2023年5月16日
    00
  • 使用docker mediawiki,搭建网页wiki

      我只是想做一个大家都能访问的wiki,用于成员间共享和维护一些文档。找到了docker的mediawiki,这里记录一下我怎么搭的吧。   首先,如果你在一个局域网里,有公用的可以访问的服务器,那可以直接在那上面搭建,比如我们实验室的服务器,只要在校园网下,都可以访问。不过这篇博客是在我的阿里云的服务器上实现的,我租的是阿里云轻量应用型服务器,原因是便宜…

    Docker 2023年4月11日
    00
  • docker部署安装zabbix

     安装docker   安装docker需要配置网络yum源,centos7自带的版本太低了   第一步:下载阿里云的docker安装包 在yum仓库的目录之下 [root@localhost yum.repos.d]# wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo …

    Docker 2023年4月16日
    00
  • docker ——从docker容器的内部,连接本机的mysql

    所以我有一个Nginx运行在一个docker容器,我有一个mysql运行在localhost,我想连接到我的Nginx内的MySql。 MySql在localhost上运行,并且不将端口暴露给外部世界,因此其绑定在localhost上,而不是绑定在机器的ip地址上。 有没有办法连接到这个MySql或任何其他程序在localhost从这个docker容器?  …

    Docker 2023年4月16日
    00
合作推广
合作推广
分享本页
返回顶部