Docker自定义构建镜像dockerfile和使用数据卷

news2024/11/17 15:40:15

Docker自定义构建镜像dockerfile和使用数据卷

DockerFile

Dockerfile 是一个文本文件,包含了一系列用于构建 Docker 镜像 的指令和配置信息。通过编写
Dockerfile ,用户可以定义镜像的构建过程,包括基础镜像、运行命令、设置环境变量、暴露端口等。
Dockerfile Docker 镜像的构建蓝图,通过执行 docker build 命令可以根据 Dockerfile 构建出一个完整的
镜像。每个指令都会生成一个镜像层,这些镜像层会被堆叠在一起以构建最终的镜像。
DockerFile指令
说明
FROM
指定基础镜像,用于后续的指令构建。
MAINTAINER
指定 Dockerfile 的作者 / 维护者。(已弃用,推荐使用 LABEL 指令)
LABEL
添加镜像的元数据,使用键值对的形式。
RUN
在构建过程中在镜像中执行命令。
CMD
指定容器创建时的默认命令。(可以被覆盖)
ENTRYPOINT
设置容器创建时的主要命令。(不可被覆盖)
EXPOSE
声明容器运行时监听的特定网络端口。
ENV
在容器内部设置环境变量。
ADD
将文件、目录或远程 URL 复制到镜像中。
COPY
将文件或目录复制到镜像中。
VOLUME
为容器创建挂载点或声明卷。
WORKDIR
设置后续指令的工作目录。
USER
指定后续指令的用户上下文。
ARG
定义在构建过程中传递给构建器的变量,可使用 "docker build" 命令设置。
ONBUILD
当该镜像被用作另一个构建过程的基础时,添加触发器。
STOPSIGNAL
设置发送给容器以退出的系统调用信号。
HEALTHCHECK
定义周期性检查容器健康状态的命令。
SHELL
覆盖 Docker 中默认的 shell ,用于 RUN CMD ENTRYPOINT 指令。
构建步骤
先创建一个dockerfile的文件,用来创建我们的docker镜像,我们需要的tar包要放在同级目录下
编辑文件
FROM centos:7 
# 基础镜像是centos7

# 作者
MAINTAINER cxy 2099289294@qq.com

# 设置环境变量
ENV MYPATH /usr/local
# 指定工作目录
WORKDIR $MYPATH

# 修改yum源   阿里的yum源
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 清理缓存并生成新的缓存
RUN yum clean all && yum makecache

# vim
RUN yum -y install vim

# net-tools
RUN yum -y install net-tools
#jdk
# 	1.解压tar 包  自动解压 
RUN mkdir /usr/local/java
ADD jdk-23_linux-x64_bin.tar.gz /usr/local/java/

# 设置环境变量

ENV JAVA_HOME /usr/local/java/jdk-23
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH


EXPOSE 80


# 要运行的程序
CMD echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bash

from拉过来基础镜像centos,下载我们需要的vim和net-tools,解压jdk包和设置jdk的环境变量,放出来一个80端口

创建镜像

语法:Docker build 【-f 文件的名字】-t 镜像的名字 .

docker build -t mycentos .

文件的名字不写的时候默认使用的是dockerfile

创建好之后使用命令查看

查看所有镜像

docker images

创建容器运行容器,并进入到容器内部

docker run -it --name=容器名字  镜像名字  bash

导出镜像
docker save -o mycentos.tar mycentos

可以看到~目录下会出现我们的镜像

导入镜像

将镜像远程传递给另一台服务器

scp ./mycentos.tar root@192.168.184.35:/usr/aaa

进入到另一台的服务器中加载镜像

cd /usr/aaa
docker load -i mycentos.tar 

查看镜像是否加载

docker images

导入成功

数据卷

卷就是目录或文件,存在于一个或多个容器中,是 Docker 容器中用于持久化数据的一种机制,它可以将
容器内的数据存储到宿主机中,由 docker 挂载到容器,但不属于联合文件系统,因此能够绕过
UnionFS ,提供一些用于持续存储或共享数据。
特性
卷设计的目的就是数据的持久化,完全独立于容器的生存周期,因此 Docker 不会在容器删除时删除其挂
载的数据卷。
特点
数据卷可以在容器之间共享或重用数据
卷中的更改可以直接实施生效
数据卷中的更改不会包含在镜像的更新中
数据卷的生命周期一直持续到没有容器使用它为止

作用:

1. 数据的共享

2. 容器删除的时候数据不丢失

添加数据卷

直接添加

docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
 docker run -it -v /opt/myvolume:/opt/v1 --name=mycentos2 mycentos bash

运行了一个容器mycentos2  容器中opt/v1目录下面的所有的内容全部都挂载到了宿主目录中的opt/myvolume 里面

测试

进入容器内部

docker exec -it 容器名/id bash

进入刚和宿主机绑定的文件夹v1里,输出并创建一个文件,看宿主文件夹是否会同步创建

可以看到在我们的宿主机的文件夹里也同样会创建

即使容器被删除后也可以留下文件

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

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

相关文章

38.重复的子字符串

方法1: class Solution {public boolean repeatedSubstringPattern(String s) {if (s.equals("")) return false;String s2(ss).substring(1,(ss).length()-1);//去掉首尾字符return s2.contains(s);//判断是否包含s} } class Solution(object):def rep…

Leetcode 相交链表

一图胜千言,java 代码如下: /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) {* val x;* next null;* }* }*/ public class Solution {public ListN…

Python自动化测试之unittest框架

一、什么是框架 框架是由大佬开发或者专业的研发团队研发的技术骨架,框架是一个半成品,框架是对常用的功能,基础的代码进行封装的一个工具,这个工具对外提供了一些API,其他的开发者只需要调用框架的接口即可&#xff…

网络安全法中,个人信息保护的措施和原则有哪些?

《中华人民共和国网络安全法》中关于个人信息保护的规定强调了几项基本原则和措施,以确保个人信息的安全。以下是其中的一些要点: 原则 合法性:个人信息的收集和使用必须符合法律规定。 正当性:信息收集和使用的目的是正当的&…

数据的基本统计描述

基本操作 首先导入鸢尾花数据集用于分析 import numpy as np from sklearn.datasets import load_iris iris_dataload_iris() iris_data 查看数据维度 iris_data.data.shape 获取第一组数据 iris_data.data[0] 获取第一个维度所有取值,作为一维向量 iris_…

【高分系列卫星简介——高分五号卫星(GF-5)】

高分五号卫星(GF-5) 高分五号(GF-5)卫星是中国高分辨率对地观测系统重大专项系列中的一颗重要卫星,主要承担着遥感、测绘等任务。以下是对高分五号卫星的详细介绍: 一、基本信息 国籍:中国研…

内容生态短缺,Rokid AR眼镜面临市场淘汰赛

AR是未来,但在技术路径难突破、生态系统难建设,且巨头纷纷下场的背景下,Rokid能坚持到黎明吗? 转载:科技新知 原创 作者丨王思原 编辑丨蕨影 苹果Vision Pro的成功量产和发售,以及热门游戏《黑神话》等在A…

解锁微软录屏工具:2024 开启屏幕录制新时代

现在快节奏的生活环境,录屏工具已成为不可或缺的记录利器,其应用范围广泛。若你正对windows自带录屏功能充满好奇,渴望掌握其操作方法,或是寻求更多专业、便捷的录屏软件选项,那么就请继续阅读吧。 1.福昕录屏大师 链…

清华大学开源视频转文本模型——CogVLM2-Llama3-Caption

通常情况下,大多数视频数据并不附带相应的描述性文本,因此有必要将视频数据转换为文本描述,为文本到视频模型提供必要的训练数据。 CogVLM2-Caption 是一个视频字幕模型,用于为 CogVideoX 模型生成训练数据。 文件 使用 import i…

应用层 II(文件传输协议FTP)【★★】

(★★)代表非常重要的知识点,(★)代表重要的知识点。 一、文件传输协议(FTP) 文件传送协议 FTP(File Transfer Protocol)是互联网上使用得最广泛的文件传送协议。FTP 提…

14年408-计算机网络

第一题: 解析:OSI体系结构 OSI由下至上依次是:物理层-网络链路层-网络层-运输层-会话层-表示层-应用层。 因此直接为会话层提供服务的是运输层。答案选C 第二题: 解析:数据链路层-交换机的自学习和帧转发 主机a1向交换…

零基础学Axios

Axios官网:Axios官网 想用Axios前需要在项目中安装axios,安装方式如下: 下列是axios请去方式,本文主要讲解post和get请求,其他请求和这两种请求方法相同。 1 get请求 1.1 不带请求参数 前端 后端 1.2 带请求参数 前端 写法…

动态切换数据库连接方案

文章目录 引言I 案例:手动切换数据库配置存储数据库配置信息书写切换脚本II 知识扩展使用sed命令替换文件内容激活环境配置文件引言 需求: 查询SQL Server数据库的时候可以根据实际情况分配服务器来提供服务,大大提高服务速度和优化性能,完成负载均衡。 方案:推荐从数据库…

菱形继承的类对父类的初始化、组合、多态、多态的原理等的介绍

文章目录 前言一、菱形继承的类对父类的初始化二、组合三、 多态1. 构成多态2. 虚函数3. 虚函数的重写4. 虚函数重写的两个例外1. 协变2. 析构函数的重写 5. C11 final 和 override1. final2. override 6. 设计不想被继承的类7. 重载、覆盖(重写)、 隐藏…

基于数据挖掘的航空客户满意度分析预测系统

温馨提示:文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 航空公司致力于提供多样化的服务以满足乘客需求,包括但不限于提供免费无线网络、免费食物饮品、提供网上预约服务、飞机出口位置、座椅舒适度、卫生状况等,并希望以此提升乘…

Linux系统CentOS下挂载磁盘

1. 挂载磁盘步骤总结如下 1. 对磁盘进行分区 2. 对磁盘进行格式化 3. 将磁盘挂载到对应目录 4. 设置开机自动挂载磁盘 2. 对磁盘进行分区 2.1 查看系统设备信息 lsblk指令显示所有块设备信息:显示系统中所有的块设备信息,包括磁盘和分区 lsblk 2…

Mapbox封装图形绘制工具 线,圆,polygon,删除,点 mapbox-gl-draw-circle mapbox-gl-draw

使用插件,安装 npm install mapbox-gl-draw-circle //绘制圆 npm install mapbox/mapbox-gl-draw //绘制点线面删除相关API地址:https://github.com/mohong/mapbox-gl-draw-circle https://github.com/mapbox/mapbox-gl-draw/blob/main/docs/API.md…

Unity 热更新(HybridCLR+Addressable)-设置打包路径和加载路径、打开Hosting服务、打包

四、设置打包和加载路径 五、打开Hosting服务 六、打包 打包完成后路径在Assets同级目录下的ServerData 但是目前没有资源文件对比 修改上面设置后再次打包 里面多了哈希和JSON文件,这俩个就是用于资源对比

dotnet4.0编译问题

因为最近在写cobaltstrike的execute-assembly内存加载的c#项目 用visual studio2022编译,最低net只能用6.0版本的,并且execute-assembly不支持 我想使用4.x版本进行编译,因为visual studio不支持,那么使用命令行进行编译 因为要用…

简单了解Redis(初识阶段)

1.认识Redis 对于Redis有一个很重要的点就是,它存储数据是在内存中存储的。 但是对于单机程序,直接通过变量存储数据的方式是更优的,在分布式系统下 Redis才能发挥威力 因为进程是有隔离性的,Redis可以基于网络,把进…