Docker之Dockerfile构建镜像

  🎉🎉欢迎来到我的CSDN主页!🎉🎉

🏅我是君易--鑨,一个在CSDN分享笔记的博主。📚📚

🌟推荐给大家我的博客专栏《Docker之Dockerfile构建镜像》。🎯🎯

🎁如果感觉还不错的话请给我关注加三连吧!🎁🎁

前言

        在上一期有关Docker的博客分享中我们学习到了Docker的一些数据卷和数据卷容器的一些基本的使用以及概念性的学习。本次的博客给大家带来的是有关Docker中的Dockerfile的学习。

一、什么是Dockerfile构建镜像

1. 基本概述

        Dockerfile是一个文本文件,其中包含一组用于自动化Docker镜像构建的指令和配置。通过编写Dockerfile,用户可以定义镜像的内容、环境和运行时配置。构建过程基于这个Dockerfile文件,并通过Docker引擎执行一系列指令来生成最终的Docker镜像。

2.  Dockerfile指令和它们的作用:

2.1 From :指定基础镜像,构建新镜像的起点。

FROM ubuntu:20.04

2.2 MAINTAINER: 标识镜像的维护者。

MAINTAINER Your Name <your.email@example.com>

2.3 RUN: 在镜像中执行命令,用于安装软件包、更新系统等。

RUN apt-get update && apt-get install -y nginx

2.4 COPY/ADD: 将文件或目录从构建上下文复制到镜像中。

COPY ./app /app

2.5 WORKDIR: 设置工作目录,后续的命令将在该目录下执行

WORKDIR /app

2.6 EXPOSE: 声明容器运行时要监听的端口。

EXPOSE 80

2.7 CMD: 提供容器默认的执行命令,可以被docker run时的参数覆盖。

CMD ["nginx", "-g", "daemon off;"]

2.8 ENTRYPOINT: 设置容器启动时执行的命令,不可被docker run时的参数覆盖。

ENTRYPOINT: 设置容器启动时执行的命令,不可被docker run时的参数覆盖。

简单示例

        通过编写Dockerfile,用户可以定义从基础镜像到最终镜像的整个构建过程,确保应用程序在Docker容器中正确运行。构建镜像的命令通常是使用docker build,并在构建上下文中包含Dockerfile文件。例如:

docker build -t my_custom_image:tag .

         上述命令将使用当前目录的Dockerfile构建一个名为my_custom_image的Docker镜像,并指定了一个标签tag

3.  基本结构

        Dockerfile 由一行行命令语句组成,并且支持以 # 开头的注释行。
        一般的,Dockerfile 分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。
Dockerfile的基本结构
部分命令
基础镜像信息
FROM
维护者信息
MAINTAINER
镜像操作指令
RUN ENV COPY ADD EXPOSE WORKDIR ONBUILD USER
VOLUME
容器启动时执行指
CMD ENTRYPOINT

图解说明 

二、示例使用及说明、

1. 构建镜像文件

        接下来为大家讲解如何去根据需求构建一个自定义的镜像文件供自己使用,构建镜像时必须得有一个基础的镜像。我们这里使用的是Centtos(原本没有携带东西),我们输入指令

vim Dockerfile文件进行新建及编辑

vim Dockerfile

         输入的内容如下

FROM centosMAINTAINER 2081718134@qq.comWORKDIR /testCOPY spring.jar /test
#1.指定基础镜像,并且必须是第一条指令
FROM centos:latest
#2.指明该镜像的作者和其电子邮件
MAINTAINER xx "xx@qq.com"
#3.在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录
WORKDIR /usr/local/java
#4.一个复制命令,把jdk安装文件复制到镜像中,注意:jdk*.tar.gz使用的是相对路径
COPY spring.jar /test

        输入完成之后按esc按键,输入;wq保存并且退出。接下来是我们进行构建镜像。

输入指令:docker build -t spring:v1 .

 

         我们然后我们进行查看我们刚才构建的镜像文件。

输入指令:docker images

         我们进入我们的镜像文件的容器中

输入命令:docker run -it spring:v1

        我们可以输入指令:ls查看我们文件下所存在的文件 

         我们运行这个jar包文件,输入指令:java -jar spring.jar

        无法运行的原因是因为我们使用的数基础镜像centos没有启动jar包的jdk,因此启动jar该需要我们下载所需的jdk文件。 

2.  镜像运行

        接下来我们需要去下载我们的jdk环境变量,我们输入指令:vim /etc/profile 进行配置环境变量 

         配置jdk环境变量内容

#java environment
export JAVA_HOME=/javaxl/jdk1.8.0_151(jdk解压路径)
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

         这是我们之前在centos中安装时的步骤,在Docker中不一样。

ADD jdk-8u221-linux-x64.tar.gz /testENV JAVA_HOME=/test/jdk1.8.0_221ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarENV PATH=$JAVA_HOME/bin:$PATH

         我们在我们的镜像配置文件中添加上述的内容在后面,但首先我们先要导入我们的jdk的压缩包和jre的压缩包。

 

        我们对其镜像文件Dockerfile进行编辑 

         我们将镜像文件重新编译一遍

        我们进入该镜像文件中进行查看文件 

         接下来是检查我们安装的jdk是否生效

         接下下我们可以测试运行spring.jar包

         我们接下来进行运行项目,我们运行时不是使用run因为我们是等容器打开后再运行因此使用的cmd命令。

CMD ["java -jar spring.jar"] 

        我们在重新构建一个镜像文件 

        我们在运行这个文件 

         我们重新编辑一下我们的Dockerfile文件,重新构建一个镜像文件并且运行

3. 镜像优化

        在我们的开发过程中jdk是我们必不可少的,但是在我们的运行项目中所需的是jre,因此接下来的操作就是将jdk修改为jre进行一系列的优化。下面我们首先修改Dockerfile文件内容,然后构建镜像文件

FROM centosMAINTAINER 2081718134@qq.comWORKDIR /testCOPY spring.jar /testADD jre-8u391-linux-x64.tar.gz /testENV JAVA_HOME=/test/jre1.8.0_391ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarENV PATH=$JAVA_HOME/bin:$PATHCMD java -jar spring.jar

         我们接下来就是访问项目,首先清除掉所有的容器,然后创建对应的容器进行运行使用,最后再网页进行访问。

         我们接下来的操作时将我们的镜像文件上传到我们的仓库之中,但是默认的仓库是docker.io/library/spring的官网仓库,需要我们去注册。但是我们可以使用阿里的仓库进行上传,上传快还方便。

网址:容器镜像服务 (aliyun.com)

         我们选择个人版示例进行新建对其进行一系列的操作。我们进行一系列操作后的界面如下

         我们使用前需要登陆我们的阿里账号

        我我们直接执行该命令,然后在输入我们的之前设置的密码即可。 

 

        我们对其创建一个命名空间 

 

         我们新建完命名空间之后我们还要去新建一个仓库,用于我们上传镜像文件。

        我们创建好仓库之后,镜像版本中没有任何东西,需要我们进行手动的推送上去。 推送的操作网页上有

        给我们要上传的镜像取一个别名。 

 

 

         我对其要上传的镜像修改为我们阿里的仓库地址

         上述图片是修改上传的网址路径,我们在查看我们的镜像。 

         我们在将其这个进行进行推送到我们的仓库中

         我们可以在我们的仓库中查看我们的镜像

         下载镜像输入指令

docker pull +镜像名+版本即可


 🎉🎉本期的博客分享到此结束🎉🎉

📚📚各位老铁慢慢消化📚📚

🎯🎯下期博客博主会带来新货🎯🎯

🎁三连加关注,阅读不迷路 !🎁

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

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

相关文章

如何使用LightPicture+cpolar搭建个人云图床随时随地公网访问

文章目录 1.前言2. Lightpicture网站搭建2.1. Lightpicture下载和安装2.2. Lightpicture网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1.前言 现在的手机越来越先进&#xff0c;功能也越来越多&#xff0c;而手机…

C语言——小细节和小知识9

一、大小端字节序 1、介绍 在计算机系统中&#xff0c;大小端&#xff08;Endianness&#xff09;是指多字节数据的存储和读取顺序。它是数据在内存中如何排列的问题&#xff0c;特别是与字节顺序相关。C语言中的数据存储大小端字节序指的是在内存中存储的多字节数据类型&…

Android aar包集成与报错

Android Studio引用AAR的方式&#xff0c;分为gradle7.0之前与7.0之后 一、集成步骤 方法一&#xff1a; 1.将对应的xxx.aar包复制到项目的libs目录下&#xff08;xxx代表需要引入的aar包名称&#xff09; 2.然后在模块的build.gradle文件中配置implementation files(libs/lib…

【题解】—— LeetCode一周小结2

【题解】—— 每日一道题目栏 上接&#xff1a;【题解】—— LeetCode一周小结1 8.回旋镖的数量 题目链接&#xff1a;447. 回旋镖的数量 给定平面上 n 对 互不相同 的点 points &#xff0c;其中 points[i] [xi, yi] 。回旋镖 是由点 (i, j, k) 表示的元组 &#xff0c;其…

GO——flag

flag 一个包解析命令行参数参考&#xff1a;https://faberliu.github.io/2014/11/12/Golang-flag%E5%8C%85%E4%BD%BF%E7%94%A8%E8%AF%A6%E8%A7%A3-%E4%B8%80/ flag.StringVar 将flag绑定到string类型的变量上参考&#xff1a;https://books.studygolang.com/The-Golang-Stan…

【C语言基础】01环境安装 Windows下的CLion开发环境的安装

资源:放在评论区中 下载编译器mingw64 把压缩包拖拽到C盘根目录,一键解压压缩包,得到文件夹mingw64 安装CLion开发环境 点击CLion.exe,运行安装程序路径为默认安装,如需更改,注意路径中不要带有中文. Installation Options 全部勾选选择<我想要之后重启电脑>点击CLion…

Yii实现邮件发送

一&#xff1a;yiisoft/yii2-swiftmailer拓展安装 composer require yiisoft/yii2-swiftmailer github地址&#xff1a;https://github.com/yiisoft/yii2-swiftmailer 文档地址&#xff1a;https://www.yiichina.com/doc/guide/2.0/tutorial-mailing 二&#xff1a;开启邮箱…

Elasticsearch--Master选举

角色 主节点&#xff08;active master&#xff09;&#xff1a;一般指的是活跃的主节点&#xff0c;避免负载任务&#xff0c;主节点主要用来管理集群&#xff0c;专用master节点仍将充当协调节点 候选节点&#xff08;master-eligible nodes&#xff09;&#xff1a;默认具备…

2024年第02周农产品价格报告

一、摘要 农产品价格监测主要涉及对畜禽类产品、水产品、蔬菜类产品、水果类产品的价格&#xff0c;以周为单位&#xff0c;进行变化情况的数据监测。其中&#xff0c;蔬菜类产品共18种&#xff0c;分别为大白菜、西红柿、黄瓜、青椒、芹菜、土豆、白萝卜、茄子、豆角、胡萝卜…

HCIP的静态路由复习

VRP设置用户名密码登录 [R1]aaa [R1-aaa]local-user TMG password cipher huawei #创建一个名TMG的用户&#xff0c;密码huawei Info: Add a new user.[R1-aaa]local-user TMG privilege level 15 #设置权限 [R1-aaa]local-user TMG service-type terminal …

华媒舍:高效率的新闻资讯新闻媒体宣发套餐内容推广计划方案

怎样让自己的新闻资讯可以被大众孰知&#xff0c;变成了每一个新闻媒体宣发者一同存在的困难。下面我们就给大家介绍一套高效率的新闻资讯新闻媒体宣发套餐内容推广计划方案&#xff0c;致力于帮助新闻媒体宣发者提升宣发高效率&#xff0c;提高新闻资讯的传播性。 1.新闻媒体宣…

代码随想录 Leetcode1. 两数之和

题目&#xff1a; 代码&#xff08;首刷看解析 2024年1月15日&#xff09;&#xff1a; class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {int another 0;unordered_map<int,int> hash;for(int i 0; i < nums.size();…

若依框架实现排序【升序或降序】很简单

前端实现 1. 在表格上加监听函数sort-change。如下红框所示&#xff1a; 2. 在表行上加排序字:sort-orders&#xff0c;可排序字sortable。如下红框所示&#xff1a; 3. 添加监听函数实现。代码如下&#xff1a; handleSortChange(column) {this.queryParams.orderByColumn …

request entity too large

1、分2中情况。 &#xff08;1&#xff09;带413 请求文件太大&#xff08;不包含参数&#xff09; 413 Request Entity Too Large &#xff08;2&#xff09;不带413 请求实体太大&#xff08;包含参数&#xff0c;文件等&#xff09; 客户端发送的实体主体部分比服务器能…

Ubuntu 20.04扩容磁盘命令:Ubuntu 20.04扩容系统主分区教程(PV VG LV)

前置知识&#xff1a; 磁盘 最基础的存在&#xff0c;物理磁盘 pv 物理卷&#xff08;同一磁盘 可以划分多个物理卷&#xff09; vg 卷组 &#xff08;一个到多个pv可组成一个卷组&#xff09; lv 逻辑卷 &#xff08;卷组可以划分为多个逻辑卷&#xff09;Ubuntu20.4扩容磁…

知识付费saas租户平台:揭秘成功的密码

明理信息科技知识付费saas租户平台 随着互联网的快速发展&#xff0c;人们越来越重视知识的获取和价值的挖掘。在这个信息爆炸的时代&#xff0c;知识付费已经成为了一种新的商业模式&#xff0c;为知识的传播和价值的转化提供了更加高效和便捷的途径。本文将探讨知识付费的发…

Springboot整合Redission分布式锁使用实例

Springboot整合Redission分布式锁 引言&#xff1a;实际项目中&#xff0c;我们经常会遇到一些需要考虑使用分布式锁的场景&#xff0c;以防止页面重复请求或者多系统之间相互重复调用的产生业务偏差的问题&#xff1b; 例如&#xff1a; 1.并发的场景下&#xff0c;生成订单需…

WSL2-Ubuntu20.04-配置

WSL2-Ubuntu20.04-配置 安装wsl2安装Ubuntu20.04安装anacondaWSL2可视化&#xff08;VcXsrv&#xff09; 安装wsl2 wsl --install wsl -l -v # 版本查看 默认的都是 wsl2 &#xff08;如果是wsl1 就自行升级 wsl --update&#xff09; 官方教程 安装Ubuntu20.04 安装wsl2之后…

Unable to start embedded Tomcat Nacos启动报错

Nacos报错解决 报错信息&#xff1a;Unable to start embedded Tomcat 无法加载内置的tomcat。 无需重新配置JDK&#xff0c;轻松解决 Windows 系统为例 startup.cmd 操作步骤如下&#xff1a; 在nacos解压后的文件中&#xff0c;进入bin目录下如图1所示&#xff1a; 在红框中…