天天看点

docker数据卷及软件部署方式

作者:天青色LV
docker数据卷及软件部署方式

一、docker数据卷

1.docker数据卷概念

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

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

docker数据卷及软件部署方式

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

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

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

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

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

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

容器数据持久化

外部机器和容器间接通信

容器之间数据交互

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

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

docker数据卷及软件部署方式

2.数据卷命令

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

docker volume [COMMAND]

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"

}

]

docker数据卷及软件部署方式

创建容器并挂载目录

[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/

docker数据卷及软件部署方式

修改宿主机数据卷中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存储文件

docker数据卷及软件部署方式

创建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

docker数据卷及软件部署方式

创建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

docker数据卷及软件部署方式

创建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://192.168.1.199:8080

docker数据卷及软件部署方式