手搓 Docker Image Creator(DIC)工具(02):预备知识

此节主要简单介绍一下 Docker、Dockerfile 的基本概念,Dockerfile 对的基本语法,Windows 和 macOS 下 Docker 桌面的安装,Docker 镜像的创建和运行测试等。

1 关于 Docker

Docker 是一个开源的应用容器引擎,它允许开发者打包应用及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器或 Windows 机器上,也可以实现虚拟化。

关于 Docker 的更详细信息、以及Docker 在 CentOS 里的安装,在我的另一篇博文里做了很详细的介绍,在此就不在赘述。有需要了解的请参考此篇《Docker搭建LNMP环境实战(05):CentOS环境安装Docker-CE》。

2 关于 Dockerfile

Dockerfile 是一个文本文件,用于定义 Docker 镜像的构建过程,通过一组指令(instructions)来指导 Docker 如何自动构建一个特定的镜像。以下是 Dockerfile 的关键命令或特性:

  • 基础镜像(FROM)

Dockerfile 通常从指定的基础镜像开始构建,例如 FROM ubuntu:latest 表示基于最新版 Ubuntu 镜像。

  • 维护者信息(MAINTAINER)

指定镜像的维护者信息,但已被官方弃用,推荐使用 LABEL 指令设置元数据。

  • 工作目录(WORKDIR)

设置镜像内部的工作目录,后续的 RUN、CMD、ENTRYPOINT 等命令将在该目录下执行。

  • 复制文件(COPY)

将本地文件或目录复制到镜像内部的指定路径。

  • 添加文件(ADD)

类似 COPY,但 ADD 还支持从 URL 下载文件并解压缩(如果文件是压缩格式)。

  • 运行命令(RUN)

执行任意 shell 命令或者脚本,用于安装软件包、修改配置等操作,每次 RUN 会创建一个新的镜像层。

  • 环境变量(ENV)

设置环境变量,可在构建时和运行时使用。

  • 暴露端口(EXPOSE)

指定镜像运行时将要监听的网络端口,但不映射到宿主机,实际端口映射需在运行容器时指定。

  • 设置容器启动命令(CMD)

指定容器启动后的默认执行命令和参数,可以被 docker run 命令后面跟的命令覆盖。

  • 入口点(ENTRYPOINT)

类似 CMD,但具有更高的优先级且不可被 docker run 命令覆盖,通常用于指定一个一直存在的长期运行的进程。

通过编写 Dockerfile 并执行 docker build -t <image-name> . 命令,可以从源代码和依赖项自动构建一个完整的、可重复使用的 Docker 镜像。这个镜像可以上传到 Docker Registry 分享给他人,或者在其他环境中拉取下来直接运行。

3 Docker 集成环境安装

  • Docker 官网 https://www.docker.com
  • Docker Desktop https://www.docker.com/products/docker-desktop/

3.1 Docker 桌面版介绍

Docker Desktop 是一款面向开发者的桌面应用程序,它允许用户在本地机器(Windows、Mac OS)上运行 Docker 容器和管理 Docker 环境。

主要特性:

  • 提供图形用户界面,方便管理和监控 Docker 容器及镜像。
  • 支持快速启动和配置 Docker 开发环境。
  • 内置 Kubernetes 支持,可以在本地进行 Kubernetes 应用的部署和测试。
  • 集成 Docker CLI 工具,支持通过命令行操作 Docker。

3.2 Docker 桌面版应用场景

  • 在开发阶段,Docker Desktop 可用于创建隔离的开发环境,确保开发人员的环境一致性。
  • 对于微服务架构的应用,开发人员可以在本地模拟多服务运行环境,便于调试和集成测试。
  • 教育培训场景下,教师可以利用 Docker Desktop 快速搭建教学环境,学生则可以在自己电脑上复现课程中的实验环境。

3.3 Docker 桌面版下载、安装与使用

用户可以下载并安装 Docker Desktop 到个人电脑上,安装过程中会自动配置所需的虚拟机、网络设置等环境。
安装完成后,用户可以通过 Docker Desktop 启动 Docker 服务,并通过 Docker CLI 或图形界面拉取、创建、运行容器。

3.3.1 Docker 桌面版下载

Docker 桌面版下载入口:
在这里插入图片描述

图1 Docker 桌面版下载链接

1)Windows 版下载

Windows 安装 exe 文件

2)Mac OS 版下载

Mac OS 安装 dmg 文件 - Apple 芯片

Mac OS 安装 dmg 文件 - Intel 芯片

3.3.2 Docker 桌面版安装

1)Windows 版安装

点击 “Docker Desktop Installer.exe”文件,开始安装。
在这里插入图片描述

图2 选择默认配置即可

在这里插入图片描述
图3 安装完成

2)macOS 版安装

macOS 桌面版本的按照其实非常简单,双击执行 docker.dmg 文件,弹出下面的窗口,将图标拖到 Applications 下即可。
在这里插入图片描述

图4 macOS 桌面版安装

4 小试 Dockerfile 编译及测试

在本博客的第2部分“2 关于 Dockerfile”里,我们介绍了 Dockerfile 的基本语法,以及创建 Docker 镜像所要用到的 build 命令。下面我们通过一个简单的示例来演示 Dockerfile 的使用。
首先,点击 Docker 图标,进入 Docker 桌面版。
在这里插入图片描述

图5 点击 Docker 图标,进入桌面版

备注:Windows 桌面版和 macOS 桌面版的操作基本一样,下面以 macOS 桌面版为例演示

4.1 创建一个简单的 Dockerfile

# 此 Dockerfile 以引用官方的轻量级基础镜像作为示例

# 使用官方的轻量级基础镜像
FROM busybox
 
# 当容器启动时运行 echo 命令
CMD ["echo", "Hello World"]

此 Dockerfile 的功能很简单,在文件的注释里描述得很清楚。

4.2 编译生成和查看镜像

1)编译生成镜像

将 Dockerfile 文件保存到本地(注意文件名为 Dockerfile ),并以命令行进入到该目录。
执行 docker build -t hello-world .(注意最后有个“点”)命令,即可编译出名为 hello-world 的 Docker 镜像。

2)查看镜像

进入 Docker 桌面版,
点击 Images 菜单,即可看到 hello-world 镜像。
在这里插入图片描述

图6 查看 hello-world 镜像

4.3 运行镜像并查看容器

1)运行镜像,生成容器

执行 docker run -itd --name hello-world hello-world 命令,即可生成名为 hello-world 的容器。

2)查看容器

进入 Docker 桌面版,点击 Containers 菜单,即可看到 hello-world 容器。
在这里插入图片描述

图7 查看 hello-world 容器

点击logs,可以看到容器输出的日志信息:Hello World,说明 Dockerfile 的 CMD 命令执行成功。
在这里插入图片描述

图8 查看 CMD 命令输出的 Hello World 信息

4.4 删除镜像和容器

1)删除容器

执行 docker rm -f hello-world 命令,即可删除 hello-world 容器。

-f 表示强制删除容器,即使是运行状态下的容器也可以删除

2)删除镜像

执行 docker rmi hello-world 命令,即可删除 hello-world 镜像。

只有在删除该镜像的容器之后,才能删除镜像。

下一节内容介绍 —— 实现alpine+jre的镜像
简要介绍一下 alpine 镜像,并在引入的 alpine 镜像基础上安装 JRE,使镜像拥有 java 运行环境。


上一篇:手搓 Docker Image Creator(DIC)工具(01):前言

下一篇:待续…


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/506201.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Open3D(C++) 基于随机抽样与特征值法的点云平面稳健拟合方法

目录 一、算法原理1、论文概述2、参考文献二、代码实现三、结果展示四、测试数据本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的GPT爬虫。 一、算法原理 1、论文概述 针对点云数据含有异常值且传统拟合方法拟合结果不理想的情…

《自动机理论、语言和计算导论》阅读笔记:p115-p138

《自动机理论、语言和计算导论》学习第 6 天&#xff0c;p115-p138 总结&#xff0c;总计 24 页。 一、技术总结 1.associativity and comutativity (1)commutativity(交换性): Commutativity is the property of an operator that says we can switch the order of its ope…

Acwing-3418 杨辉三角形

关于杨辉三角形的一些规律&#xff08;更详细地去看参考&#xff09;&#xff1a; 下面这些图都来自其他人所做图片 因为杨辉三角形是对称的&#xff0c;并且与二项式有关&#xff1a; 将左半部分(左半部分的编号肯定比右半部分小&#xff0c;不考虑右半部分&#xff09;一个斜…

如何区分相对路径 与 绝对路径?

在网页中有很多需要使用我们URL路径的场景&#xff0c;包括a标签的href、link标签的href、script标签的src、imag标签的src、form中的action、ajax请求的url等等等等。它们都可以使用相对路径和绝对路径来引入文件&#xff0c;那么&#xff0c;我们如何区分相对路径与绝对路径呢…

MATLAB | 绘图复刻(十六) | 弦图2.1.0版本更新——弦末端弧形块颜色单独设置

Hey, 本人自主开发的弦图绘制工具迎来2.1.0版本了&#xff1a;起因是有粉丝问我前两天发布的文章中这张图咋画&#xff1a; 我本来一想我开发的工具画弦图还是很简单的哇&#xff08;下面文章中有基本用法&#xff09; https://slandarer.blog.csdn.net/article/details/126458…

Vue tree自定义滚动条位置

贴一张效果图&#xff0c;我的效果不方便贴出来 实现支持&#xff1a; 1、懒加载 2、普通加载 下面贴关键思想&#xff1a; document有一个获取element元素的方法。 let element document.getElementById(tree); let arr document.querySelectorAll(".nodelModel&quo…

编曲知识15:重复段落编写 尾奏编写 家庭工作室搭建 硬件设备使用常识

15 重复段落编写 尾奏编写 家庭工作室搭建 硬件设备使用常识小鹅通-专注内容付费的技术服务商https://app8epdhy0u9502.pc.xiaoe-tech.com/live_pc/l_6602a586e4b0694cc051476b?course_id=course_2XLKtQnQx9GrQHac7OPmHD9tqbv 重复段落设计 第二段落指代间奏过后的段落 第二…

uniapp 小程序发布体验版 http://198.18.0.1:7001 不在以下 request 合法域名列表中(踩坑记录二)

问题一&#xff1a; 小程序发布体验版时出现报错信息&#xff1a; http://198.18.0.1:7001 不在以下 request 合法域名列表中无法连接uniCloud本地调试服务&#xff0c;请检查当前客户端是否与主机在同一局域网下 解决方案&#xff1a; 请务必在HBuilderX内使用【发行】菜单打…

上位机图像处理和嵌入式模块部署(qmacvisual寻找圆和寻找直线)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面有几篇文章&#xff0c;我们谈到过直线拟合、圆拟合和椭圆拟合。当时&#xff0c;我们的做法是&#xff0c;先找到了轮廓&#xff0c;接着找到…

C++多线程:单例模式与共享数据安全(七)

1、单例设计模式 单例设计模式&#xff0c;使用的频率比较高&#xff0c;整个项目中某个特殊的类对象只能创建一个 并且该类只对外暴露一个public方法用来获得这个对象。 单例设计模式又分懒汉式和饿汉式&#xff0c;同时对于懒汉式在多线程并发的情况下存在线程安全问题 饿汉…

稀碎从零算法笔记Day35-LeetCode:字典序的第K小数字

要考虑完结《稀碎从零》系列了哈哈哈 这道题和【LC.42 接雨水】&#xff0c;我愿称之为【笔试界的颜良&文丑】 题型&#xff1a;字典树、前缀获取、数组、树的先序遍历 链接&#xff1a;440. 字典序的第K小数字 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1…

el-upload上传图片图片、el-load默认图片重新上传、el-upload初始化图片、el-upload编辑时回显图片

问题 我用el-upload上传图片&#xff0c;再上一篇文章已经解决了&#xff0c;el-upload上传图片给SpringBoot后端,但是又发现了新的问题&#xff0c;果然bug是一个个的冒出来的。新的问题是el-upload编辑时回显图片的保存。 问题描述&#xff1a;回显图片需要将默认的 file-lis…

从0配置React

在本地安装和配置React项目&#xff0c;您可以使用create-react-app这个官方推荐的脚手架工具。以下是安装React的步骤&#xff0c;包括安装Node.js、使用create-react-app创建React应用&#xff0c;以及启动开发服务器。 下载安装node.js运行以下命令&#xff0c;验证Node.js…

施耐德 Unity Pro PLC 编程软件介绍

Unity Pro 软件基本介绍 Unity Pro 是施耐德中大型 PLC 的编程软件&#xff08;<–> 对应西门子 Step7&#xff09; 支持的 PLC&#xff1a;施耐德中大型 PLC 中型 PLC&#xff1a;Premium、M340&#xff08;<–> 对应西门子 S7-300、S7-1200&#xff09;大型 PL…

精读 Generating Mammography Reports from Multi-view Mammograms with BERT

精读&#xff08;非常推荐&#xff09; Generating Mammography Reports from Multi-view Mammograms with BERT&#xff08;上&#xff09; 这里的作者有个叫 Ilya 的吓坏我了 1. Abstract Writing mammography reports can be errorprone and time-consuming for radiolog…

C++项目——集群聊天服务器项目(十)点对点聊天业务

本节来实现C集群聊天服务器项目中的点对点聊天业务&#xff0c;一起来试试吧 一、点对点聊天业务 聊天服务器中一个重要的功能就是实现点对点聊天&#xff0c;客户端发送的信息包含聊天业务msgid、自身 的id和姓名、聊天对象的id号以及聊天信息&#xff0c;例如&#xff1a; …

uniapp uni.scss中使用@mixin混入,在文件引入@include 样式不生效 Error: Undefined mixin.(踩坑记录一)

问题&#xff1a; 在uni.scss文件定义mixin 2. 在vue文件引入: 3. 出现报错信息: 4. 问题思考&#xff1a; 是不是需要引入uni.scss &#xff1f; 答案不需要 uni.scss是一个特殊文件&#xff0c;在代码中无需 import 这个文件即可在scss代码中使用这里的样式变量。uni-app的…

ubuntu23.10配置RUST开发环境

系统版本: gcc版本 下载rustup安装脚本: curl --proto https --tlsv1.2 https://sh.rustup.rs -sSf | sh下载完成后会自动执行 选择默认安装选项 添加cargo安装目录到环境变量 vim ~/.bashrc 默认已添加 使用环境变量立即生效 source ~/.bashrc 执行rust开发环境,在终端输入…

Vitepress部署到GitHub Pages,工作流

效果&#xff1a; 第一步&#xff1a; 部署 VitePress 站点 | VitePress 执行 npm run docs:build&#xff0c;npm run docs:preview&#xff0c;生成dist文件 第二步&#xff1a; 手动创建.gitignore文件&#xff1a; node_modules .DS_Store dist-ssr cache .cache .temp *…

KMP哈希算法

KMP算法 KMP算法是一种字符串匹配算法&#xff0c;用于匹配模式串P在文本串S中出现的所有位置。 例如S“ababac”,P"aba",那么出现的所有位置是1 3 KMP算法将原本O&#xff08;n^2&#xff09;的字符串匹配算法优化到了O&#xff08;n&#xff09;&#xff0c;其精…