手搓 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):前言

下一篇:待续…


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Effective Web】文件上传

文章目录 前言一、选择本地文件1.设计一个上传文件按钮2.FileReader读取文件内容 二、使用拖拽方式1.设计一个拖拽容器2.拖拽文件的相关事件回调 三、使用粘贴方式1.设计一个粘贴容器2.paste事件回调 四、总结 前言 前端无法像app一样直接操作本地文件&#xff0c;对本地文件的…

MTMT:构建比特币生态平行世界 打造铭文生态繁荣

近年来&#xff0c;随着铭文市场的火爆以及比特币ETF成功通过&#xff0c;比特币生态正经历着一场复兴&#xff0c;尤其是铭文市场作为新一代Web3的叙事&#xff0c;带来了全新的生产方式&#xff0c;可以预见&#xff0c;铭文就像流动性挖矿对于上一轮DeFi Summer的推动一样会…

vue watch 深度监听

vue2文档&#xff1a;API — Vue.js vue3文档&#xff1a;侦听器 | Vue.js watch 可以用来监听页面中的数据&#xff0c;但如果监听的源是对象或数组&#xff0c;则使用深度监听&#xff0c;强制深度遍历源&#xff0c;以便在深度变更时触发回调。 一&#xff0c;监听 <t…

蓝桥杯算法题-正则问题

问题描述 考虑一种简单的正则表达式&#xff1a; 只由 x ( ) | 组成的正则表达式。 小明想求出这个正则表达式能接受的最长字符串的长度。 例如 ((xx|xxx)x|(x|xx))xx 能接受的最长字符串是&#xff1a; xxxxxx&#xff0c;长度是 6。 输入格式 一个由 x()| 组成的正则表达式。…

ViveNAS性能调试笔记(一)

ViveNAS是一个开源的NAS文件服务软件&#xff0c;有一套独立自创的架构&#xff0c;ViveNAS希望能做到下面的目标&#xff1a; - 能支持混合使用高性能的介质(NVMe SSD)和低性能介质&#xff08;HDD&#xff0c;甚至磁带&#xff09;。做到性能、成本动态均衡。因此ViveNAS使用…

python 进程、线程、协程基本使用

1、进程、线程以及协程【1】进程概念【2】线程的概念线程的生命周期进程与线程的区别 【3】协程(Coroutines) 2、多线程实现【1】threading模块【2】互斥锁【3】线程池【4】线程应用 3、多进程实现4、协程实现【1】yield与协程【2】asyncio模块【3】3.8版本【4】aiohttp 1. 并发…

网络基础(二)——序列化与反序列化

目录 1、应用层 2、再谈“协议” 3、网络版计算器 Socket.hpp TcpServer.hpp ServerCal.hpp ServerCal.cc Protocol.hpp ClientCal.cc Log.hpp Makefile 1、应用层 我们程序员写的一个个解决我们实际问题&#xff0c;满足我们日常需求的网络程序&#xff0c;都是在…

AtCode DP专练A-P

链接&#xff1a;Educational DP Contest - AtCoder A - Frog 1 题意&#xff1a;有n个石头&#xff0c;从1石头出发&#xff0c;每次可以跳一格或者俩格&#xff0c;代价为俩个格子间的高度差 思路&#xff1a;对于第i个石头&#xff0c;可以从石头i-1和i-2得到&#xff0c…

31.Python从入门到精通—Python数据压缩 性能度量 测试模块

31.从入门到精通&#xff1a;Python数据压缩 性能度量 测试模块 个人简介数据压缩性能度量测试模块 个人简介 &#x1f3d8;️&#x1f3d8;️个人主页&#xff1a;以山河作礼。 &#x1f396;️&#x1f396;️:Python领域新星创作者&#xff0c;CSDN实力新星认证&#xff0c…

分类预测 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积长短期记忆网络多输入分类预测

分类预测 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积长短期记忆网络多输入分类预测 目录 分类预测 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积长短期记忆网络多输入分类预测效果一览基本介绍模型搭建程序设计参考资料 效果一览 基本介绍 MATLAB实现BO-CNN-LSTM贝叶斯优化卷积长短期记…

深度好文:解决Ubuntu 18.04安装nvidia显卡驱动,导致内核不匹配:无需重装系统修复内核

深度好文&#xff1a;解决Ubuntu 18.04安装nvidia显卡驱动&#xff0c;导致内核不匹配&#xff1a;无需重装系统修复内核 目录 一、问题描述二、尝试修复三、安装Nvidia驱动和CUDA并配置cuDNN四、总结 一、问题描述 昨天打算更新一下Ubuntu 18.04的显卡驱动&#xff0c;以支持…

Eclipse新建java类的操作流程

一、在左侧空白区域&#xff0c;点击鼠标右键。 二、点击new&#xff0c;选择Java Project &#xff08;由于这里不知道怎么截图&#xff0c;就用手机拍了一张&#xff0c;希望不要介意&#xff09; 三、 给project文件起个名字&#xff0c;其他都不用管&#xff0c;点击Finis…

云防护是怎么能帮助用户做好网络安全

在数字化时代&#xff0c;网络安全威胁呈现出愈发复杂和多样化的趋势。 无论是个人用户、小型企业还是大型企业&#xff0c;都面临着来自全球各地的网络攻击风险。这些攻击可能导致数据泄露、服务中断、财务损失甚至声誉受损。因此&#xff0c;采取有效的安全防护措施变得至关…

HarmonyOS 应用开发之Stage模型启动FA模型PageAbility

本小节介绍Stage模型的两种应用组件如何启动FA模型的PageAbility组件。 UIAbility启动PageAbility UIAbility启动PageAbility和UIAbility启动UIAbility的方式完全相同。 说明&#xff1a; 需注意FA模型中abilityName由bundleName AbilityName组成&#xff0c;具体见示例。 i…

不允许你不知道的 MySQL 优化实战(一)

文章目录 1、查询SQL尽量不要使用select *&#xff0c;而是select具体字段。2、如果知道查询结果只有一条或者只要最大/最小一条记录&#xff0c;建议用limit 13、应尽量避免在where子句中使用or来连接条件4、优化limit分页5、优化你的like语句6、使用where条件限定要查询的数据…

uniapp开发App(二)开通 微信授权登录功能(应用签名、证书、包名 全明白)

前言&#xff1a;开发App肯定要包含登陆&#xff0c;常用登陆方式很多&#xff0c;我选择微信登陆。 一、如何获得微信的授权登陆 答&#xff1a;申请&#xff0c;根据uniapp官网的提示有如下三个步骤 开通 1. 登录微信开放平台区&#xff0c;添加移动应用并提交审核&#xf…

C语言中的文件和文件操作

目录 为什么会有文件&#xff1f; 文件名 ⼆进制⽂件和⽂本⽂件&#xff1f; ⽂件的打开和关闭 流 标准流 ⽂件指针 ⽂件的打开和关闭 顺序读写函数介绍 对⽐⼀组函数&#xff1a; 文件的随机读写 fseek ftell rewind ⽂件读取结束的判定 被错误使⽤的 feof ⽂件…

PCL点云处理之重复随机采样一致性(RRANSAC法)平面拟合(二百三十七)

PCL点云处理之重复随机采样一致性(RRANSAC法)平面拟合(二百三十七) 一、算法介绍二、算法实现1.代码2.结果一、算法介绍 pcl::SAC_RRANSAC"是 PCL库中的一个方法,是 RANSAC 方法的改进版本,通过多次重复采样和模型拟合来提高鲁棒性。RRANSAC 的思想是在 RANSAC 的基…

基于深度学习的图书管理推荐系统(python版)

基于深度学习的图书管理推荐系统 1、效果图 1/1 [] - 0s 270ms/step [13 11 4 19 16 18 8 6 9 0] [0.1780757 0.17474999 0.17390694 0.17207369 0.17157653 0.168248440.1668652 0.16665359 0.16656876 0.16519257] keras_recommended_book_ids深度学习推荐列表 [9137…

Windows提权!!!

之前讲过一下提权&#xff0c;但是感觉有点不成体系&#xff0c;所以我们就成体系的来讲一下这个操作系统的提权 目录 Windows的提权 1.Widnows的内核溢出提权 1.MSF自带的提权模块&#xff08;Win11都能提上来&#xff0c;有点牛逼&#xff09; 2.CS的插件提权 3.补丁对比…