欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > Docker学习之dockerfile篇(day8)

Docker学习之dockerfile篇(day8)

2025/4/1 17:03:56 来源:https://blog.csdn.net/qq_44787802/article/details/146553464  浏览:    关键词:Docker学习之dockerfile篇(day8)

文章目录

  • 前言
  • 一、问题描述
  • 二、具体内容
    • 1. Docker 镜像原理
    • 2. Docker 镜像制作
    • 3. Dockerfile 概念
      • Dockerfile 的基本结构:
    • 4. Dockerfile 关键字
    • 5. Docker 实战案例
      • 5.1 基于 Nginx 构建 Web 服务器
    • 6. 验证与总结
      • 6.1 验证 Dockerfile
      • 6.2 总结

前言

Docker 是一种轻量级的容器化技术,而 Docker 镜像是其核心组成部分之一。Dockerfile 作为构建镜像的脚本文件,定义了镜像的构建流程。掌握 Docker 镜像的原理、制作方法、Dockerfile 的关键字及实际案例,可以帮助我们更高效地管理和部署应用。


一、问题描述

在容器化应用的开发过程中,我们需要构建和管理 Docker 镜像,以便快速部署应用程序。但在实际使用 Docker 时,可能会遇到以下问题:

  • Docker 镜像的工作原理是什么?
  • 如何制作自定义 Docker 镜像?
  • Dockerfile 是什么,它如何帮助构建镜像?
  • Dockerfile 中有哪些关键指令?
  • 如何使用 Docker 实现实际案例?

本篇文章将围绕这些问题展开详细解析。

二、具体内容

1. Docker 镜像原理

Docker 镜像是一个只读的模板,包含了运行容器所需的所有内容,如操作系统、应用程序及其依赖项等。Docker 镜像的底层采用 UnionFS(联合文件系统) 进行管理,它由多个只读层(Layer)组成,每一层代表 Dockerfile 中的一条指令。

Docker 镜像的特点:

  • 分层存储:每个指令都会创建一个新层,减少冗余,提高构建效率。
  • 写时复制(Copy-on-Write, CoW):容器运行时会创建一个可写层,避免修改基础镜像。
  • 可复用性:相同的基础镜像可以被多个容器共享,减少存储开销。

2. Docker 镜像制作

Docker 镜像的制作方式主要有以下几种:

  1. 基于已有镜像修改并提交
# 将正在运行的容器 (<docker-id>) 保存为新的镜像 (<image-name:version>)
docker commit <docker-id> <image-name:version>
# 将 Docker 镜像 (<image-name:version>) 导出为一个 .tar 文件(可重命名为 .zip)
docker save -o <zipfile-name> <image-name:version>
# 从导出的 .tar 文件中加载 Docker 镜像
docker load -i <zipfile-name>

tomcat为例
首先,进入tomcat_app容器:

docker start tomcat_app
docker exec -it tomcat_app /bin/bash

在这里插入图片描述

然后,在根目录下创建一个test文件

cd 
touch test

接着,在webapps目录下创建挂载文件test2,用于对比testtest2哪个后面会被保留、哪个会被删除。

cd usr
cd local
cd tomcat
cd webapps
mkdir test2

在该过程中可以用ls查看当前路径下有哪些文件夹。

下面,由容器创建镜像

docker commit 5db54e7325bf test_tomcat:1.0
docker images

在这里插入图片描述
接着,进行镜像压缩

docker save -o test_tomcat.tar test_tomcat:1.0 

使用ll可以看到记录
在这里插入图片描述

然后,删除原先的test_tomcat镜像

docker rmi test_tomcat:1.0

在这里插入图片描述
下面,解压缩还原压缩的镜像并创建容器

docker load -i test_tomcat.tar
docker run -it --name=newtest_tomcat test_tomcat:1.0 /bin/bash

查看之前的testtest2

ls
cd webapps
ls

没有显示test2文件。

cd
ls

在这里插入图片描述
test文件还在。

  1. 使用 Dockerfile 构建镜像(推荐)
# 在当前目录下创建镜像
docker build -t myapp .
  1. 通过导入和导出 tar 文件制作镜像
   docker export 容器ID > myapp.tarcat myapp.tar | docker import - myimportedimage

3. Dockerfile 概念

Dockerfile 是一个文本文件,包含了一系列指令,每个指令都用于构建 Docker 镜像的不同层。

Dockerfile 的基本结构:

# 指定基础镜像
FROM ubuntu:latest# 维护者信息
MAINTAINER your_name# 运行命令
RUN apt-get update && apt-get install -y curl# 复制文件
COPY app /usr/src/app# 设置工作目录
WORKDIR /usr/src/app# 暴露端口
EXPOSE 8080# 容器启动时执行的命令
CMD ["./app"]

4. Dockerfile 关键字

Dockerfile 中常见的指令及其作用:

指令作用
FROM指定基础镜像
RUN执行命令并创建新层
CMD容器启动时默认执行的命令
ENTRYPOINT设置容器启动时执行的主程序
COPY复制本地文件到镜像中
ADD复制文件,可自动解压 tar 包
WORKDIR设置工作目录
EXPOSE声明容器监听的端口
ENV设置环境变量
ARG定义构建时参数
VOLUME定义数据卷,实现数据持久化

5. Docker 实战案例

5.1 基于 Nginx 构建 Web 服务器

创建dockerfile并编辑

# 使用官方 Nginx 镜像作为基础
FROM nginx:latest# 复制网站文件到 Nginx 目录
COPY ./html /usr/share/nginx/html# 暴露 80 端口
EXPOSE 80# 启动 Nginx
CMD ["nginx", "-g", "daemon off;"]

在dockerfile同一级目录下创建html目录,并写入内容:

mkdir html
# 添加一个简单的 index.html
echo "<h1>Hello, Docker</h1>" > html/index.html

结构树情况如下所示:
/my-project
├── dockerfile ✅
├── html/
│ ├── index.html ✅

构建与运行:

# 构建镜像
docker build -t mynginx .

在这里插入图片描述
在这里插入图片描述

# 运行容器
docker run -d -p 8080:80 mynginx

在这里插入图片描述
访问 http://localhost:8080 即可查看网页。
在这里插入图片描述

6. 验证与总结

6.1 验证 Dockerfile

可以使用以下命令构建并运行 Docker 镜像:

# 构建镜像
docker build -t myapp .# 运行容器
docker run --rm myapp

6.2 总结

本文介绍了 Docker 镜像的原理、制作方法、Dockerfile 关键字及实际案例,包括:

  • Docker 镜像的分层结构及存储机制
  • 通过 commit、build 及导入导出制作镜像的方法
  • Dockerfile 的常见指令及优化策略
  • Nginx 的 Docker 实战案例

掌握这些内容后,可以更高效地管理和优化 Docker 容器的构建与部署。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com