企业网站建设公司那家好,可视化的网站开发工具,手机端视频网站模板下载,云南百度推广开户前言#xff1a; Docker镜像构建的作用是将应用程序及其依赖打包到一个可移植、自包含的镜像中#xff0c;以便在不同环境中快速、可靠地部署和运行应用程序。 文章目录 Docker镜像构建1️⃣是什么#xff1f;2️⃣为什么#xff1f;3️⃣镜像构建一、用现有容器构建新镜像…前言 Docker镜像构建的作用是将应用程序及其依赖打包到一个可移植、自包含的镜像中以便在不同环境中快速、可靠地部署和运行应用程序。 文章目录 Docker镜像构建1️⃣是什么2️⃣为什么3️⃣镜像构建一、用现有容器构建新镜像二、Dockerfile构建镜像 4️⃣总结 这篇文章是我的笔记旨在带您快速入门上手docker更加深入学习docker知识 Docker镜像构建
做事三步走是什么为什么怎么办 我们一步一步来进行分析
磨刀不误砍柴工让我们一步一步去分析和深入。
1️⃣是什么
Docker镜像构建提供了一种强大且灵活的方式来打包、部署和管理应用程序。通过实现环境一致性、快速部署、版本控制、资源隔离和易维护性等优点它大大简化了应用程序的交付和运维过程提高了开发和运维的效率并促进了应用程序的可移植性和可靠性。 2️⃣为什么
相信大家能从往期文章学到挺多docker的相关知识在看了上面的相关介绍应该很清楚的知道镜像构建的好处和优点下面我简单汇总总结一下 环境一致性和可移植性 Docker镜像构建允许将应用程序及其所有依赖项打包到一个独立的、可移植的单元中。这意味着可以在不同的环境中运行相同的镜像无需担心由于环境差异而导致的不兼容问题。无论是开发、测试还是生产环境 可以使用相同的镜像保持环境一致性确保应用程序在不同环境中的行为一致。 快速部署和扩展 Docker镜像构建使部署应用程序变得非常简单和快速。一旦构建好镜像可以将其部署到任何支持Docker的主机上无需繁琐的依赖项安装和配置过程。此外由于镜像具有轻量级的特性可以快速地复制和部署多个容器实例从而轻松地进行应用程序的水平扩展。 版本控制和可重复性 Docker镜像构建可以与版本控制系统如Git集成将构建过程纳入代码管理。通过在代码库中包含Dockerfile可以确保每个构建步骤都是可追溯和可重复的。这样一来可以轻松地管理和维护应用程序的不同版本以及构建和发布过程的变更。 资源隔离和安全性 Docker容器提供了一种轻量级的虚拟化方式能够实现资源隔离并增强应用程序的安全性。镜像构建过程允许您明确定义应用程序的依赖项和运行时环境从而减少了应用程序与宿主机之间的耦合。这种隔离性可以防止应用程序对主机环境的干扰同时减少了系统故障和依赖冲突的风险。 易于维护和更新 通过Docker镜像构建您可以轻松地更新和维护应用程序。一旦构建了镜像您可以对其进行版本控制和标记以便追踪和管理不同版本的应用程序。当需要进行更新或修复时只需构建一个新的镜像然后将其部署到运行中的容器上即可。这种更新过程通常非常简单和可靠减少了应用程序维护的工作量和风险。
3️⃣镜像构建
镜像构建有两种方式一种是使用现有容器去构建新镜像一种是通过dockerfile去构建新的镜像。 一、用现有容器构建新镜像
首先我们先来了解docker镜像构建命令
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]下面我们来一步一步讲解 OPTIONS可选参数用于配置创建镜像的各种选项。 -a, --author: 设置新镜像的作者信息。-c, --change: 应用指定的 Dockerfile 指令。-m, --message: 设置新镜像的提交消息。-p, --pause: 在创建过程中暂停容器。
例子 创建一个新镜像并设置作者信息为 “John Doe”。 docker commit -a John Doe container_id repository:tag创建一个新镜像并在构建过程中应用指定的 Dockerfile 指令例如设置一个名为 DEBUG 的环境变量 docker commit -c ENV DEBUGtrue container_id repository:tag创建一个新镜像并设置提交消息为 “Added new dependencies”。 docker commit -m Added new dependencies container_id repository:tag暂停容器的运行状态并将其转换为一个新的可运行镜像 docker commit -p container_id repository:tagdocker commit 命令时一般使用 Dockerfile 来定义和构建镜像以便更好地管理和复现构建过程。
二、Dockerfile构建镜像
Dockerfile 是一个用来构建镜像的文本文件文本内容包含了一条条构建镜像所需的指令和说明 首先我们先看示例
# 指明构建的新镜像是来自于 centos:7 基础镜像
FROM centos:7
# 通过镜像标签声明了作者信息
LABEL maintainermszlu.com
# 设置工作目录
WORKDIR /usr/local
# 新镜像构建成功以后创建指定目录
RUN mkdir -p /usr/local/java mkdir -p /usr/local/tomcat
# 拷贝文件到镜像中并解压
ADD jdk-11.0.8_linux-x64_bin.tar.gz /usr/local/java
ADD apache-tomcat-9.0.59.tar.gz /usr/local/tomcat
# 暴露容器运行时的 8080 监听端口给外部
EXPOSE 8080
# 设置容器内 JAVA_HOME 环境变量
ENV JAVA_HOME /usr/local/java/jdk-11.0.8/
ENV PATH $PATH:$JAVA_HOME/bin
# 启动容器时启动 tomcat
CMD [/usr/local/tomcat/apache-tomcat-9.0.59/bin/catalina.sh, run]内容很长不用担心我们一步一步去分析 命令代码在上翻译在下通过几个实例让你进一步了解相关命令使用
FROM image:tag指明构建的新镜像是来自于哪个基础镜像如果没有选择 tag那么默认值为 latest。
MAINTAINER name指明镜像维护者及其联系方式一般是邮箱地址。官方说明已过时推荐使用 LABEL。
LABEL maintainermszlu.com功能是为镜像指定标签。也可以使用 LABEL 来指定镜像作者
RUN mkdir -p /usr/local/java构建镜像时运行的 Shell 命令比如构建的新镜像中我们想在 /usr/local 目录下创建一个 java 目录。
ADD jdk-11.0.6_linux-x64_bin.tar.gz /usr/local/java拷贝文件或目录到镜像中。将本地的jdk拷贝到虚拟机中/usr/local/java
COPY jdk-11.0.6_linux-x64_bin.tar.gz /usr/local/java拷贝文件或目录到镜像中。将本地的jdk拷贝到虚拟机中/usr/local/java, 用法同 ADD只是不支持自动下载和解压。
EXPOSE 80 443 8080/tcp暴露容器运行时的监听端口给外部可以指定端口是监听 TCP 还是 UDP如果未指定协议则默认为 TCP。想使得容器与宿主机的端口有映射关系必须在容器启动的时候加上 -p 参数
ENV JAVA_HOME /usr/local/java/jdk-11.0.6/设置容器内环境变量。
CMD ehco $JAVA_HOME启动容器时执行的 Shell 命令。在 Dockerfile 中只能有一条 CMD 指令。如果设置了多条 CMD只有最后一条 CMD 会生效。如果创建容器的时候指定了命令则 CMD 命令会被替代会被docker run给覆盖掉
ENTRYPOINT ehco $JAVA_HOME启动容器时执行的 Shell 命令同 CMD 类似不会被 docker run 命令行指定的参数所覆盖。在 Dockerfile 中只能有一条 ENTRYPOINT 指令。如果设置了多条 ENTRYPOINT只有最后一条 ENTRYPOINT 会生效。
WORKDIR /usr/local为 RUN、CMD、ENTRYPOINT 以及 COPY 和 AND 设置工作目录
VOLUME [/var/lib/mysql]容器的 /var/lib/mysql 目录会在运行时自动挂载为匿名卷匿名卷在宿主机的 /var/lib/docker/volumes 目录下
4️⃣总结 Docker镜像构建是将应用程序和其依赖项打包到一个独立、可移植的容器环境中的过程。通过使用Dockerfile定义构建步骤和环境配置可以实现快速、一致和可重复的镜像构建。镜像构建的好处包括环境一致性、快速部署、版本控制、资源隔离和易于维护更新。
如果您在学习过程中有什么疑问或者不懂的地方可以随时私信我看到会及时回复