docker数据卷及软件部署方式

news2024/12/24 11:37:01

目录

一、docker数据卷管理

1.docker数据卷概念

2.数据卷命令

3.创建容器并挂载数据卷

二、docker软件部署

1.docker部署mysql方式

下载MySQL5.7镜像文件

创建所需的数据卷目录

 创建mysql容器并挂载数据卷

进入数据库授权远程连接用户访问

2. docker部署nginx方式

下载nginx镜像

创建所需的数据卷目录

 创建nginx容器并挂载数据卷

3.docker部署tomcat方式

下载tomcat镜像

创建所需的数据卷目录

创建tomcat容器并挂载数据卷

 创建tomcat网页目录

创建测试页面

测试访问

一、docker数据卷管理

1.docker数据卷概念

容器删除后,在容器中产生的数据也会随之销毁,在之前的nginx案例中,修改nginx的html页面时,需要进入nginx内部。并且因为没有编辑器,修改文件也很麻烦。

这就是因为容器与数据(容器内文件)耦合带来的问题:

不便于修改:例如当我们要改Nginx的HTML中的内容时,需要进入容器内部进行修改,一个还好,如果修改的容器很多时,全部进去容器修改的话就会很不方便的。

数据不可复用:在容器内的修改是对外不可见的,所有修改对新创建的容器是不可复用的。

升级维护困难:数据在容器内,如果要升级容器必须删除旧的容器,那么所有旧容器内的数据都跟着删除了。

要解决这个问题,必须将数据与容器解耦,这就要用到数据卷了。

1、容器数据卷可以是宿主机中的一个目录或文件,通过将目录或文件挂载到容器中,可解决容器中的数据与宿主机之间立刻同步,

2、数据卷可以间接的将外部主机文件传输到宿主机数据卷目录,可解决容器与外部主机之间文件交换的问题,

3、一个数据卷目录可以同时挂载多个容器,解决多容器之间文件交换的问题,

4、数据卷可以解决容器删除后容器数据丢失的问题,实现数据持久化。

 

简单来说数据卷的优点就是:

容器数据持久化
外部机器和容器间接通信
容器之间数据交互

例如下面的模式:我们在宿主机目录下建立一个虚拟目录,里面存放容器需要操作的文件,我们将数据全部挂载到虚拟目录下,一旦完成数据卷挂载,对容器的一切操作都会作用在数据卷对应的宿主机目录了。

这样,我们操作宿主机的/var/lib/docker/volumes/html目录,就等于操作容器内的/usr/share/nginx/html目录了

 

2.数据卷命令

[root@ localhost ~]# docker volume --help   #查看数据卷命令帮助

docker volume [COMMAND]

命令

说明

docker volume create 卷名

创建数据卷

docker volume inspect卷名

查看数据卷详细信息,包括关联的宿主机目录位置

docker volume ls

查看所有数据卷

docker volume prune卷名

删除指定数据卷

docker volume rm卷名

删除所有未使用的数据卷

默认创建到:/var/lib/docker/volumes/ 路径下

配置方式:

在创建启动容器时,使用-v参数设置数据卷

docker run 参数 -v 宿主机目录/文件:容器内目录/文件

docker volume 卷管理命令

注意事项:

如果不是通过docker volume create创建的,目录必须是绝对路径 如果目录不存在,会自动创建

3.创建容器并挂载数据卷

 [root@docker ~]# docker volume create nginx_html		#创建数据卷
nginx_html

[root@docker ~]# docker volume ls		#查看数据卷
DRIVER    VOLUME NAME
local     nginx_html

[root@docker ~]# ls /var/lib/docker/volumes/	#数据卷存放目录
backingFsBlockDev  metadata.db  nginx_html

[root@docker ~]# docker volume inspect nginx_html 	#查看数据卷详细信息
[
    {
        "CreatedAt": "2023-03-03T22:17:25+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/nginx_html/_data",  #容器与宿主机关联目录
        "Name": "nginx_html",
        "Options": null,
        "Scope": "local"
    }
]

创建容器并挂载目录

[root@docker ~]# docker run --name nginx_web -v nginx_html:/usr/share/nginx/html -p 80:80 -d nginx:1.20.2

 查看宿主机数据卷目录

[root@docker ~]# ll /var/lib/docker/volumes/nginx_html/_data/
总用量 8
-rw-r--r-- 1 root root 494 11月 16 2021 50x.html
-rw-r--r-- 1 root root 612 11月 16 2021 index.html

初始页面访问:http://192.168.1.199/

修改宿主机数据卷中nginx页面内容,并访问验证

[root@docker ~]# echo "Hello Word" > /var/lib/docker/volumes/nginx_html/_data/index.html
[root@docker ~]# curl 192.168.1.199
Hello Word

 然后进入容器中变更nginx内容,并访问

[root@docker ~]# docker exec -it nginx_web /bin/bash
root@f721380b12b3:/# echo "Containers" > /usr/share/nginx/html/index.html 
root@f721380b12b3:/# hostname -I    #查看容器IP地址
172.17.0.2 
root@f721380b12b3:/# curl 172.17.0.2
Containers

一个数据卷目录可以同时挂载多个容器,解决多容器之间文件交换的问题。

[root@docker ~]# docker run --name nginx_web01 -v nginx_html:/usr/share/nginx/html -p 8080:80 -d nginx:1.20.2
a5d9ad4f321a0f642b4be623dec1d20be27770bfde9935fa87feb95e9c461248
[root@docker ~]# curl 192.168.1.199    #测试访问
Hello Word

注意:nginx配置文件目录一般也要创建数据卷,

[root@docker ~]# docker volume create nginx_logs  #创建nginx日志数据卷
[root@docker ~]# docker volume create nginx_conf  #创建nginx配置文件数据卷

[root@docker ~]# docker run -id --name=web03 -p 8088:80 \
-v nginx_html:/usr/share/nginx/html/ \    #nginx网页目录
-v nginx_logs:/var/log/nginx/ \        #nginx日志目录
-v nginx_conf:/etc/nginx/ \        #nginx配置文件目录
nginx:1.20.2

二、docker软件部署

1.docker部署mysql方式

在Docker容器中部署MySQL数据库,并通过外部MySQL客户端管理MySQL数据库。

下载MySQL5.7镜像文件

[root@docker ~]# docker pull mysql:5.7

创建所需的数据卷目录

[root@docker ~]# docker volume create mysql_conf  #mysql配置文件
[root@docker ~]# docker volume create mysql_logs  #mysql日志文件
[root@docker ~]# docker volume create mysql_database  #mysql存储文件

 创建mysql容器并挂载数据卷

[root@docker ~]# docker run -id --name=mysql -p 3306:3306 \
-v mysql_conf:/etc/mysql/ \
-v mysql_database:/var/lib/mysql/ \
-v mysql_logs:/var/log/mysql/ \
mysql:5.7

进入数据库授权远程连接用户访问

[root@docker ~]# docker exec -it mysql /bin/bash

root@9c8c0dccccee:/# mysql -uroot -p123456
mysql> grant all on *.* to root@"%" identified by "123456";
授权后测试远程登录

2. docker部署nginx方式

在Docker容器中部署nginx,并通过外部浏览器访问nginx。

下载nginx镜像

[root@docker ~]# docker pull nginx:1.20.2

创建所需的数据卷目录

[root@docker ~]# docker volume create nginx_html
[root@docker ~]# docker volume create nginx_logs
[root@docker ~]# docker volume create nginx_conf

 创建nginx容器并挂载数据卷

[root@docker ~]# docker run -id --name=web03 -p 80:80 \
-v nginx_html:/usr/share/nginx/html/ \
-v nginx_logs:/var/log/nginx/ \
-v nginx_conf:/etc/nginx/ \
nginx:1.20.2

浏览器访问容器Nginx服务:htts://192.168.1.199

3.docker部署tomcat方式

在Docker容器中部署tomcat,并通过外部浏览器访问tomcat。

下载tomcat镜像

[root@docker ~]#docker pull tomcat:10

创建所需的数据卷目录

[root@docker ~]# docker volume create tomcat

创建tomcat容器并挂载数据卷

[root@docker _data]# docker run -id --name=tomcat -p 8080:8080 \
> -v tomcat:/usr/local/tomcat/ \
> tomcat:10
bfcc60e3fc3791339e718a5b271c27d7f9ffbe8236eb53eab462914b3cabd9f3

 创建tomcat网页目录

[root@localhost ~]# mkdir /var/lib/docker/volumes/tomcat/_data/webapps/ROOT

创建测试页面

[root@localhost ~]# vim /var/lib/docker/volumes/tomcat/_data/webapps/ROOT/index.html
<h1>hello tomcat<h1>

测试访问

http://IP:8080

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

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

相关文章

C语言-基础了解-16-C字符串

C字符串 一、C字符串 在 C 语言中&#xff0c;字符串实际上是使用空字符 \0 结尾的一维字符数组。因此&#xff0c;\0 是用于标记字符串的结束。 空字符&#xff08;Null character&#xff09;又称结束符&#xff0c;缩写 NUL&#xff0c;是一个数值为 0 的控制字符&#x…

剑指 Offer 31. 栈的压入、弹出序列

一、题目描述 输入两个整数序列&#xff0c;第一个序列表示栈的压入顺序&#xff0c;请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。 例如&#xff0c;序列 {1,2,3,4,5} 是某栈的压栈序列&#xff0c;序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列…

centos7 安装 hyperf

​​​​​​PHP > 7.4 Swoole PHP 扩展 > 4.5&#xff0c;并关闭了 Short Name OpenSSL PHP 扩展 JSON PHP 扩展 PDO PHP 扩展 Redis PHP 扩展 Protobuf PHP 扩展 composer create-project hyperf/hyperf-skeleton 推荐安装项 全部选n php.ini [swoole] extens…

LQB小板焊接V3版本的小板原理图,PCB图,注意事项和步骤

第一部分&#xff0c;这个部分&#xff0c;可以不焊接&#xff0c;直接用买的下载器进行下载代码&#xff0c;外接一个下载器&#xff0c;网上大概是10元左右&#xff0c;以后学习stm32的芯片的时候&#xff0c;这个下载器就是一个串口转换器&#xff0c;也可以使用。。 当然也…

realloc也可以缩容了??

作者&#xff1a;小树苗渴望变成参天大树 作者宣言&#xff1a;认真写好每一篇博客 作者gitee:gitee 如 果 你 喜 欢 作 者 的 文 章 &#xff0c;就 给 作 者 点 点 关 注 吧&#xff01; realloc的细节前言一、realloc的原地扩容和异地扩容二、关于realloc是否可以缩容问题前…

快速搭建本地服务器

一、anywhere 1、npm install anywhere -g 2、打开位于文件夹下的终端页&#xff0c;输入anywhere 9999 9999这里是设置端口号&#xff0c;端口号自行设置&#xff0c;也可以不输入xxx会默认8080端口号 二、http-server 1、npm install http-server -g 2、打开位于文件夹下…

[golang]Go语言从入门到实践-反射

反射三定律&#xff1a; 1.变量---->反射变量 2.变量---->反射变量---->接口 3.变量----->(通过取地址&)反射变量---->修改变量的值 反射的类型和种类&#xff1a; 切片、集合、结构体、指针、函数与反射...... 总结&#xff1a; 内置包函数 reflect 的…

darknet测试yolo

原文链接&#xff1a;https://wangguo.site/posts/38432.html YOLO: Real-Time Object Detection 1、下载yolo权重文件 mkdir model #新建文件夹放权重文件 cd model wget https://pjreddie.com/media/files/yolov3.weights2、测试图片 执行命令 ./darknet detect cfg/yolo…

(socket编程实验中遇到的问题)connect error no route to host

在编写网络编程的时候遇到了这个问题connect error no route to host socket编程&#xff08;服务端与客户端&#xff09; 上网一搜全是&#xff1a; 两台机器进行socket通信时&#xff0c;可能在连接时出现错误&#xff1a; connect error: No route to host(errno:113) 出…

产品新人如何培养产品思维?

什么是产品思维&#xff1f;其实很难定义&#xff0c;不同人有不同的定义。有的人定义为以用户为中心打磨一个完美体验的产品&#xff1b;有的定义为从需求调研到需求上线各个步骤需要思考的点&#xff0c;等等。本文想讨论的产品思维是&#xff1a;怎么去发现问题&#xff0c;…

23.3.6打卡 AtCoder Beginner Contest 277 A~D

E题最短路有点生疏了先不写, 之后再补 A 题意 给出一个排列和X 问X在排列中出现的下标是多少 代码 void solve() {cin>>n>>m;for(ll i1;i<n;i) {cin>>arr[i];if(arr[i]m) ansi;}cout<<ans<<endl;return; }B题 题意 这机翻翻译的挺正确的…

5.3中断系统中的设备树——中断号的演变与irq_domain

通过上一节我们知道&#xff0c;在内核中有一个irq_desc数组&#xff0c;数组里面的每一项对应一个中断&#xff0c;数组的下标就是对应中断的虚拟中断号&#xff08;virq&#xff09;。 假设只有一个中断控制器&#xff0c;有32个中断&#xff0c;那么中断和irq_desc数组可以…

654. 最大二叉树

题目 leetcode题目地址 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点&#xff0c;其值为 nums 中的最大值。 递归地在最大值 左边 的 子数组前缀上 构建左子树。 递归地在最大值 右边 的 子数组后缀上 构建右子树。 返…

项目黑马面面-学科列表-增删改查

查 1.布局2.定义api3.导入api4.进入页面就调用api5.获取数据6.存储并渲染7.与分页建立关联a.请求参数值要与分页组件绑定b.total值存储并绑定到分页组件c.页码改变与页容量改变都要请求api1.布局 <template><div><el-card><el-form :inline"true&q…

C语言例程:猜数字游戏

猜数字游戏 实现一个简单的猜数字游戏&#xff0c;学习 while 循环语句的用法。 实例解析 while 循环语句 while 语句的一般形式为&#xff1a; while(表达式)语句; 其中表达式是循环条件&#xff0c;语句为循环体。 while 语句的语义是&#xff1a;计算表达式的值&#xf…

Vue使用ElemenUI对table的指定列进行合算

前言 最近有一个想法&#xff0c;就是记录自己花销的时候&#xff0c;table中有一项内容是花销的金额。然后想在table的底部有一项内容是该金额的总计。 然后我就顺着elemetui的table组件寻找相关的demo&#xff0c;还真发现了一个这样的demo。 对于这个demo&#xff0c;官方…

嵌入式 Linux进程之间的通信

目录 1、Linux进程间的通信继承 2、Linux进程之间的通信种类 3、管道 3.1 管道概述 3.2 管道文件 3.3 管道特点 3.4 通信框架 3.5 对管道文件进行操作 4、标准流管道 5、无名管道 PIPE 5.1 无名管道特点 5.2 创建管道函数 6、有名管道&#xff08;FIFO&#x…

FPGA lattice 深力科LCMXO3LF-2100C-5BG324I拥有很强的灵活性和适应性可编程内核的FPGA 值得期待

FPGA lattice 深力科LCMXO3LF-2100C-5BG324I MachXO3系列 拥有很强的灵活性和适应性可编程内核的FPGA 值得期待 &#xff0c;FPGA 现场可编程逻辑器件,小尺寸&#xff0c;高性能&#xff01;在工业领域&#xff0c;它可以用于网络控制器&#xff0c;PLC,网络边缘计算&#xff0…

kubernetes--分析容器系统调用:Sysdig

目录 Sysdig介绍&#xff1a; sysdig工作流程 安装Sysdig sysdig常用参数&#xff1a; sysdig过滤&#xff1a; sysdig之Chisels&#xff08;工具箱&#xff09;&#xff1a; 其他常用命令 Sysdig介绍&#xff1a; Sysdig是一个非常强大的系统监控分析和故障排查工具。汇…

MOEA/D: A Multiobjective Evolutionary Algorithm Based on Decomposition

目录1 问题定义2 算法步骤3 代码4 效果1 问题定义 本博客以最小化问题为例 f1x2f2(x−2)2min⁡f(f1(x),f2(x))\begin{aligned} f_1 & x ^2 \\ f_2 & (x - 2) ^2 \\ \min f & (f_1(x), f_2(x)) \end{aligned} f1​f2​minf​x2(x−2)2(f1​(x),f2​(x))​ 代码…