【docker】如何编写dockerfile文件,构建docker镜像

news2024/11/28 22:36:00

如何编写dockerfile文件,构建docker镜像

  • 一、docker 镜像与 dockerfile
    • 1.1 什么是Docker镜像
    • 1.2 Docker 镜像的结构
  • 二、dockerfile 中常用的构建指令
  • 三、dockerfile 内容示例
  • 四、构建 docker 镜像

一、docker 镜像与 dockerfile

1.1 什么是Docker镜像

Docker镜像是一个打包好的文件,里面包含了我们要运行的命令、应用程序,以及命令或者应用程序运行所需要的运行环境,例如配置文件,环境变量,文件系统等。

1.2 Docker 镜像的结构

  • 镜像结构分层(layer),镜像的层可以被复用,避免文件存储上的冗余,节省磁盘空间,可以使用 docker inspect 命令查看镜像的分层情况;

在这里插入图片描述

  • dockerfile中每个指令都会产生一个镜像层,所以在编写 dockerfile 时尽量精简合并指令,避免生成的镜像过于冗余臃肿;
  • Docker镜像的构建是在 Docker Daemon 上完成的,运行 docker build 命令后,Docker客户端会把指令信息和构建上下文内的所有文件打包上传到 Docker Daemon 中进行构建。

二、dockerfile 中常用的构建指令

  • FROM: 指定构建镜像时使用的基础镜像;
  • CMD: 指定启动容器时执行的命令;
  • COPY:将指定文件/文件夹复制到指定目录;
  • RUN: 用于指定执行Linux命令或者脚本;
  • ARG: 创建变量,创建的变量仅在镜像构建过程中可用;
  • ENV: 创建环境变量,创建的变量不仅在镜像构建过程中可用,在容器的运行期间也可用;
  • EXPOSE:声明容器对外暴露的端口号;
  • MAINTAINER: 指定镜像维护者信息,姓名、邮箱等;
  • WORKDIR:指定在创建容器后,从宿主机进入容器时的默认目录;

三、dockerfile 内容示例

# 使用 Ubuntu 20.04镜像作为基础镜像
FROM ubuntu:20.04

# 设置工作目录
WORKDIR /home/workspace

# 指定镜像维护者信息
MAINTAINER fuyou<2394xxxx@qq.com>
 
# 复制应用程序到镜像中
COPY run.sh /tmp/app/
 
# 安装应用程序所需的依赖
RUN apt update && apt install -y python3 && apt install -y vim
 
# 设置环境变量
ENV APP_ENV production
 
# 容器启动时运行的命令
CMD ["python3", "run.py"]

EXPOSE 8088

四、构建 docker 镜像

在安装了docker运行环境的Linux终端中,执行命令docker build -f dockerfile.txt -t testApp:1.0.0 /home/workspace

docker build: 构建docker镜像指令主体;
-f ${filename}: 指定构建镜像时使用的dockerfile文件。可忽略不写,此时默认使用名为Dockerfile的dockerfile文件;
-t ${imageName}: 指定构建产生的镜像名称及版本;
/home/workspace : 构建上下文,用于存放构建docker镜像时所需要的所有文件等资源,在镜像构建过程中会把构建上下文中所有的文件或者目录都进行打包。所以指定的构建上下文不用存放其他的文件等资源。

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

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

相关文章

robots.txt

####什么是robots.txt? ​ robots.txt是一个协议,我们可以把它理解为一个网站的"管家",它会告诉搜索引擎哪些页面可以访问,哪些页面不能访问。也可以规定哪些搜索引擎可以访问我们的网站而哪些搜索引擎不能爬取我们网站的信息等等,是网站管理者指定的"君子协议…

互联网分布式应用之RabbitMQ

RabbitMQ Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机&#xff0c;Java 仍是企业和开发人员的首选开发平台。 课程内容的介绍 1. RabbitMQ介绍安装 2. Rabbi…

C# 使用正则表达式

正则表达式概念 称规则表达式&#xff08;Regular Expression&#xff0c;通常缩写为 Regex&#xff09;&#xff0c;是一种文本模式&#xff0c;包括普通字符&#xff08;例如&#xff0c;a 到 z 之间的字母&#xff09;和特殊字符&#xff08;称为"元字符"&#xf…

【unity】基于Obi的绳长动态修改(ObiRopeCursor)

文章目录 一、在运行时改变绳子长度:ObiRopeCursor1.1 Cursor Mu&#xff08;光标μ&#xff09;1.2 Source Mu&#xff08;源μ&#xff09;1.3 Direction&#xff08;方向&#xff09; 一、在运行时改变绳子长度:ObiRopeCursor Obi提供了一个非常通用的组件来在运行时修改绳…

RK3568 学习笔记 : ubuntu 20.04 下 Linux-SDK 镜像烧写

前言 开发板&#xff1a;【正点原子】ATK-DLRK3568 开发板&#xff0c;编译完 Linux-SDK 后&#xff0c;生成了相关的镜像文件&#xff0c;本篇记录一下 镜像烧写&#xff0c;当前编译环境在 VMware 虚拟机中&#xff0c;虚拟机系统是 ubuntu 20.04 此次烧写还算顺利&#xff…

10 个最佳 Python GUI 框架

图形用户界面&#xff08;通常称为 GUI&#xff09;是用户打开应用程序或网站时遇到的交互环境。 今天给大家分享 10 个最佳 Python GUI 框架 1. PyQt5 PyQt5 由 Riverbank Computing 开发&#xff0c;是一款备受青睐的用于图形用户界面&#xff08;GUI&#xff09;的 Pytho…

Spring AOP的环境搭建、切入点表达式、通知注解

Spring AOP的实现 Spring AOP环境搭建AOP坐标依赖引入添加xml配置实现三层架构 定义切入点Pointcut("匹配规则")切入点表达式1. 执行所有的公共方法2.执行任意的set方法3.设置指定包下的任意类的任意方法 (指定包: com.svt.service)4.设置指定包及于包下的任意类的任…

pyparamvalidate 项目背景和需求分析

目录 一、前置说明1、总体目录2、本节目标 二、项目背景三、需求分析三、后置说明1、要点小结2、下节预告 一、前置说明 1、总体目录 《 pyparamvalidate 参数校验器&#xff0c;从编码到发布全过程》 2、本节目标 阐述 pyparamvalidate 项目背景和需求分析。 二、项目背景…

window将Mongodb加入环境变量

首先 你需要安装 Mongodb 如果没有下载安装 可以先查看我的文章 window下载安装Mongodb数据库 右击 此电脑/此计算机/我的电脑 选择属性 在新弹出的窗口中搜索 环境变量 新弹出的窗口中 选择环境变量 系统变量中找到 path 选择编辑 点击新建 然后将安装 Mongodb 的目录下的…

项目框架构建之6:编写通用主机基础类

本文是“项目框架构建”系列之6&#xff0c;本文介绍如何编写通用主机基础类。 1.为了构建通用主机&#xff0c;我们先创建主机接口IAppHost接口 接口需要有配置项&#xff0c;我们定义为HostConfiguration&#xff0c;比如我们希望用户可以设定他的工作目录&#xff0c;就可…

改善 GitHub Pages 阅读体验:Quick Docs

一个不到 10MB 的小工具&#xff0c;来提供本地、快速的文档访问&#xff0c;来改善开发过程中&#xff0c;阅读在线文档体验糟糕的问题。 以及&#xff0c;介绍如何快速制作一个利于分发使用的&#xff0c;离线文档工具包。 写在前面 即使现在 AI 辅助编码和 Chat Bot 类的…

docker容器添加新的端口映射

通常在运行容器时&#xff0c;我们都会通过参数 -p来指定宿主机和容器端口的映射&#xff0c;例如 docker run -it -d --restart always --name [指定容器名] -p 8899:8080 [指定镜像名]上述命令将容器内的8080端口映射到宿主机的8899端口。 参数说明 -d 表示后台运行容器 -t…

基于注解的IOC配置

基于注解的IOC配置 学习基于注解的IOC配置&#xff0c;大家脑海里首先得有一个认知&#xff0c;即注解配置和xml配置要实现的功能都是一样的&#xff0c;都是要降低程序间的耦合。只是配置的形式不一样。 1.创建工程 pom.xml <?xml version"1.0" encoding&qu…

Apache Doris (六十): Doris - 物化视图

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你学编程的个人空间-豹哥教你学编程个人主页-哔哩哔哩视频 目录

【创建VirtualBox虚拟机并安装openEuler20.03 TLS SP1操作系统】

创建VirtualBox虚拟机并安装openEuler20.03 TLS SP1操作系统 一、环境说明二、安装过程 一、环境说明 虚拟机软件&#xff1a;Virtualbox操作系统&#xff1a;openEuler 20.03 TLS SP1&#xff08;x86&#xff09; 二、安装过程 创新虚拟机 修改虚拟机配置&#xff1a; …

软件测试题常见版

1、python深浅拷贝 浅拷贝&#xff0c;指的是重新分配一块内存&#xff0c;创建一个新的对象&#xff0c;但里面的元素是原对象中各个子对象的引用。深拷贝&#xff0c;是指重新分配一块内存&#xff0c;创建一个新的对象&#xff0c;并且将原对象中的元素&#xff0c;以递归的…

Python编程基础:顺序结构、循环结构、程序跳转语句、pass空语句

Python是一种简单而强大的编程语言&#xff0c;它提供了多种结构和语句&#xff0c;使得程序编写变得更加灵活和高效。在本文中&#xff0c;将介绍Python中的顺序结构、循环结构、程序跳转语句以及pass空语句&#xff0c;并解释如何正确使用它们。 目录 程序的描述方式自然语言…

vuepress2 打包后刷新页面侧边栏丢失问题

问题&#xff1a;打包后刷新页面时侧边栏丢失问题 原因&#xff1a;node版本问题 文档中写着依赖环境 Node.js v18.16.0 我当时的版本是 16.19.0 我应该算是遇到了两个问题 【刷新后侧边栏消失】【刷新后页面内容加载错误】 我看了控制台&#xff0c;侧边栏不出现的原因&a…

自定义事件

自定义事件 自定义事件 AAA"fn1"&#xff1a;向子组件的事件池中注入AAA事件&#xff0c;方法是父组件的fn1 发布订阅&#xff1a;子组件某个操作把父组件中的某个方法执行了 参数可以传多个 $listeners* $listeners&#xff1a;事件池中的方法 { aaa:fn1, bbb:fn2 }…

2023年山东省高职组区块链技术竞赛任务书

2023年山东省高职组区块链技术任务书 目录 模块一&#xff1a;区块链产品方案设计及系统运维 任务1-1&#xff1a;区块链产品需求分析与方案设计 任务1-2&#xff1a;区块链系统部署与运维 任务1-3&#xff1a;区块链系统测试 模块二&#xff1a;智能合约开发与测试 任务2-1&am…