Docker构建镜像

news2024/12/23 4:47:22

Docker根据Dockerfile文件构建镜像

在实际生产中,常常使用Dockerfile构建企业级生产环境镜像,然后再部署在我们的生产环境中,本文将从从零开始介绍Dockerfile如何使用,构建镜像。

Dockerhub官网地址:https://registry.hub.docker.com

1、Dockerfile语法详解

Dockerfile是一个用于定义Docker镜像的文本文件,它包含了一系列的指令和参数,用于指示Docker在构建镜像时应该执行哪些操作,例如基于哪个基础镜像、复制哪些文件到镜像中、运行哪些命令等等。通过Dockerfile,开发人员可以将应用程序和其所有依赖项打包在一起,创建出一个可移植的Docker镜像,使得这应用程序可以在任何Docker环境中都能够快速部署和运行。

1.1、Dockerfile常用指令

命令

用途

FROM

基础镜像文件

RUN

构建镜像阶段执行命令

ADD

添加文件,从src目录复制文件到容器的dest,其中 src可以是 Dockerfile所在目录的相对路径,也可以是一个 URL,还可以是一个压缩包

COPY

拷贝文件,和ADD命令类似,但不支持URL和压缩包

CMD

容器启动后执行命令

EXPOSE

声明容器在运行时对外提供的服务端口

WORKDIR

指定容器工作路径

ENV

指定环境变量

ENTRYPOINT

容器入口, ENTRYPOINT和 CMD指令的目的一样,都是指定 Docker容器启动时执行的命令,可多次设置,但只有最后一个有效。

USER

该指令用于设置启动镜像时的用户或者 UID,写在该指令后的 RUN、 CMD以及 ENTRYPOINT指令都将使用该用户执行命令。

VOLUME

指定挂载点,该指令使容器中的一个目录具有持久化存储的功能,该目录可被容器本身使用,也可共享给其他容器。当容器中的应用有持久化数据的需求时可以在 Dockerfile中使用该指令。格式为: VOLUME["/data"]。

2、Dockerfile构建镜像步骤

1. 创建dockerfile文件

vim Dockerfile

FROM nginx

RUN echo 'Hello Nginx' > /usr/share/nginx/html/index.html

2. 在Dockerfile所在路径执行以下命令构建镜像

docker build -t nginx:hello .

-t: 指定镜像名字,命令最后的点(.)表示Dockerfile文件所在路径

3. 运行镜像

docker run -p 9900:80 -d 

3、实例

编写dockerfile文件,在镜像中安装nginx, 构建镜像文件,并根据此镜像创建容器

[root@zch01 ~]# mkdir -p dockerfile/1

[root@zch01 ~]# cd dockerfile/1

[root@zch01 1]# vi dockerfile

3.1、命令解释

FROM:基础镜像,必须是可以下载下来的,定制的镜像都是基于 FROM 的镜像,这里的 centos就是定制需要的基础镜像。后续的操作都是基于centos镜像

MAINTAINER:指定镜像的作者信息

RUN:指定在当前镜像构建过程中要运行的命令

包含两种模式:Shell模式、exec模式

Shell模式

RUN (shell模式,这个是最常用的)

RUN echohello

exec模式

RUN[“executable”,“param1”,“param2”](exec模式)

RUN[“/bin/bash”,”-c”,”echo hello”]

等价于/bin/bash-c echo hello

RUN yum install wget -y 等价于=> RUN[“/bin/bash”,”-c”,”yum install wget -y”]

COPY:常用用于把宿主机上的文件拷贝到镜像中

EXPOSE:声明端口,帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射,在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口,可以是一个或者多个端口,也可以指定多个EXPOSE

CMD:类似于 RUN 指令,用于运行程序,但二者运行的时间点不同,CMD在docker run 时运行

CMD[“executable”,“param1”,“param2”](exec模式)

CMD command (shell模式)

CMD [“param1”,”param2”](作为ENTRYPOINT指令的默认参数)

3.2、构建镜像

语法如下:

docker build -t ImageName:TagName dockerfilePath

选项:

  • -t - 提到镜像的标签
  • ImageName -镜像指定的名称
  • TagName - 这是您要为镜像指定的标签
  • dockerfilePath - Dockerfile所在的目录,如果是在当前目录使用.就可以

[root@zch01 1]# docker build -t="zch/test:v3" .

查看镜像是否创建成功

[root@zch01 1]# docker images

3.3、使用订单服务构建镜像

订单服务:order-app.jar

编写dockerfile文件:

[root@zch01 order]# vi dockerfile

FROM openjdk:8-jdk-oracle #基础镜像

RUN mkdir /app #创建目录用于存放jar

ENV SERVER_PORT=9981 #环境变量应用服务端口

JAVA_AGENT=-javaagent:/opt/agent/skywalking-agent.jar #接入skywalking

JVM_GC="" #配置GC参数

JVM_OPTS="" #配置jvm参数,如限制内存

COPY target/order-app.jar /app/order-app.jar 在实际开发过程中,开发编译打包好的jar 常常放在target目录下,拷贝jar包到指定目录

EXPOSE $SERVER_PORT #声明服务端口

ENTRYPOINT ["sh","-c","java ${JAVA_AGENT} ${JVM_XMS} ${JVM_XMX} ${JVM_XMN} ${JVM_OPTS} ${JVM_GC} -jar /app/order-app.jar"] #指定容器创建启动后,需要执行的命令

构建镜像:

[root@zch01 order]# docker build -t="zch/order:v1" .

下篇博客将继续分享根据构建的镜像创建容器

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

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

相关文章

小白到运维工程师自学之路 第七十九集 (基于Jenkins自动打包并部署Tomcat环境)1

一、传统的流程 1、传统网站部署的流程 在运维过程中,网站部署是运维的工作之一。传统的网站部署的流程大致分为:需求分 析-->原型设计-->开发代码-->提交代码-->内网部署-->内网测试-->确认上线-->备份数据-->外网更新-->外网测试--&g…

2023年7月京东净水器行业品牌销售排行榜(京东数据分析软件)

伴随消费升级及健康生活理念的流行,消费者对饮水健康的关注度也逐步提高。加之经净水器处理的水在安全性、便捷性等方面的优势得到认可,净水器这一电器的市场占比也不断提高。在家电行业整体低迷的环境下,净水器的销量销额仍保持正向增长。 …

VBA Excel自定义函数的使用 简单的语法

一个简单的教程,实现VBA自定义函数。 新建模块 复制后面的代码放进来 函数的入口参数不定义,则认为是一块区域; 反之,如FindChar1 As String,则认为是输入的单值。 循环和分支如下例子,VB比较接近自然语…

OpenAI 组件 | 加速 OpenAI API 在项目中的集成

在当今这个快节奏的技术世界中,将 OpenAI 的功能集成到项目中已经成为一种趋势。OpenAI 提供了一系列强大的自然语言处理API。然而,集成这些 API 的过程复杂且耗时,通常需要大量精力和专业知识。为了简化集成过程,我们开发了 Open…

keepalived+haproxy 搭建高可用高负载高性能rabbitmq集群

一、环境准备 1. 我这里准备了三台centos7 虚拟机 主机名主机地址软件node-01192.168.157.133rabbitmq、erlang、haproxy、keepalivednode-02192.168.157.134rabbitmq、erlang、haproxy、keepalivednode-03192.168.157.135rabbitmq、erlang 2. 关闭三台机器的防火墙 # 关闭…

基于swing的火车站订票系统java jsp车票购票管理mysql源代码

本项目为前几天收费帮学妹做的一个项目,Java EE JSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 基于swing的火车站订票系统 系统有2权限:…

【广州华锐视点】VR技术带你身临其境体验地震逃生全过程

虚拟现实(VR)技术在模拟地震逃生体验方面具有重要的意义。地震是一种常见的自然灾害,对人类的生命和财产安全造成巨大威胁。通过利用VR技术,人们可以在安全的环境中亲身体验不同震级的地震情景,从而增加对地震的认识和…

编写Dockerfile制作Web应用系统nginx镜像,生成镜像nginx:v1.1,并推送其到私有仓库。

环境: CentOS 7 Linux 3.10.0-1160.el7.x86_64 具体要求如下: (1)基于centos基础镜像; (2)指定作者信息; (3)安装nginx服务,将提供的dest目录…

uview2.0自定义tabbar

tabbar组件 <template><u-tabbar :value"tab" change"changeTab" :fixed"true" :border"true" :placeholder"true":safeAreaInsetBottom"true"><u-tabbar-item text"消息" icon"c…

react-sortable-hoc 拖拽列表上oncick事件失效

const SortableItem SortableElement(({value, onChangePayment}) > {const onClickItem () > {// todo}return (<View className"-item" onClick{onClickItem}>xxxxxxx</View>) })问题&#xff1a;onClick 无效 解决&#xff1a;添加distance

Lazada上成功吸引消费者有哪些小妙招?

作为销售平台来说,其实网上可以搜索到,或者通过下载软件轻松就可以将APP下载了,然后接下来就是注册和开店去吸引消费者的过程了。对于现在比较火爆的Lazada来说,如果想要在上面成功吸引更多的消费者,需要有哪些优质的推广策略呢? 品牌效应很重要 其实Lazada首先走的就是品牌效…

PAT 1114 Family Property

个人学习记录&#xff0c;代码难免不尽人意 Sample Input: 10 6666 5551 5552 1 7777 1 100 1234 5678 9012 1 0002 2 300 8888 -1 -1 0 1 1000 2468 0001 0004 1 2222 1 500 7777 6666 -1 0 2 300 3721 -1 -1 1 2333 2 150 9012 -1 -1 3 1236 1235 1234 1 100 1235 5678 9012 …

文心问数Sugar Bot :大模型+BI,多轮会话自动生成可视化图表与数据结论

Sugar BI 的文心问数功能是基于大语言模型实现的&#xff0c;支持您使用自然语言&#xff0c;通过多轮会话的方式&#xff0c;获取实时数据的图表展现&#xff0c;也可以自动为您总结与图表相关的业务结论。 文心问数功能邀测中&#xff0c;欢迎CSDN的用户前来报名&#xff1a;…

SQL地址门牌排序,字典序转为数字序

页面有一批地址数据查询&#xff0c;结果字符排序默认是字典序的&#xff0c;所以造成了门牌3号在30号之前&#xff0c;影响用户体验&#xff1b; id, road_code, road_name, address_fullname, address_name 102 10086 人民一路 北江省南海市西湖区人民一路3号 3号 103 10086…

YOLO目标检测——小狗图像数据集下载分享

小狗图像数据集 小狗图像数据集是一种常用的用于研究和分析狗狗图像分类问题的数据集&#xff0c;它包含了大量不同品种和姿势的小狗图像样本&#xff0c;用于训练和评估狗狗图像分类算法的性能&#xff0c;共同540张图片&#xff0c;8个不同类别小狗。 数据集点击下载&#xf…

蜜蜂剪辑安装教程

安装蜜蜂剪辑&#xff1a; 1、首先&#xff0c;打开您的Windows电脑并浏览至蜜蜂剪辑的官方网站。 https://www.apowersoft.com.cn 2、点击“下载”按钮&#xff0c;在下载页面中选择您需要的版本&#xff0c;然后下载软件安装程序。 百度网盘&#xff1a; 链接&#xff1a;htt…

10个非常有用的Python库,你知道几个?

整理&#xff5c;TesterHome 这里给大家介绍10个不是最流行但非常有用的Python库&#xff0c;希望可以提供参考帮助。 PyO3 PyO3是一个Rust库&#xff0c;可以让你在Rust中编写Python模块。它可以利用 Rust 的速度和安全性编写高性能的 Python 模块。 https://github.com/PyO3…

镭速传输助力广电行业大数据高效分发,提升智慧融媒水平

随着互联网技术如大数据、人工智能、云计算等和移动通信技术如5G等的快速进步和实际应用&#xff0c;媒体行业发展正式进入智慧时代&#xff0c;智慧融媒成为媒体融合发展的新阶段&#xff0c;全面应用在超高清、云服务、融媒演播、VR等新兴技术为代表的各个方面。 以上技术的…

什么是决策树

什么是决策树 在游戏中遇到敌人是选择攻击还是逃跑&#xff1f;如果选择攻击&#xff0c;是选择普通的物理攻击还是魔法攻击&#xff1f;为达到目标根据一定的条件进行选择的过程&#xff0c;就是决策树(DT Tree)。 决策树模型非常经典&#xff0c;在机器学习中常被用于分类&…

国内智慧工业的实践,在一首曙光《长歌行》中

工业是国民经济的主战场&#xff0c;是经济命脉。因此&#xff0c;智慧工业也被认为是第四次工业革命的关键。 但提到中国智慧工业&#xff0c;不禁让人脑海中浮现出一首《长歌行》。 一方面&#xff0c;智慧工业的实现周期很长&#xff0c;AI算力、算法等新技术进入工业领域所…