docker的数据卷与dockerfile自定义镜像

docker的数据卷与dockerfile自定义镜像

  • 一. docker的数据卷
    • 数据卷容器
  • 二. dockerfile自定义镜像
    • 2.1 dockerfile的命令格式
      • 镜像的操作命令
        • add和copy的区别
      • 容器启动的命令
    • 2.2 run命令
    • 2.3 其它端口映射
  • 三. 练习

一. docker的数据卷

  • 容器于宿主机之间,或者容器和容器之间的数据共享(目录)。
  • 创建容器的时候,通过指定目录,实现容器于宿主机之间,或者容器和容器之间的数据共享。
  • 容器的生命周期是有限的,容器一旦销毁,内部的数据也会一并消失,所以我们创建了数据卷的方式,将容器内的数据持久化保存到宿主机。

-v /usr/share/nginx/html:/opt/test1:ro
-v 宿主机的目录:容器内的目录:数据卷的默认权限是rw,ro:只读模式
volume:挂载卷,数据卷
以宿主机的目录为准,容器的生命周期是有限的,保存到宿主机的数据可以再下一次创建容器的时候继续使用。
docker run -itd --name nginx1 -v /opt/test1:/usr/share/nginx/html -p 80:80 nginx:1.22

docker exec -it nginx1 bash

数据卷容器

容器和容器之间共享数据
docker run -itd --name test2 -v /opt/data1 -v /opt/data2 centos:7
-v指定目录,如果没有:这个目录就是容器内的数据目录,不会和宿主机挂载

docker run -itd --name test3 --volumes-from test2 centos:7
–volumes-from: 另外一个容器,使用其他容器提供的数据目录。这个目录仅限于容器内数据共享,一旦容器销毁,内部的数据目录也会一并销毁。

docker exec it test2 bash

cd /opt
ls

创建容器,指定挂载卷容器内的nginx的日志目录和宿主机挂载,nginx的映射端口为随机端口。然后访问容器,可以在宿主机显示日志的内容。
var/log/nginx

创建容器额时候,一定要做宿主机和容器之间的端口映射(容器对外提供访问),
一定要对容器做资源限制
一定要做数据卷

二. dockerfile自定义镜像

  • 基于dockerfile创建
  • 联台文件系统,UnionFs是创建docker镜像的基础,镜像可以通过分层来进行集成
  • 基于基础的镜像可以制作各种应用的镜像
    特点:一次性加载多个文件系统,但是创建好容器之后,对于用来说只有一个文件系统。
    在这里插入图片描述

docker镜像的定制化操作实际上就是定制每一层所要添加的配置和未见等等。
把所有的需要的操作写入一个脚本当中,然后一键运行,就是dockerfile
dockerfile作为一个脚本,由四部分组成:

  1. 基础镜像: 程序的运行环境
  2. 维护者信息(可选项,相当于注释)可以不写
  3. 镜像的操作命令(自定义应用)
  4. 容器启动时的命令(容器没有可执行的命令,就会退出进入stop状态,必须要给容器一个可执行的持久化的命令。)

2.1 dockerfile的命令格式

  • FROM:指定程序的基础镜像

  • MAINTAINER:维护者信息(可以忽略)或者LABEL

镜像的操作命令

  • RUN:在基础镜像运行命令,结果提交到新镜像。每执行一次run就相当于是镜像的一层,run的命令太多,镜像的分层就越多,镜像越大。
  • ADD:将宿主机的文件复制到镜像的内部,可以URL和解压
  • COPY:将宿主机的文件复制到镜像的内部,只能是宿主机的本地文件,不支持下载。
  • ENV:指定镜像内的容器运行之后的环境变量
  • WORKDIR:容器的工作目录,也是进入容器之后的默认目录
  • USER:指定容器运行时的用户名或者uid
  • VOLUME:创建容器内的挂载点,可以被外部使用,即可以和宿主机挂载,也可以和容器使用
  • EXPOSE:声明容器对外的网络端口
  • ARG:用来传递变量,把宿主机的参数传递到容器内部的参数
add和copy的区别
  1. add和copy在复制文件时,表现的是一致的。复制本地文件,找和dockerdfile在一个目录下的文件。自动复制到指定路径。
  2. 解压和下载只能是add
  • ADD的优点
    没有格式的限制----->解压,.gz .bz2 直接跟上路径,自动解压到目标路
  • add缺点
    在不解压的前提下,无法复制tar的压缩文件。
    只是复制,使用copy,如果是压缩再使用 add。

容器启动的命令

  • CMD:指定容器运行时的默认命令
  • ENTRYPOINT:指定容器运行时的默认命令
    cmd和entrtponint是有区别的
    cmd可以给entrypoint传参,entrypoint会覆盖cmd的命令,外部定义了参数,如果是cmd,会被外部的传参覆盖,只会执行外部传参的命令,但是entrypoint的命令是不会被外部传参的命令覆盖的。
    如果有多个cmd和entrypoint只会执行最后一个。
#制作镜像
docker build -t centos:test1 .
docker build:开启镜像的制作
-t:创建完成之后给镜像指定的名称和标签
.:直接从当前目录的dockerfile文件创建镜像

2.2 run命令

RUN apt -yinsatll nginx && apt -y install httpd
RUN apt -yinsatll nginx ; apt -y install httpd
RUN apt -yinsatll nginx || apt -y install httpd
  • &&:在run命令中,表示连接多个命令,确保前一个命令执行成功,才会运行第二个命令。
  • ;:不管前面的命令是否成功,都会执行后面的命令
  • ||:或者(只有前面的失败了,后面的命令才会执行)
FROM ubuntu:22.04
RUN apt-get update && apt -y install nginx
EXPOSE 82
ENTRYPOINT ["nginx","-g",daemon off;"]

2.3 其它端口映射

vim /etc/nginx/nginx.conf
#http中添加
server {
         listen 82;
		 location /{
		     root html;
			 index index.html index.html;
			 }
		}


vim Dockerfile
FROM ubuntu:22.04
RUN apt-get update \
         && apt -y install nginx \
		 && apt -y install net-tools vim
EXPOSE 82
ADD nginx.conf /etc/nginx
ENTRYPOINT ["nginx","-g","daemon off;"]


docker build -t nginx:test1 .

docker run -itd --name nginx2 -P nginx:test1
FROM ubuntu:22.04
WORKDIR /opt
ENV PATH /opt/test1:$PATH
VOLUME ["/opt/test1"]
#这个不代表容器的默认挂载路径,也不表示宿主机一定要和这个目录挂载

三. 练习

用ubuntu实现nginx:1.22的编译版本,暴露端口为84,设置nginx的默认访问目录为/var/www/html/index.html,配置都要通过dockerfile自动完成。
宿主机和访问目录实现挂载
限制cpu只能使用10%,
以及1g的内存
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
docker run -itd --name ubuntu1 -v /opt/ubutu:/usr/local/nginx/html/ -P --cpu-quota 20000 -m 1g nginx:1
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

项目练习:若依后台管理系统-后端服务开发步骤(springboot单节点版本)

文章目录 1、用Maven搭建项目脚手架&#xff0c;父子工程依赖。2、引入SpringBoot Web容器依赖3、引入Mybatisdruid依赖4、实现接口查询数据5、整合logback日志功能 1、用Maven搭建项目脚手架&#xff0c;父子工程依赖。 root模块的pom添加plugin配置 <build><plugins…

前端开发Web

Ajax 概念:Asynchronous JavaScriptAnd XML&#xff0c;异步的JavaScript和XML 作用: 数据交换:通过Ajax可以给服务器发送请求&#xff0c;并获取服务器响应的数据。 异步交互:可以在不重新加载整个页面的情况下&#xff0c;与服务器交换数据并更新部分网页的…

debian中apt的配置与解析

引言 在系统使用过程中&#xff0c;我们可能会遭遇 apt update 操作出现问题&#xff0c;或者 apt upgrade 速度迟缓的情况。这往往是由于所使用软件源本身存在诸如服务器性能不佳、维护不及时等质量问题&#xff0c;同时&#xff0c;软件源服务器与我们所处地理位置的距离较远…

Docker 实现MySQL 主从复制

一、拉取镜像 docker pull mysql:5.7相关命令&#xff1a; 查看镜像&#xff1a;docker images 二、启动镜像 启动mysql01、02容器&#xff1a; docker run -d -p 3310:3306 -v /root/mysql/node-1/config:/etc/mysql/ -v /root/mysql/node-1/data:/var/lib/mysql -e MYS…

day03_开发前准备和匹配类标签

文章目录 day03_开发前准备和匹配类标签一、标签体系(了解)二、数据导入(操作)1、背景介绍(重要)2、创建Hive表2.1 dwm_sold_goods_sold_dtl_i2.2 dwm_sell_o2o_order_i**2.3 dwd_mem_member_union_i**2.4 dwm_mem_member_behavior_day_i**2.5 dwm_mem_first_buy_i**3、数…

Video-RAG:一种将视频RAG新框架

1. 摘要及主要贡献点 摘要&#xff1a; 检索增强生成&#xff08;RAG&#xff09;是一种强大的策略&#xff0c;通过检索与查询相关的外部知识并将其整合到生成过程中&#xff0c;以解决基础模型生成事实性错误输出的问题。然而&#xff0c;现有的RAG方法主要集中于文本信息&…

VSCode的配置与使用(C/C++)

从0开始教你在vscode调试一个C文件 一.首先是配置你的编译环境&#xff0c;添加到环境变量&#xff08;默认你是全新的电脑&#xff0c;没有安装vs2019之类的&#xff09; 原因&#xff1a;因为相比于vs2019&#xff0c;vscode只是个代码编辑器&#xff0c;相当于一个彩色的、…

MongoDB基本操作

一、实验目的 1. 熟悉MongoDB的基本操作&#xff0c;包括CRUD&#xff08;增加、读取、更新、删除&#xff09;。 2. 理解MongoDB的文档型数据库特性和Shell的使用。 3. 培养学生通过命令行操作数据库的能力。 4. 强化数据库操作的实际应用能力。 二、实验环境准备 1.…

python如何导出数据到excel文件

python导出数据到excel文件的方法&#xff1a; 1、调用Workbook()对象中的add_sheet()方法 wb xlwt.Workbook() ws wb.add_sheet(A Test Sheet) 2、通过add_sheet()方法中的write()函数将数据写入到excel中&#xff0c;然后使用save()函数保存excel文件 ws.write(0, 0, 1234…

STL--list(双向链表)

目录 一、list 对象创建 1、默认构造函数 2、初始化列表 3、迭代器 4、全0初始化 5、全值初始化 6、拷贝构造函数 二、list 赋值操作 1、赋值 2、assign&#xff08;迭代器1&#xff0c;迭代器2&#xff09; 3、assign&#xff08;初始化列表&#xff09; 4、assig…

eBPF 概述 | 学习

注&#xff1a;本文为 “ eBPF” 相关文章合辑。 未整理去重。 如有内容异常&#xff0c;请看原文。 【译】eBPF 概述&#xff1a;第 1 部分&#xff1a;介绍 2022-04-26257 1. 前言 深入研究 eBPF 的底层细节&#xff0c;从其虚拟机机制和工具&#xff0c;到在远程资源受限…

STM32学习之通用定时器

1.1通用定时器介绍 通用定时器具有基本定时器的所有特征&#xff0c;基本定时器只能递增计数&#xff0c;而通用定时器可以递减计数&#xff0c;可以中心对齐计数&#xff1b;也可以触发ADC和DAC&#xff0c;同时在更新事件&#xff0c;触发事件&#xff0c;输入捕获&#xff…

【Spring】定义的Bean缺少隐式依赖

问题描述 初学 Spring 时&#xff0c;我们往往不能快速转化思维。例如&#xff0c;在程序开发过程中&#xff0c;有时候&#xff0c;一方面我们把一个类定义成 Bean&#xff0c;同时又觉得这个 Bean 的定义除了加了一些 Spring 注解外&#xff0c;并没有什么不同。所以在后续使…

服务器日志自动上传到阿里云OSS备份

背景 公司服务器磁盘空间有限&#xff0c;只能存近15天日志&#xff0c;但是有时需要查看几个月前的日志&#xff0c;需要将服务器日志定时备份到某个地方&#xff0c;需要查询的时候有地方可查。 针对这个问题&#xff0c;想到3个解决方法&#xff1a; 1、买一个配置比较低…

使用 vllm 部署 MiniCPM-o 2.6

使用 vllm 部署MiniCPM-o 2.6 1. 创建虚拟环境2. 克隆代码3. 从代码安装 vllm4. 安装 flash-attn5. 启动 MiniCPM-o 2.66. 使用 chatbox 客户端访问并测试一下 1. 创建虚拟环境 conda create -n vllm_openbmb python3.11 -y conda activate vllm_openbmb 2. 克隆代码 git clo…

JavaScript笔记基础篇04——对象

黑马程序员视频地址&#xff1a;黑马程序员前端JavaScript入门到精通全套视频教程https://www.bilibili.com/video/BV1Y84y1L7Nn?vd_source0a2d366696f87e241adc64419bf12cab&spm_id_from333.788.videopod.episodes 目录 对象 对象的基本使用 1.对象声明语法 2.对象…

Autosar CP RTE规范解读之不同 BSW 接口的通知与软件组件激活机制:标准化接口与 AUTOSAR 接口的实现方式

在汽车电子系统开发中&#xff0c;特别是在遵循 AUTOSAR 架构的系统中&#xff0c;基本软件&#xff08;BSW&#xff09;模块之间的通信和信息通知机制至关重要&#xff0c;它直接影响着系统的性能、可靠性以及各个软件组件之间的协同工作能力。本文根据不同类型的 BSW 接口&am…

利用大语言模型进行长文本抽取式摘要的突破

论文地址&#xff1a;https://arxiv.org/pdf/2408.15801v1 引言&#xff1a;信息过载时代的文本摘要需求 在信息爆炸的时代&#xff0c;如何从海量文本中快速提取关键信息成为了一项至关重要的技能。自动文本摘要技术应运而生&#xff0c;主要分为抽取式和生成式两种方法。生成…

Quick get started with vcpkg, windows visual studio | CPP

本文属于 C 系列文章&#xff0c;本篇文章&#xff0c;是在 Quickstart C with cmake, visualstudio | CPP 基础上&#xff0c;继续的。 目录 vcpkg总结安装安装 mingw64安装 vcpkg 创建项目查询已有的包在 Visual Studio 中调试发布依赖Trouble ShootingCMake Error: CMake wa…

《Linux服务与安全管理》| 邮件服务器安装和配置

《Linux服务与安全管理》| 邮件服务器安装和配置 目录 《Linux服务与安全管理》| 邮件服务器安装和配置 1.在Server01上安装dns、postfix、dovecot和telnet&#xff0c;并启动 2&#xff0e;在Server01上配置DNS服务器&#xff0c;设置MX资源记录 3&#xff0e;在server1上…