当前位置: 首页 > news >正文

详解 docker 镜像制作的两种方式

概要

制作Docker镜像一般有2种方法:

  1. 通过Dockerfile,完成镜像的创建
  2. 使用仓库中已有的镜像,安装自己使用的软件环境后完成新镜像创建

docker 常用命令

  1. docker build: 用于构建 Docker 镜像。该命令可以从 Dockerfile 构建镜像,也可以从 tar 包构建镜像。
  2. docker tag: 用于给镜像打上标签。该命令可以将镜像命名为指定的名称和标签,以便于在推送和使用镜像时进行识别和管理。
  3. docker push: 用于将本地的镜像推送到 Docker Hub 或其他 Docker 仓库。该命令需要先使用 docker login 命令进行登录认证。
  4. docker pull: 用于从 Docker Hub 或其他 Docker 仓库拉取镜像到本地计算机。该命令可以使用镜像名称和标签进行定位和拉取。
  5. docker history: 用于查看 Docker 镜像的历史记录。该命令可以查看镜像的创建过程、每一层的命令和大小等信息。
  6. docker inspect: 用于查看 Docker 容器和镜像的详细信息。该命令可以查看容器和镜像的元数据、配置、网络、存储等信息。
  7. docker save: 用于将 Docker 镜像保存为 tar 包。该命令可以将本地的镜像打包为 tar 包,以便于在其他计算机上部署和使用。
  8. docker load: 用于从 tar 包恢复 Docker 镜像。该命令可以将 tar 包中的 Docker 镜像恢复为本地镜像,以便于在本地计算机上使用。

通过Dockerfile制作镜像

制作 Docker 镜像的过程通常涉及编写一个 Dockerfile,它是一个文本文件,包含了一系列的指令,用来定义如何从一个基础镜像构建一个新的镜像。编写了 Dockerfile,就可以使用 docker build 命令来创建镜像。

以下是制作 Docker 镜像的基本步骤:

  1. 创建一个 Dockerfile
    在你的项目根目录下创建一个名为 Dockerfile 的文件(没有扩展名)。

  2. 定义基础镜像
    使用 FROM 指令开始你的 Dockerfile 来定义基础镜像。例如你正在创建一个 Python 应用的镜像,你可能会从官方的 Python 镜像开始:

    FROM python:3.8
    
  3. 设置工作目录
    使用 WORKDIR 指令设置容器内部的工作目录,所有后续的 RUNCOPYCMD 指令都会在这个目录下执行。

    WORKDIR /app
    
  4. 复制文件
    使用 COPY 指令将本地文件复制到镜像中。通常,你会复制应用代码和依赖文件(如 requirements.txt)。

    COPY . /app
    
  5. 安装依赖
    使用 RUN 指令安装应用所需的依赖。对于 Python 应用,你可能会需要运行 pip install

    RUN pip install --no-cache-dir -r requirements.txt
    
  6. 配置启动命令
    使用 CMD 指令设置容器启动时默认执行的命令。

    CMD ["python", "./your-app.py"]
    
  7. 构建镜像
    打开终端或命令行,导航到包含 Dockerfile 的目录,运行 docker build 命令,并为你的镜像设置一个标签(tag)。

    docker build -t your-image-name:tag .
    

    其中,. 表示当前目录,your-image-name:tag 是你给镜像设定的名字和标签。

  8. 运行容器
    构建完成后,你可以使用 docker run 命令来启动一个基于你新镜像的容器。

    docker run -d -p 5000:5000 your-image-name:tag
    

    这里 -d 表示后台运行,-p 5000:5000 表示将容器的 5000 端口映射到主机的 5000 端口。

在容器中安装软件制作新镜像

要在现有的 Docker 镜像基础上安装额外的软件,并创建一个新的镜像,你可以执行以下步骤:

  1. 启动一个容器
    从现有的镜像启动一个容器。这个镜像可以是你从 Docker Hub 或其他容器仓库中拉取的,也可以是你本地已有的镜像。使用 docker run 命令启动容器,并且进入交互式模式:

    docker run -it --name my_container existing_image_name bash
    

    其中 existing_image_name 是你要使用的现有镜像的名称,my_container 是新容器的名称,bash 是启动容器后运行的命令,它将提供一个 shell 给你。

  2. 安装软件
    在容器的命令行中,使用包管理器安装你需要的软件。对于基于 Debian 或 Ubuntu 的系统,你通常会使用 apt;对于基于 CentOS 的系统,你会使用 yum。例如:

    apt update
    apt install -y your_software
    

    其中 your_software 是你想要安装的软件包名。

  3. 退出容器
    安装完成后,你可以通过键入 exit 或按 Ctrl+D 来退出容器。

  4. 创建新镜像
    使用 docker commit 命令从修改过的容器中创建一个新的镜像:

    docker commit my_container new_image_name
    

    其中 my_container 是你之前创建的容器的名称,new_image_name 是你要创建的新镜像的名称。

  5. 测试新镜像
    启动一个基于新镜像的容器来测试你的软件环境是否如预期工作:

    docker run -it new_image_name bash
    

    现在你可以运行测试命令来确认软件包已正确安装。

  6. 推送镜像到仓库(可选)
    如果你想要将制作好的镜像推送到 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 泛型类名称<类型形参列表> {//这里可以使用类型参数…...

具备闭环思维的测试才更充分

测试工作的终极目标是为了保障产品的质量。如果用同一个维度衡量测试人员的业务水平&#xff0c;简单粗暴一些&#xff1a;那就是针对同一款产品&#xff0c;哪个测试人员发现的bug多&#xff0c;哪个测试人员的测试理论与实践水平相对来说还是高一些。 前两天组长在群里分析了…...

flask web学习之模板(一)

文章目录 一、模板基本用法1.1 定界符1.2 模板语法1.3 渲染模板 二、模板辅助工具2.1 上下文2.2 全局对象2.3 过滤器2.4 测试器2.5 模板环境对象 在动态web程序中&#xff0c;视图函数返回的HTML数据往往需要根据相应的变量&#xff08;比如查询参数&#xff09;动态生成。当HT…...

RedisInsight - Redis官方可视化工具

一、RedisInsight 简介 RedisInsight 是一个直观高效的 Redis GUI 管理工具&#xff0c;它可以对 Redis 的内存、连接数、命中率以及正常运行时间进行监控&#xff0c;并且可以在界面上使用 CLI 和连接的 Redis 进行交互&#xff08;RedisInsight 内置对 Redis 模块支持&#…...

Matlab定义函数计算斐波那契数列

以下是使用 MATLAB 定义函数计算并输出斐波那契数列前 200 个数的示例代码&#xff1a; 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层模型&#xff1f; 什么是TCP/IP 四层模型&#xff1f; 为什么网络要分层&#xff1f; 应用层有哪些常见的协议&#xff1f; 传输层有哪些常见的协议&#xff1f; 网络层有哪些常见的协议&#xff1f; 从输入…...

视频转为序列图的软件,让视频批量转为序列图

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

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

适应性Java用于现代 API:REST、GraphQL 和事件驱动

在快速发展的软件开发领域&#xff0c;REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名&#xff0c;不断适应这些现代范式的需求。随着不断发展的生态系统&#xff0c;Java 在现代 API 方…...

【LeetCode】算法详解#6 ---除自身以外数组的乘积

1.题目介绍 给定一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O…...

WEB3全栈开发——面试专业技能点P4数据库

一、mysql2 原生驱动及其连接机制 概念介绍 mysql2 是 Node.js 环境中广泛使用的 MySQL 客户端库&#xff0c;基于 mysql 库改进而来&#xff0c;具有更好的性能、Promise 支持、流式查询、二进制数据处理能力等。 主要特点&#xff1a; 支持 Promise / async-await&#xf…...

数据分析六部曲?

引言 上一章我们说到了数据分析六部曲&#xff0c;何谓六部曲呢&#xff1f; 其实啊&#xff0c;数据分析没那么难&#xff0c;只要掌握了下面这六个步骤&#xff0c;也就是数据分析六部曲&#xff0c;就算你是个啥都不懂的小白&#xff0c;也能慢慢上手做数据分析啦。 第一…...

2.2.2 ASPICE的需求分析

ASPICE的需求分析是汽车软件开发过程中至关重要的一环&#xff0c;它涉及到对需求进行详细分析、验证和确认&#xff0c;以确保软件产品能够满足客户和用户的需求。在ASPICE中&#xff0c;需求分析的关键步骤包括&#xff1a; 需求细化&#xff1a;将从需求收集阶段获得的高层需…...

「Java基本语法」变量的使用

变量定义 变量是程序中存储数据的容器&#xff0c;用于保存可变的数据值。在Java中&#xff0c;变量必须先声明后使用&#xff0c;声明时需指定变量的数据类型和变量名。 语法 数据类型 变量名 [ 初始值]; 示例&#xff1a;声明与初始化 public class VariableDemo {publi…...

python可视化:俄乌战争时间线关键节点与深层原因

俄乌战争时间线可视化分析&#xff1a;关键节点与深层原因 俄乌战争是21世纪欧洲最具影响力的地缘政治冲突之一&#xff0c;自2022年2月爆发以来已持续超过3年。 本文将通过Python可视化工具&#xff0c;系统分析这场战争的时间线、关键节点及其背后的深层原因&#xff0c;全面…...

react-pdf(pdfjs-dist)如何兼容老浏览器(chrome 49)

之前都是使用react-pdf来渲染pdf文件&#xff0c;这次有个需求是要兼容xp环境&#xff0c;xp上chrome最高支持到49&#xff0c;虽然说iframe或者embed都可以实现预览pdf&#xff0c;但为了后续的定制化需求&#xff0c;还是需要使用js库来渲染。 chrome 49测试环境 能用的测试…...

Qt/C++学习系列之列表使用记录

Qt/C学习系列之列表使用记录 前言列表的初始化界面初始化设置名称获取简单设置 单元格存储总结 前言 列表的使用主要基于QTableWidget控件&#xff0c;同步使用QTableWidgetItem进行单元格的设置&#xff0c;最后可以使用QAxObject进行单元格的数据读出将数据进行存储。接下来…...