[Docker精进篇] Docker镜像构建和实践 (三)

这篇具有很好参考价值的文章主要介绍了[Docker精进篇] Docker镜像构建和实践 (三)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:

Docker镜像构建的作用是将应用程序及其依赖打包到一个可移植、自包含的镜像中,以便在不同环境中快速、可靠地部署和运行应用程序。

[Docker精进篇] Docker镜像构建和实践 (三),Docker精进,docker,容器,云原生,网络,运维,原力计划


这篇文章是我的笔记,旨在带您快速入门上手docker,更加深入学习docker知识

Docker镜像构建

做事三步走:是什么,为什么,怎么办 我们一步一步来进行分析

磨刀不误砍柴工,让我们一步一步去分析和深入。😉

1️⃣是什么?

Docker镜像构建提供了一种强大且灵活的方式来打包、部署和管理应用程序。通过实现环境一致性、快速部署、版本控制、资源隔离和易维护性等优点,它大大简化了应用程序的交付和运维过程,提高了开发和运维的效率,并促进了应用程序的可移植性和可靠性。

[Docker精进篇] Docker镜像构建和实践 (三),Docker精进,docker,容器,云原生,网络,运维,原力计划

2️⃣为什么?

相信大家能从往期文章学到挺多docker的相关知识,在看了上面的相关介绍,应该很清楚的知道镜像构建的好处和优点,下面我简单汇总总结一下:

  1. 环境一致性和可移植性: Docker镜像构建允许将应用程序及其所有依赖项打包到一个独立的、可移植的单元中。这意味着可以在不同的环境中运行相同的镜像,无需担心由于环境差异而导致的不兼容问题。无论是开发、测试还是生产环境, 可以使用相同的镜像保持环境一致性,确保应用程序在不同环境中的行为一致。

  2. 快速部署和扩展: Docker镜像构建使部署应用程序变得非常简单和快速。一旦构建好镜像,可以将其部署到任何支持Docker的主机上,无需繁琐的依赖项安装和配置过程。此外,由于镜像具有轻量级的特性,可以快速地复制和部署多个容器实例,从而轻松地进行应用程序的水平扩展。

  3. 版本控制和可重复性: Docker镜像构建可以与版本控制系统(如Git)集成,将构建过程纳入代码管理。通过在代码库中包含Dockerfile,可以确保每个构建步骤都是可追溯和可重复的。这样一来,可以轻松地管理和维护应用程序的不同版本,以及构建和发布过程的变更。

  4. 资源隔离和安全性: Docker容器提供了一种轻量级的虚拟化方式,能够实现资源隔离并增强应用程序的安全性。镜像构建过程允许您明确定义应用程序的依赖项和运行时环境,从而减少了应用程序与宿主机之间的耦合。这种隔离性可以防止应用程序对主机环境的干扰,同时减少了系统故障和依赖冲突的风险。

  5. 易于维护和更新: 通过Docker镜像构建,您可以轻松地更新和维护应用程序。一旦构建了镜像,您可以对其进行版本控制和标记,以便追踪和管理不同版本的应用程序。当需要进行更新或修复时,只需构建一个新的镜像,然后将其部署到运行中的容器上即可。这种更新过程通常非常简单和可靠,减少了应用程序维护的工作量和风险。

3️⃣镜像构建

镜像构建有两种方式,一种是使用现有容器去构建新镜像,一种是通过dockerfile去构建新的镜像。

[Docker精进篇] Docker镜像构建和实践 (三),Docker精进,docker,容器,云原生,网络,运维,原力计划

一、用现有容器构建新镜像

首先我们先来了解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 DEBUG=true" container_id repository:tag

创建一个新镜像,并设置提交消息为 “Added new dependencies”。

	docker commit -m "Added new dependencies" container_id repository:tag

暂停容器的运行状态,并将其转换为一个新的可运行镜像

	docker commit -p container_id repository:tag

docker commit 命令时,一般使用 Dockerfile 来定义和构建镜像,以便更好地管理和复现构建过程。

二、Dockerfile构建镜像

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明
[Docker精进篇] Docker镜像构建和实践 (三),Docker精进,docker,容器,云原生,网络,运维,原力计划
首先我们先看示例:

# 指明构建的新镜像是来自于 centos:7 基础镜像
FROM centos:7
# 通过镜像标签声明了作者信息
LABEL maintainer="mszlu.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 maintainer="mszlu.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精进篇] Docker镜像构建和实践 (三),Docker精进,docker,容器,云原生,网络,运维,原力计划
Docker镜像构建是将应用程序和其依赖项打包到一个独立、可移植的容器环境中的过程。通过使用Dockerfile定义构建步骤和环境配置,可以实现快速、一致和可重复的镜像构建。镜像构建的好处包括环境一致性、快速部署、版本控制、资源隔离和易于维护更新。

如果您在学习过程中有什么疑问或者不懂的地方,可以随时私信我,看到会及时回复!!文章来源地址https://www.toymoban.com/news/detail-655971.html

到了这里,关于[Docker精进篇] Docker镜像构建和实践 (三)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Docker入门流程(创建容器到构建镜像)

    平时我们经常会遇到在自己电脑上运行的代码,在别人的电脑上运行就出现莫名其妙的问题,这种大多是因为代码”水土不服“,不同电脑的软件版本和依赖库不同,Docker的使用可以很好地解决这个问题。简单来说,Docker可以把 代码和代码运行的环境 一把打包,构建一个容

    2024年02月08日
    浏览(42)
  • 手动构建自己的docker容器镜像实战

    之前的实战中,我们实战中,我们使用的镜像都是镜像仓库已有的镜像。 已有的镜像都是别人已经开发好上传的。今天我们一起来看看如何构建自己的镜像并上传到镜像仓库中。 🏠个人主页:我是沐风晓月 🧑个人简介:大家好,我是沐风晓月,阿里云社区博客专家😉😉

    2023年04月10日
    浏览(32)
  • 【云原生|Docker系列第3篇】Docker镜像的入门实践

    欢迎来到Docker入门系列的第三篇博客!在前两篇博客中,我们已经了解了什么是Docker以及如何安装和配置它。本篇博客将重点介绍Docker镜像的概念,以及它们之间的关系。我们还将学习如何拉取、创建、管理和分享Docker镜像,这是使用Docker的重要步骤之一。 Docker镜像是Docke

    2024年02月16日
    浏览(36)
  • Docker构建jar包镜像并运行容器

    Docker需要提前安装,不懂的参考: Centos7操作Docker_JohnGene的博客-CSDN博客_centos7 操作docker 安装Docker安装Docker官方源:yum-config-manager –add-repo http://download.docker.com/linux/centos/docker-ce.repo更新源:yum makecache fast安装:yum install docker-ce启动并设为开机自启:systemctl enable docker #设为开机

    2024年02月09日
    浏览(62)
  • 【云原生】Docker镜像和容器的导入导出及常用命令

    大家好,本文是对 Docker 的镜像和容器的一些操作指令的汇总,比如镜像和容器的导入导出,以及一些在使用过程中的常用命令。希望对大家有所帮助~ 1.1、镜像的导入导出 1.1.1、镜像的保存 通过镜像ID保存 方式一: 例如: 方式二: 例如: 通过镜像 repository 和 tag 保存 例如

    2024年02月02日
    浏览(52)
  • 【云原生|Docker系列第4篇】Docker的容器的入门实践

    欢迎来到云原生系列的第4篇博客!在前面的两篇博客中,我们已经学习了Docker镜像的基本概念和入门实践。本篇博客将带您深入了解Docker容器,探索如何使用Docker容器来构建、运行和管理应用程序。无论您是新手还是有一定经验的开发者,通过本篇博客的实践指导,您将能够

    2024年02月17日
    浏览(48)
  • [Docker精进篇] 详细配置和部署镜像(一) 文末送书

    前言: 容器提供了将应用程序的代码、运行时、系统工具、系统库和配置打包到一个实例中的标准方法。 经过几天的仔细学习,感觉docker很好用。这篇文章是我的笔记,旨在带您快速入门上手docker Docker架构:分为三部分,客户端,Docker服务端,仓库。 Docker服务端 又称为D

    2024年02月13日
    浏览(43)
  • Docker进阶:容器数据卷与Dockerfile构建镜像(发布)

    💖The Begin💖点点关注,收藏不迷路💖 1、完成数据持久化和共享数据,docker容器中的数据,同步到本地。 2、重要数据back_up 特点: 实时生效、数据卷可在容器之间共享和重用数据、数据卷中的更改不会包含在镜像更新中、数据卷的生命周期会一直延续到没有容器使用它为止

    2024年02月09日
    浏览(50)
  • Docker实践笔记7:构建MySQL 8镜像

    本教程将指导您使用Dockerfile构建和运行一个MySQL 8容器。让我们开始吧! 在您的项目根目录下创建一个名为Dockerfile的文件。以下是Dockerfile的示例内容: 在src文件夹下创建一个名为my.cnf的文件,该文件包含MySQL的配置信息。您可以根据自己的需求进行配置。以下是一个示例配

    2024年02月03日
    浏览(48)
  • Docker基础入门:容器数据卷与Dockerfile构建镜像(发布)

    💖The Begin💖点点关注,收藏不迷路💖 1、完成数据持久化和共享数据,docker容器中的数据,同步到本地。 2、重要数据back_up 特点: 实时生效、数据卷可在容器之间共享和重用数据、数据卷中的更改不会包含在镜像更新中、数据卷的生命周期会一直延续到没有容器使用它为止

    2024年02月10日
    浏览(52)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包