前两篇,介绍了Docker的镜像和容器操作,现在可以在Docker中运行Nginx了。
但是,在实际项目中,Nginx配置经常调整,前两篇知识还不够用,还需要用到数据卷(Volume)。
一、数据卷的作用
在宿主机中,一般需要保存以下三类数据:
- 配置文件,例如Nginx的配置文件,在宿主机中配置好,启动容器时自动同步到容器中;
- 日志文件,例如Nginx的运行日志,由容器实时同步至宿主机,便于及时排查问题;
- 数据文件,例如MySQL的数据文件,数据是信息系统的重要资产,容器的升级与维护应与数据文件独立开,这就需要指定宿主机的某个目录作为容器的数据存储目录。
如果没有数据卷,以上这些文件,将都和创建的容器在一起,管理和维护都很麻烦。接下来,重点介绍数据卷的基本操作。
二、数据卷的基本操作
1、创建数据卷
命令格式:docker volume create 数据卷名。
2、查看数据卷详情
命令格式:docker volume inspect 数据卷名。
3、查看全部数据卷
命令格式:docker volume ls。
4、删除数据卷
命令格式:docker volume rm 数据卷名。
三、使用数据卷
这里,以Nginx为例,介绍下数据卷的使用方法。
1、方式一(创建数据卷)
命令格式:docker run -v 数据卷名称:容器内路径 镜像名称[:tag]或docker run -v 数据卷名称:容器内路径 镜像ID。
# 创建三个数据卷
docker volume create nginx-config
docker volume create nginx-logs
docker volume create nginx-html
# 创建并运行容器,使用数据卷
docker run -d -p 8888:80 ^
-v nginx-config:/etc/nginx ^
-v nginx-logs:/var/log/nginx ^
-v nginx-html:/usr/share/nginx/html ^
--name nginx nginx:latest
容器内路径如何查找:关于Nginx的配置文件、日志文件、资源文件三个容器内路径,下一篇专门讲解,这里以数据卷的使用主。
访问http://localhost:8888,一切正常。打开Docker Desktop,可以看到刚刚创建的三个数据卷。
以日志数据卷为例,可以看到该数据卷由哪个容器在使用。
还可以查看该数据卷中包括哪些文件,但是,只能下载和删除。
思考:这种方式,貌似也不是很方便,创建的数据卷依然在Docker中,不在宿主机上。配置文件不方便维护,日志文件不方便查看。
2、方式二(宿主机路径)
命令格式:docker run -v 宿主机路径:容器内路径 镜像名称[:tag]或docker run -v 宿主机路径:容器内路径 镜像ID。
# 删除方式一的容器(数据卷可以保留)
docker stop nginx
docker rm nginx
# 创建并运行容器,使用数据卷
docker run -d -p 8888:80 ^
-v D:/tmp/nginx/config:/etc/nginx ^
-v D:/tmp/nginx/logs:/var/log/nginx ^
-v D:/tmp/nginx/html:/usr/share/nginx/html ^
--name nginx nginx:latest
通过这种方式,在不创建数据卷的情况下,利用宿主机路径,查看和维护很方便。以下,是自动生成的路径。
访问http://localhost:8888,发现Nginx启动失败,检查下日志文件。
原因:问题出在Nginx的配置文件上,因为宿主机config目录为空,导致容器中找不到配置文件。
本篇,仅介绍数据卷的作用、常用操作、使用方法。下一篇,将以实战的形式,结合镜像、容器、数据卷的基础操作,完整介绍Docker下如何运行Nginx。