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

news2024/11/24 3:47:44

此节主要简单介绍一下 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):前言

下一篇:手搓Docker-Image-Creator(DIC)工具(03):实现alpine+jre的镜像


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

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

相关文章

非关系型数据库-----------Redis的主从复制、哨兵模式

目录 一、redis群集有三种模式 1.1主从复制、哨兵、集群的区别 1.1.1主从复制 1.1.2哨兵 1.1.3集群 二、主从复制 2.1主从复制概述 2.2主从复制的作用 ①数据冗余 ②故障恢复 ③负载均衡 ④高可用基石 2.3主从复制流程 2.4搭建redis主从复制 2.4.1环境准备 2.4…

hadoop在linux上启动成功了,但是浏览器访问不了

根据网上的资料进行安装hadoop的伪集群 都安装成功&#xff0c;并且启动也成功了&#xff0c;如下图所示&#xff1a; 2、但是在浏览器上确是怎么也访问不了&#xff0c; 解决思路&#xff0c; 2.1、根据网上的一些文章处理解决是关闭防火墙&#xff0c; 2.1.1、我根据操作步骤…

unity工程输出的log在哪里?

在编辑器里进行活动输出的log位置&#xff1a; C:\Users\username\AppData\Local\Unity\Editor\Editor.log ------------------------------------ 已经打包完成&#xff0c;形成的exe运行后的log位置&#xff1a; C:\Users\xxx用户\AppData\LocalLow\xx公司\xx项目

manga-ocr漫画日文ocr

github 下载 解压 anaconda新建环境 conda create -n manga_ocr python3.8 激活环境 conda activate manga_ocr cd到解压目录 cd /d manga-ocr-master 安装依赖包 pip install -r requirements.txt pip3 install manga-ocr 下载离线model huggingface 123云盘 解压到一个目录…

Python爬虫详解:原理、常用库与实战案例

前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff1a;https://www.captainbed.cn/z ChatGPT体验地址 文章目录 前言引言&#xff1a;一、爬虫原理1. HTTP请求与响应过程2. 常用爬虫技术 二、P…

回溯算法 DFS

目录 回溯算法和dfs的区别回溯算法基本框架例题&#xff1a;【1,2&#xff0c;3】的全排列代码详解完整代码 DFS 本文思路、代码均参考于&#xff1a;https://labuladong.online/algo/essential-technique/backtrack-framework-2/#%E4%B8%80%E3%80%81%E5%85%A8%E6%8E%92%E5%88%…

搭建 Qt 开发环境

&#x1f40c;博主主页&#xff1a;&#x1f40c;​倔强的大蜗牛&#x1f40c;​ &#x1f4da;专栏分类&#xff1a;QT❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、QT SDK 的下载和安装 1.QT SDK 的下载 二、QT SDK的安装 1、找到下载的文件并双击 2、双击之…

【项目实战经验】DataKit迁移MySQL到openGauss(上)

前言 本文将分享DataKit迁移MySQL到openGauss的项目实战&#xff0c;供广大openGauss爱好者参考。 1. 下载操作系统 https://www.openeuler.org/zh/download https://support.huawei.com/enterprise/zh/doc/EDOC1100332931/1a643956 https://support.huawei.com/enterprise…

VMware虚拟机三种网络模式配置

vmware有三种网络工作模式&#xff1a;Bridged&#xff08;桥接模式&#xff09;、NAT&#xff08;网络地址转换模式&#xff09;、Host-Only&#xff08;仅主机模式&#xff09;。 1. 打开网络编辑器&#xff08;编辑 --> 虚拟网络编辑器&#xff09; 在主机上有VMware Ne…

LeetCode-19. 删除链表的倒数第 N 个结点【链表 双指针】

LeetCode-19. 删除链表的倒数第 N 个结点【链表 双指针】 题目描述&#xff1a;解题思路一&#xff1a;双指针解题思路二&#xff1a;优化解题思路三&#xff1a;0 题目描述&#xff1a; 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。…

hexo博客7:构建简单的多层安全防御体系

【hexo博客7】构建简单的多层安全防御体系 写在最前面理解全面安全策略的重要性防御常见的网络攻击1. SQL注入攻击2. 文件上传漏洞3. 跨站脚本攻击&#xff08;XSS&#xff09;4. 跨站请求伪造&#xff08;CSRF&#xff09;5. 目录遍历/本地文件包含&#xff08;LFI/RFI&#x…

CRMEB 标准版 v5.3公测版发布,快来体验

演示站 后台&#xff1a;http://v5.crmeb.net/admin 账号&#xff1a;demo 密码&#xff1a;crmeb.com H5端&#xff1a;http://v5.crmeb.net 新增功能 后台支持所有功能设置搜索 事业部&#xff1a;想在事业部添加代理商&#xff0c;可以在后台选择添加员工&#xff0c;设…

【c++】STl-list使用list模拟实现

主页&#xff1a;醋溜马桶圈-CSDN博客 专栏&#xff1a;c_醋溜马桶圈的博客-CSDN博客 gitee&#xff1a;mnxcc (mnxcc) - Gitee.com 目录 1. list的介绍及使用 1.1 list的介绍 1.2 list的使用 1.2.1 list的构造 1.2.2 list iterator的使用 1.2.3 list capacity 1.2.4 …

算法学习 | day34/60 不同路径/不同路径II

一、题目打卡 1.1 不同路径 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 拿到手&#xff0c;首先见到答案需要求的是种类的个数&#xff0c;并且看题目&#xff0c;每次移动的时候只有两个方向&#xff0c;这也就说明&#xff0c;对于某一个位置来说&#x…

[已解决]Vue3+Element-plus使用el-dialog对话框无法显示

文章目录 问题发现原因分析解决方法 问题发现 点击按钮&#xff0c;没有想要的弹框 代码如下 修改 el-dialog到body中&#xff0c;还是不能显示 原因分析 使用devtool中vue工具进行查看组件结构 原因在于&#xff0c;在一个局部组件(Detail->ElTabPane->…)中使用…

C++初阶:list类及模拟实现

list的介绍及使用 list的介绍 list 1. list 是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。 2. list 的底层是双向链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中通过指针指向…

代码随想录算法训练营第二十二天| 235.二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点

系列文章目录 目录 系列文章目录235. 二叉搜索树的最近公共祖先①递归法自己写的简洁版 ②迭代法不能这样写&#xff01;正确写法 701.二叉搜索树中的插入操作①递归法②迭代法 450.删除二叉搜索树中的节点递归法 235. 二叉搜索树的最近公共祖先 ①递归法 自己写的 class So…

【C+ +】第一个C+ + 项目的创建及namespace命名空间解释C++中的输入输出

目录 1.创建第一个c项目 1.1项目创建 1.2 .cpp源文件建立 1.3 第一个c程序hello world对比c语言hello world 2.命名空间 2.1 C关键字 2.2 命名空间---解决c语言中的命名冲突 2.2.1 namespace命名空间用法 2.2.2 &#xff1a;&#xff1a; 预作用限定符 2.2.3 命名空间的嵌套…

SCI一区 | Matlab实现BES-TCN-BiGRU-Attention秃鹰算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测

SCI一区 | Matlab实现BES-TCN-BiGRU-Attention秃鹰算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测 目录 SCI一区 | Matlab实现BES-TCN-BiGRU-Attention秃鹰算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测预测效果基本介绍模型描述程序…

rasa trian 报错解决---Project validation completed with errors.

rasa train 过程中&#xff1a;出现一下问题&#xff1b; Project validation completed with errors. 解决措施:python 3.10版本&#xff0c;rasa 3.6.19, 降低版本 pip3 install rasa3.5.17 -i https://pypi.tuna.tsinghua.edu.cn/simple成功解决