docker容器技术(2)

docker容器数据卷

        什么是数据卷?

                在Docker中,数据卷(Data Volumes)是一种特殊的目录,可以在容器和主机之间共享数据。它允许容器内的文件持久存在,并且可以被多个容器共享和访问。

        数据卷的主要作用如下:

  1. 数据持久性:容器内的数据卷可以在容器被删除后仍然存在,确保数据的持久性。这对于需要长期存储数据的应用程序非常重要,如数据库。

  2. 数据共享:多个容器可以共享相同的数据卷,使它们能够访问和修改相同的数据。这对于构建分布式应用程序或共享配置文件等数据非常有用。

  3. 数据备份和恢复:数据卷可以方便地备份和恢复到其他位置,包括其他主机或云存储。这样可以确保数据的安全性,并且在需要时可以轻松地恢复数据。

  4. 数据交换:数据卷可以作为容器之间传输数据的中间介质。一个容器可以将数据写入数据卷,另一个容器可以读取并处理该数据。这对于构建复杂的应用程序架构非常有用。

使用数据卷时,需要创建一个数据卷,并将其挂载到容器中的指定路径。Docker提供了多种方式来创建和管理数据卷,包括命令行工具和Docker Compose等。

总之,数据卷是Docker中非常重要的概念,可以实现数据持久性、共享和交换,为容器化应用程序提供了更多的灵活性和可靠性。

 

配置数据卷 

配置宿主机数据卷,同时容器内部内容也会修改; 

第一步:查看所有容器进程   docker ps -a

第二步:配置数据卷 

docker run --name=容器名字 -d --restart=alaways -p 80:80 -v 容器目录:容器内部html目录镜像名

案例1: 如果目录不存在,会自动创建;

docker run --name=n01 -d --restart=alawys -p 80:80 -v /qy172/data/nginx/html:/usr/share/nginx/html nginx

 第三步:进入/qy172/data/nginx/html目录里,输入内容 vim index.html

第四步:使用IP地址访问80端口号;

修改容器内部内容,宿主机内容也会得到修改;

第一步:进入到容器内部 docker exec -it n01 /bin/bash

第二步:进入到/usr/share/nginx/html目录下;

第三步:在此次访问80端口号;

Docker应用部署

        docker部署mysql

第一步:拉去MySQL镜像  docker  pull mysql:版本号

第二步:创建容器;

docker run --name=m01 -d --restart=always -p 3307:3306 -v /qy172/data/mysql/log:/var/log/mysql -v /qy172/data/mysql/data:/var/lib/mysql -v /qy172/data/mysql/conf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=root mysql:8.2.0

第三步:连接数据库客户端测试 ;

成功以后创建库,表添加数据,看看/qy72/data/mysql /data目录中是否获取到数据库中的库和表的数据;

注:我们这时要是把为m01的容器删除掉的话,再次创建容器,只是修改端口号把3307修改为3308的话,我们再去数据库创建新的数据库时,3307的数据库连接不上,但是3308只需创建数据库即可,数据不会丢失,实现了数据的持久性;

docker run --name=m01 -d --restart=always -p 3308:3306 -v /qy172/data/mysql/log:/var/log/mysql -v /qy172/data/mysql/data:/var/lib/mysql -v /qy172/data/mysql/conf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=root mysql:8.2.0

docker部署tomcat

第一步:拉去tomcat镜像; docker pull tomcat:版本号;

第二步:创建容器; 

第三步:访问8080端口号;

解决方案:

第一步:进入到容器内部; docker exec -it t01 /bin/bash;

第二步:删除webapps文件;

 

 docker部署redis

第一步:拉去redis docker pull redis:版本号;

 

 第二步:创建容器;

注:如果数据卷挂载时,绑定的是文件--必须先创建该文件。目录不存在时可以自动创建;

创建/qy172/data/redis/redis.conf文件

创建容器

docker run --name=r01 -d -p 6379:6379 -v /qy172/data/redis/redis.conf:/etc/redis/redis.conf -v /qy172/data/redis/data:/data redis:latest redis-server /etc/redis/redis.conf

 

redis连接设置密码  /qy172/data/redis/redis.conf  中输入 requirepass root

自定义镜像

上面讲解的内容需要的镜像 都是从远程仓库拉取,我们能否把自己写的工程也变成一个镜像[运维工作者就可以从远程仓库拉取自己镜像]。可以的。 需要自定义镜像;

镜像制作

自定义镜像:提供两种方式:第一种:基于容器来制作镜像;第二种:通过dockerfile文件来制作镜像;

dockerfile的概念

  • Dockerfile是一个文本---任意一个镜像都是通过dockerfile来制作

  • 文件包含了一条条的指令

  • 每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像

  • 对于开发人员:可以为开发团队提供一个完全一致的开发环境

  • 对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了

  • 对于运维人员:在部署时,可以实现应用的无缝跨平台移植

dockerfile关键字

FROM:基础镜像,当前新镜像是基于哪个镜像的,指定一个已经存在的镜像作为模板,第一条必须是from;

MAINTAINER:镜像维护者的姓名和邮箱地址;

RUN:容器构建时需要运行的命令;两种格式:shell格式;exec格式;RUN是在 docker build运行;

EXPOSE:当前容器对外暴露出的端口;

WORKDIR:指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点;

USER:指定该镜像以什么样的用户去执行,如果都不指定。默认是root; 

ENV:用来在构建镜像过程中设置环境变量;

ADD:将宿主机目录下的文件拷贝进镜像且会自动处理URL和解压tar压缩包;

CORY:类似于ADD,拷贝文件和目录到镜像中,将从构建上下文目录<源路径>的文件/目录复制到新的一层的镜像内的<目标路径>位置;

Dockerfil案例1

第一步:拉去centos7镜像   docker pull centos:7;

第二步:编辑Dockerfile文件;/qy172/Dockerfile;
#基于某个镜像
FROM centos:7
#作者姓名和邮箱
MAINTAINER zhao<zhk166@126.com>
#工作目录
WORKDIR /usr
#打包镜像时需要执行的命令
RUN yum -y install vim
#镜像运行容器时要执行的命令
CMD /bin/bash
第三步:构建镜像

docker build -f Dockerfile -t xc_asd:1 .

-f:表示dockerfile文件
-t: 镜像名称版本号 
.: 必须加上

第四步:创建容器

docker run -it --name=xc  xc_asd:1   直接进入uer目录

 

可以使用vim编辑器;

 

Dockerfile案例2

第一步:先创建一个SpringBoot项目  添加Web依赖;

第二步:写一个简单的controller层;

第三步:将项目打成jar包;在配置文件application.properties配置端口号

第四步:配置Dockerfile文件内容;

FROM java:8
ADD docker-0.0.1-SNAPSHOT.jar docker01.jar
EXPOSE 8080
CMD java -jar docker01.jar

找到文件路径,将这两个文件托到 /qy172/springboot目录下

 根据Dockerfile制作镜像

docker build -f Dockerfile -t app:1 .

启动并做端口号映射

docker run --name=app  -d -p 8080:8080 app:1

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

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

相关文章

jdk21本地执行flink出现不兼容问题

环境说明&#xff1a;换电脑尝尝鲜&#xff0c;jdk&#xff0c;flink都是最新的&#xff0c;千辛万苦把之前的项目编译通过&#xff0c;跑一下之前的flink项目发现启动失败&#xff0c;啥都不说了上异常 Exception in thread "main" java.lang.IllegalAccessError: …

贝叶斯核机器回归拓展R包:bkmrhat

1.摘要 bkmrhat包是用于扩展bkmr包的贝叶斯核机器回归&#xff08;Bayesian Kernel Machine Regression, BKMR&#xff09;分析工具&#xff0c;支持多链推断和诊断。该包利用future, rstan, 和coda包的功能&#xff0c;提供了在贝叶斯半参数广义线性模型下进行identity链接和 …

【kubernetes】二进制部署k8s集群之cni网络插件flannel和calico工作原理

k8s集群的三种接口 k8s集群有三大接口&#xff1a; CRI&#xff1a;容器进行时接口&#xff0c;连接容器引擎--docker、containerd、cri-o、podman CNI&#xff1a;容器网络接口&#xff0c;用于连接网络插件如&#xff1a;flannel、calico、cilium CSI&#xff1a;容器存储…

SPI技术实现对比Java SPI、Spring SPI、Dubbo SPI

概念 SPI机制&#xff0c;全称为Service Provider Interface&#xff0c;是一种服务提供发现机制。 SPI的核心思想是面向接口编程&#xff0c;它允许程序员定义接口&#xff0c;并由第三方实现这些接口。在运行时&#xff0c;SPI机制能够发现并加载所有可用的实现&#xff0c…

文献速递:深度学习--深度学习方法用于帕金森病的脑电图诊断

文献速递&#xff1a;深度学习–深度学习方法用于帕金森病的脑电图诊断 01 文献速递介绍 人类大脑在出生时含有最多的神经细胞&#xff0c;也称为神经元。这些神经细胞无法像我们身体的其他细胞那样自我修复。随着年龄的增长&#xff0c;神经元逐渐死亡&#xff0c;因此变得…

docker小知识:linux环境安装docker

安装必要软件包&#xff0c;执行如下命令 yum install -y yum-utils device-mapper-persistent-data lvm2目的是确保在安装 Docker 之前&#xff0c;系统已经安装了必要的软件包和服务&#xff0c;以支持 Docker 的正常运行。设置yum源&#xff0c;添加Docker官方的CentOS存储…

Open CASCADE学习|GC_MakeArcOfCircle构造圆弧

目录 1、通过圆及圆的两个参数创建圆弧&#xff0c;参数为弧度角 2、通过圆及圆上的一点、圆的1个参数创建圆弧&#xff0c;参数为弧度角&#xff0c;Sense决定方向 3、通过圆及圆上的两个点创建圆弧&#xff0c;Sense决定方向 4、通过三点创建圆弧&#xff0c;最后一点应安…

Mysql 常用数据类型

数值型(整数)的基本使用 如何定义一个无符号的整数 数值型(bit)的使用 数值型(小数)的基本使用 字符串的基本使用 字符串使用细节 日期类型的基本使用

用html编写的小广告板

用html编写的小广告板 相关代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</tit…

【练习——打印每一位数】

打印一个数的每一位 举个例子&#xff1a;我们现在要求打印出123的每一位数字。我们需要去想123%10等于3&#xff0c;就可以把3单独打印出来了&#xff0c;然后再将123/10可以得到12&#xff0c;将12%10就可以打印出2&#xff0c;而我们最后想打印出1&#xff0c;只需要1%10就…

国内大型语言模型(LLM)的研发及突破性应用

随着人工智能技术的迅猛发展&#xff0c;大型语言模型&#xff08;LLM&#xff09;在国内外科技领域成为了热点话题。这些模型因其在文本生成、理解和处理方面的卓越能力&#xff0c;被广泛应用于各种行业和场景中。 在中国&#xff0c;一批人工智能公司在LLM的研发与应用方面…

科技云报道:黑马Groq单挑英伟达,AI芯片要变天?

科技云报道原创。 近一周来&#xff0c;大模型领域重磅产品接连推出&#xff1a;OpenAI发布“文字生视频”大模型Sora&#xff1b;Meta发布视频预测大模型 V-JEPA&#xff1b;谷歌发布大模型 Gemini 1.5 Pro&#xff0c;更毫无预兆地发布了开源模型Gemma… 难怪网友们感叹&am…

数据结构之栈的链表实现

数据结构之栈的链表实现 代码&#xff1a; #include<stdio.h> #include<stdbool.h> #include<stdlib.h> //链表节点定义 typedef struct node {int value;struct node* next; }Node; //入栈操作 bool push(Node** head, int val) {if (*head NULL){*head …

如何学习Arduino单片机

&#xff08;本文为简单介绍&#xff0c;内容源于网络&#xff09; 学习Arduino相关的网址和开源社区&#xff1a; Arduino官方文档: Arduino - HomeArduino Forum: Arduino ForumArduino Playground: Arduino Playground - HomePageGitHub: GitHub: Let’s build from here …

第十三天-mysql交互

目录 1.安装MySQL connector 方式1&#xff1a;直接安装 方式2&#xff1a;下载 2.创建链接 3.游标Cursor 4.事务控制 5. 数据库连接池 1. 使用 6.循环执行SQL语句 不了解mysql的可以先了解mysql基础 1.安装MySQL connector 1. MySQL connector 是MySQL官方驱动模块…

接口测试 —— Jmeter读取数据库数据作测试参数

1、添加Jdbc Request 2、添加ForEach控制器(右键线程组->逻辑控制器->ForEach控制器) ①输入变量的前缀&#xff1a;mobilephone&#xff1b; 从jdbc request设置的变量得知&#xff0c;我们要取的值为mobilephone_1、mobilephone_2、mobilephone_3......所以这里输入m…

备战蓝桥杯---DFS基础刷题

话不多说&#xff0c;直接看题&#xff1a; 1.注意搜索顺序枚举方式 首先&#xff0c;看到数据范围&#xff0c;我们就不可以直接每一轮3次的暴力。 我们可以发现a^2的大部分情况>2a以及a1,并且&#xff0c;我们发现其实1的操作是没有必要的&#xff08;因为2a以经包括了&…

Spring-Cloud-Gateway集成Sentinel限流

1&#xff09;gateway添加sentinel相关依赖 <spring-cloud.version>2021.0.1</spring-cloud.version> <spring-cloud-alibaba.version>2021.0.1.0</spring-cloud-alibaba.version><dependencies><!--gateway--><dependency><gro…

【c语言】if 选择语句

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;C语言 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进步&…

Python爬虫实战:从API获取数据

引言 在现代软件开发中&#xff0c;API已经成为获取数据的主要方式之一。API允许不同的软件应用程序相互通信&#xff0c;共享数据和功能。在本文中&#xff0c;我们将学习如何使用Python从API获取数据&#xff0c;并探讨其在实际应用中的价值。 目录 引言 二、API基础知识 …