docker数据卷及软件部署方式

目录

一、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

猜你喜欢

转载自blog.csdn.net/weixin_45894220/article/details/129362401