当前位置: 首页 > 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;让…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题&#xff1a; 指定音频引擎与设备&#xff1b;播放音频文件 本文所使用的环境&#xff1a; Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

群晖NAS如何在虚拟机创建飞牛NAS

套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...

wpf在image控件上快速显示内存图像

wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像&#xff08;比如分辨率3000*3000的图像&#xff09;的办法&#xff0c;尤其是想把内存中的裸数据&#xff08;只有图像的数据&#xff0c;不包…...

stm32wle5 lpuart DMA数据不接收

配置波特率9600时&#xff0c;需要使用外部低速晶振...

【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL

ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...

es6+和css3新增的特性有哪些

一&#xff1a;ECMAScript 新特性&#xff08;ES6&#xff09; ES6 (2015) - 革命性更新 1&#xff0c;记住的方法&#xff0c;从一个方法里面用到了哪些技术 1&#xff0c;let /const块级作用域声明2&#xff0c;**默认参数**&#xff1a;函数参数可以设置默认值。3&#x…...

Visual Studio Code 扩展

Visual Studio Code 扩展 change-case 大小写转换EmmyLua for VSCode 调试插件Bookmarks 书签 change-case 大小写转换 https://marketplace.visualstudio.com/items?itemNamewmaurer.change-case 选中单词后&#xff0c;命令 changeCase.commands 可预览转换效果 EmmyLua…...

在 Visual Studio Code 中使用驭码 CodeRider 提升开发效率:以冒泡排序为例

目录 前言1 插件安装与配置1.1 安装驭码 CodeRider1.2 初始配置建议 2 示例代码&#xff1a;冒泡排序3 驭码 CodeRider 功能详解3.1 功能概览3.2 代码解释功能3.3 自动注释生成3.4 逻辑修改功能3.5 单元测试自动生成3.6 代码优化建议 4 驭码的实际应用建议5 常见问题与解决建议…...