前面我们已经使用Docker启动并进入容器执行过命令了,也确实发现了以下这几个问题:
数据集: 是一个虚拟的目录,指向宿主机文件系统中的某个目录。通过创建数据卷,我们可以使容器与宿主机之间产生一个目录与目录之间的映射关系。举个例子,我有个数据集名叫html,他映射到我本地的路径是/var/lib/docker/volumes/html
,而我的Nginx容器的html目录也映射到他上面,此时,我们修改本地的html目录下的文件或者修改Nginx容器下的html目录中的文件,另一个地方的文件也会发生响应的改变。
Docker操作数据卷的命令如下:
比如,我们创建一个叫html的数据卷,那么我们使用命令docker volumn create html
,然后我们使用docker volumn ls
来查看是否创建成功。
然后,我们看一下我们的数据卷 html 的详细信息:(框中部分就是他的宿主机的位置了)。
下面,来演示几个案例,加深一下对数据卷了解并熟悉日常的使用。
案例一、创建一个新的Nginx容器,并将该容器的/usr/share/nginx/html 目录挂载到html数据卷,通过修改本地html目录下的index.html文件,从而修改容器的显示内容标题为Hello,World!!!
知识点:运行容器时,使用-v参数即可挂载我们的数据卷。
首先,创建我们的Nginx容器,并将其 /usr/share/nginx/html 目录挂载到html数据卷。命令如下:
docker run --name ngx -p 8092:80 -v html:/usr/share/nginx/html -d nginx:1.22
命令解析:
docker run 启动容器命令
–name ngx 容器名设置为ngx
-p 8092:80 映射宿主机的8092端口到该容器的80端口
-v html:/usr/share/nginx/html 映射数据卷html到该容器的/usr/share/nginx/html目录
-d nginx:1.22 以nginx:1.22为镜像后台启动容器
然后我们开启宿主机防火墙的8092端口。
#开启8092端口
firewall-cmd --add-port=8092/tcp --permanent --zone=docker
#重启防火墙
firewall-cmd --reload
之后,我们就可以直接进入刚才说的数据卷映射的宿主机的html目录去修改我们的index.html文件了。
cd /var/lib/docker/volumes/html/_data/
vim index.html
我们只需要将 h1 标签中的内容修改为 Hello,World!!!然后保存退出即可。
此时,我们使用本机访问我们的宿主机ip地址加端口号8092,显示如下:
注意:当数据卷不存在时,我们运行容器并希望将其挂载到一个不存在的数据卷,那么Docker会自动帮我们创建一个数据卷,即可以不先通过 docker volumn create 命令创建数据卷再将容器进行挂载,直接docker run 运行容器的时候 -v 让他帮我们自动创建一个我们指定的数据卷也是可以的。
案例二、创建并运行一个MySQL容器,将宿主机目录直接挂载到容器。
对于宿主机目录和文件的直接挂载,语法跟数据卷的挂载类似,如下:
-v 宿主机目录:容器内目录
-v 宿主机文件:容器内文件
首先,我们当然还是从dockerhub拉取镜像:
# 拉取镜像
docker pull mysql:8.0
# 新建目录 tmp/mysql/data
mkdir -p tmp/mysql/data
# 新建目录 tmp/mysql/conf
mkdir tmp/mysql/conf
# 进入 tmp/mysql/conf 目录
cd tmp/mysql/conf
然后,我们用vim指令 vim hmy.cnf
写我们的配置文件如下:
[mysqld]
skip-name-resolve
character_set_server=utf8
datadir=/var/lib/mysql
server-id=1000
然后我们启动我们的8093端口,给待会要开启的mysql容器做准备。
# 打开8093端口号
firewall-cmd --add-port=8093/tcp --permanent --zone=docker
# 重启防火墙
firewall-cmd --reload
启动后,我们就可以启动我们的容器了。
docker run --name mysql \
-e MYSQL_ROOT_PASSWORD=root \
-p 8093:3306 \
-v /root/tmp/mysql/data:/var/lib/mysql \
-v /root/tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf \
-d mysql:8.0
命令解析:
启动后,我们使用docker ps
命令可以看到: