详解 docker 镜像制作的两种方式
概要
制作Docker镜像一般有2种方法:
- 通过Dockerfile,完成镜像的创建
- 使用仓库中已有的镜像,安装自己使用的软件环境后完成新镜像创建
docker 常用命令
- docker build: 用于构建 Docker 镜像。该命令可以从 Dockerfile 构建镜像,也可以从 tar 包构建镜像。
- docker tag: 用于给镜像打上标签。该命令可以将镜像命名为指定的名称和标签,以便于在推送和使用镜像时进行识别和管理。
- docker push: 用于将本地的镜像推送到 Docker Hub 或其他 Docker 仓库。该命令需要先使用 docker login 命令进行登录认证。
- docker pull: 用于从 Docker Hub 或其他 Docker 仓库拉取镜像到本地计算机。该命令可以使用镜像名称和标签进行定位和拉取。
- docker history: 用于查看 Docker 镜像的历史记录。该命令可以查看镜像的创建过程、每一层的命令和大小等信息。
- docker inspect: 用于查看 Docker 容器和镜像的详细信息。该命令可以查看容器和镜像的元数据、配置、网络、存储等信息。
- docker save: 用于将 Docker 镜像保存为 tar 包。该命令可以将本地的镜像打包为 tar 包,以便于在其他计算机上部署和使用。
- docker load: 用于从 tar 包恢复 Docker 镜像。该命令可以将 tar 包中的 Docker 镜像恢复为本地镜像,以便于在本地计算机上使用。
通过Dockerfile制作镜像
制作 Docker 镜像的过程通常涉及编写一个 Dockerfile
,它是一个文本文件,包含了一系列的指令,用来定义如何从一个基础镜像构建一个新的镜像。编写了 Dockerfile
,就可以使用 docker build
命令来创建镜像。
以下是制作 Docker 镜像的基本步骤:
-
创建一个 Dockerfile:
在你的项目根目录下创建一个名为Dockerfile
的文件(没有扩展名)。 -
定义基础镜像:
使用FROM
指令开始你的Dockerfile
来定义基础镜像。例如你正在创建一个 Python 应用的镜像,你可能会从官方的 Python 镜像开始:FROM python:3.8
-
设置工作目录:
使用WORKDIR
指令设置容器内部的工作目录,所有后续的RUN
、COPY
和CMD
指令都会在这个目录下执行。WORKDIR /app
-
复制文件:
使用COPY
指令将本地文件复制到镜像中。通常,你会复制应用代码和依赖文件(如requirements.txt
)。COPY . /app
-
安装依赖:
使用RUN
指令安装应用所需的依赖。对于 Python 应用,你可能会需要运行pip install
。RUN pip install --no-cache-dir -r requirements.txt
-
配置启动命令:
使用CMD
指令设置容器启动时默认执行的命令。CMD ["python", "./your-app.py"]
-
构建镜像:
打开终端或命令行,导航到包含Dockerfile
的目录,运行docker build
命令,并为你的镜像设置一个标签(tag)。docker build -t your-image-name:tag .
其中,
.
表示当前目录,your-image-name:tag
是你给镜像设定的名字和标签。 -
运行容器:
构建完成后,你可以使用docker run
命令来启动一个基于你新镜像的容器。docker run -d -p 5000:5000 your-image-name:tag
这里
-d
表示后台运行,-p 5000:5000
表示将容器的 5000 端口映射到主机的 5000 端口。
在容器中安装软件制作新镜像
要在现有的 Docker 镜像基础上安装额外的软件,并创建一个新的镜像,你可以执行以下步骤:
-
启动一个容器:
从现有的镜像启动一个容器。这个镜像可以是你从 Docker Hub 或其他容器仓库中拉取的,也可以是你本地已有的镜像。使用docker run
命令启动容器,并且进入交互式模式:docker run -it --name my_container existing_image_name bash
其中
existing_image_name
是你要使用的现有镜像的名称,my_container
是新容器的名称,bash
是启动容器后运行的命令,它将提供一个 shell 给你。 -
安装软件:
在容器的命令行中,使用包管理器安装你需要的软件。对于基于 Debian 或 Ubuntu 的系统,你通常会使用apt
;对于基于 CentOS 的系统,你会使用yum
。例如:apt update apt install -y your_software
其中
your_software
是你想要安装的软件包名。 -
退出容器:
安装完成后,你可以通过键入exit
或按Ctrl+D
来退出容器。 -
创建新镜像:
使用docker commit
命令从修改过的容器中创建一个新的镜像:docker commit my_container new_image_name
其中
my_container
是你之前创建的容器的名称,new_image_name
是你要创建的新镜像的名称。 -
测试新镜像:
启动一个基于新镜像的容器来测试你的软件环境是否如预期工作:docker run -it new_image_name bash
现在你可以运行测试命令来确认软件包已正确安装。
-
推送镜像到仓库(可选):
如果你想要将制作好的镜像推送到 Docker Hub 或其他 Docker 镜像仓库,你需要使用docker tag
来标记镜像,并使用docker push
来推送:docker tag new_image_name your_dockerhub_username/new_image_name:tag docker push your_dockerhub_username/new_image_name:tag
确保你已登录到 Docker Hub(或其他仓库),并将
your_dockerhub_username
替换为你的用户名,tag
替换为你的镜像标签。
以上就是制作 Docker 镜像的基本步骤。制作镜像时,可能需要根据你的应用需求添加额外的配置,如环境变量、数据卷、网络配置等。请参考官方 Docker 文档以获取更多详细信息和最佳实践。
相关文章:
详解 docker 镜像制作的两种方式
概要 制作Docker镜像一般有2种方法: 通过Dockerfile,完成镜像的创建使用仓库中已有的镜像,安装自己使用的软件环境后完成新镜像创建 docker 常用命令 docker build: 用于构建 Docker 镜像。该命令可以从 Dockerfile 构建镜像,…...
selenium元素单击不稳定解决方法
selenium自动化测试过程中,经常会发现某一元素单击,很不稳定,有时候执行了点击没有反映。 以下总结两种解决方法:都是通过js注入的方式去点击。 1.F12查一看,要点击的按钮,或连接,有没有οncl…...
vue3中vite使用sass
引用:https://blog.csdn.net/weiliang_66/article/details/132469597 npm install sass -d配置vite.config.js: css: {preprocessorOptions: {scss: {additionalData:import "/assets/styles/main.scss";}}}创建对应的 main.sass...

centos 8.0 安装sysbench 1.0.17
序号步骤说明执行命令执行结果备注1 下载并解压sysbench-1.0.17.zip sysbench-1.0.17.zip2安装依赖文件 yum install automake libtool -y yum install /usr/include/libpq-fe.h 3安装sysbench cd sysbench-1.0.17 ./autogen.sh ./configure \ --prefix/sysbench \ --with-pgsq…...

LabVIEW开发分布式光纤油气管道泄漏检测及预警系统
LabVIEW开发分布式光纤油气管道泄漏检测及预警系统 随着油气工业的发展,管道泄漏成为一个严峻的安全问题。本文介绍了一种基于LabVIEW的分布式光纤油气管道泄漏检测及预警系统的设计思路和组成结构。系统包括硬件和软件两部分,其中硬件部分详细阐述了分…...

Go后端开发 -- Go Modules
Go后端开发 – Go Modules 文章目录 Go后端开发 -- Go Modules一、什么是Go Modules?二、GOPATH的工作模式1.GOPATH模式2.GOPATH模式的弊端 三、Go Modules模式创建项目1.go mod命令2.go mod环境变量3.使用Go Modules初始化项目4.修改模块的版本依赖关系 四、Go Modules下impo…...
基于det_keypoint_unite的ROS功能包(jetson部署)
文章目录 硬件软件FastDeploy编译CMakeLists.txt头文件源代码硬件 Jetson AGX Orin 64GB 软件 gcc/g++ >= 5.4(推荐8.2)cmake >= 3.10.0jetpack >= 4.6.1opencv=4.2.0FastDeploy编译 git clone https://github.com/PaddlePaddle/FastDeploy.git cd FastDeploy mkdi…...

TS 36.211 V12.0.0-下行(8)-调制和上变频
本文的内容主要涉及TS 36.211,版本是C00,也就是V12.0.0。...

基于SSM酒店后台管理系统【源码】【最详细运行文档】
基于SSM酒店后台管理系统【源码】【最详细运行文档】 功能简介技术描述运行准备♝项目运行访问项目 演示图✅源码获取 💡 「分享」 大家好,最近几年在酒店后台管理系统非常流行,无论是上课的项目或者是一些毕设都会以酒店后台管理系统举例说…...

利用Python实现每日新闻早报推送
本文将介绍如何使用Python编写简单的逻辑,通过调用API接口实现每日新闻推送功能。 步骤: 导入所需的库: 在代码的开头,我们需要导入所需的库。通常,我们会使用requests库来发送HTTP请求,以获取新闻数据。 …...

图像分割-Grabcut法
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 本文的C#版本请访问:图像分割-Grabcut法(C#)-CSDN博客 GrabCut是一种基于图像分割的技术,它可以用于将图像…...

性能测试浅谈
早期的性能测试更关注后端服务的处理能力。 一个用户去访问一个页面的请求过程,如上图。 数据传输时间 当你从浏览器输入网址,敲下回车,开始... 真实的用户场景请不要忽视数据传输时间,想想你给远方的朋友写信,信件需…...
媒体运营常用的ChatGPT通用提示词模板
媒体平台选择:如何选择合适的媒体平台,确保内容的有效传播? 内容策划与创作:如何策划和创作高质量的内容,吸引和留住目标受众? 内容发布与推广:如何有效地发布和推广内容,提高内容…...
Java学习苦旅(二十一)——泛型
本篇博客将详细讲解Java中的泛型。 文章目录 泛型的定义语法示例 泛型类语法示例类型边界语法示例 类型擦除通配符语法示例上界语法示例 下界语法示例 裸类型泛型方法语法示例 泛型的限制结尾 泛型的定义 语法 class 泛型类名称<类型形参列表> {//这里可以使用类型参数…...
具备闭环思维的测试才更充分
测试工作的终极目标是为了保障产品的质量。如果用同一个维度衡量测试人员的业务水平,简单粗暴一些:那就是针对同一款产品,哪个测试人员发现的bug多,哪个测试人员的测试理论与实践水平相对来说还是高一些。 前两天组长在群里分析了…...
flask web学习之模板(一)
文章目录 一、模板基本用法1.1 定界符1.2 模板语法1.3 渲染模板 二、模板辅助工具2.1 上下文2.2 全局对象2.3 过滤器2.4 测试器2.5 模板环境对象 在动态web程序中,视图函数返回的HTML数据往往需要根据相应的变量(比如查询参数)动态生成。当HT…...

RedisInsight - Redis官方可视化工具
一、RedisInsight 简介 RedisInsight 是一个直观高效的 Redis GUI 管理工具,它可以对 Redis 的内存、连接数、命中率以及正常运行时间进行监控,并且可以在界面上使用 CLI 和连接的 Redis 进行交互(RedisInsight 内置对 Redis 模块支持&#…...
Matlab定义函数计算斐波那契数列
以下是使用 MATLAB 定义函数计算并输出斐波那契数列前 200 个数的示例代码: function result fibonacci(n)if n < 1 || n > 200result NaN;elseif n 1 || n 2result 1;elseresult fibonacci(n-1) fibonacci(n-2);end endn 200; result fibonacci(n)…...
计算机网络面试题总结
总结自Network | JavaGuide(Java面试 学习指南) 什么是OSI7层模型? 什么是TCP/IP 四层模型? 为什么网络要分层? 应用层有哪些常见的协议? 传输层有哪些常见的协议? 网络层有哪些常见的协议? 从输入…...

视频转为序列图的软件,让视频批量转为序列图
你是否曾经遇到过这样的困境:需要将一段视频转为一系列的图片,但却没有合适的工具来完成?或许你曾经手动截图,或者用其他方式,但结果往往不尽如人意,图片质量差、色彩失真、画面不清晰。现在,让…...

网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...

力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...

uniapp 小程序 学习(一)
利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 :开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置,将微信开发者工具放入到Hbuilder中, 打开后出现 如下 bug 解…...