一、联合文件系统(Union File System)
- 联合文件系统是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。
二、commit镜像
2.1 启动tomcat
docker run -p 3344:8080 -it tomcat
2.2 进入到tomcat容器内
-t, --tty Allocate a pseudo-TTY
docker exec -it 8b71f4516308 /bin/bash
- 发现webapps文件夹是空的,也就是官方的tomcat镜像是空的
2.3 提交修改后的tomcat容器到本机
docker commit -a="zhouhao" -m="add webapps app" 8b71f4516308 tomcat-zhouhao:1.0
- Usage: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
- -a, --author string Author (e.g., “John Hannibal Smith hannibal@a-team.com”)
- -m, --message string Commit message
- 查看提交到本地的tomcat
[root@zhouhao ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat-zhouhao 1.0 4a6332ef2158 31 seconds ago 684MB
tomcat latest 4ebba13e9156 26 hours ago 680MB
nginx latest c316d5a335a5 9 days ago 142MB
centos latest 5d0da3dc9764 4 months ago 231MB
三、容器数据卷
3.1 什么是容器数据卷
docker的理念
- 将应用和环境打包成一个镜像
- 如果把数据放在容器中,删除容器,数据就会丢失。希望数据持久化。
- 容器之间可以有一个数据共享技术。docker容器中产生的数据,同步到本地,这就是卷技术。实质上就是目录挂载,将容器中的目录挂载到本地
- 为了达到容器的持久化和同步操作,容器之间也是可以数据共享的
3.2 使用数据卷
方式一:使用命令挂载
- -v, --volume list Bind mount a volume
- Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG…]
#数据卷命令
docker run -it -v 主机目录:容器内目录
- 进入容器,并挂载容器中的目录
docker run -it -v /home/ceshi:/home centos /bin/bash
- docker inspect 容器ID :查看容器的详细信息,其中就有挂载信息,找Mounts字段
docker inspect c575e50de3c9
"Mounts": [
{
"Type": "bind",
"Source": "/home/ceshi",
"Destination": "/home",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
四、安装MySQL
4.1 获取MySQL镜像
docker pull mysql:5.7
4.2 运行MySQL镜像
- -d, --detach Run container in background and print container ID
- -e, --env list Set environment variables
[root@zhouhao home]# docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
五、具名挂载与匿名挂载
5.1 启动Nginx镜像,匿名挂载
- -p, --publish list Publish a container’s port(s) to the host,随机分配端口号
- -v, --volume list Bind mount a volume
#-v 容器内路径
docker run -d -P -v /etc/nginx --name nginx01 nginx
- 查看所有volume的情况
[root@zhouhao data]# docker volume ls
DRIVER VOLUME NAME
local 44555d070e3a87388d7619150271810ad816f99d870f155d0ee5ec1fae74d3ec
local b08bca742834322fd7a9ced89c1a77734a3779b40f48aec6d2a341297e89863d
5.2 启动Nginx镜像,具名挂载
- 启动nginx镜像,具名挂载方式
#-v 本机路径:容器路径
docker run -d -P -v juming:/etc/nginx --name nginx02 nginx
- 查看volume挂载情况
[root@zhouhao data]# docker volume ls
DRIVER VOLUME NAME
local 44555d070e3a87388d7619150271810ad816f99d870f155d0ee5ec1fae74d3ec
local b08bca742834322fd7a9ced89c1a77734a3779b40f48aec6d2a341297e89863d
local juming
- 查看volume的具体挂载路径
- Usage: docker volume inspect [OPTIONS] VOLUME [VOLUME…]
[root@zhouhao data]# docker volume inspect juming
[
{
"CreatedAt": "2022-02-05T22:45:22+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/juming/_data",
"Name": "juming",
"Options": null,
"Scope": "local"
}
]
- docker中,在本机未指定容器的绝对挂载路径,挂载路径默认为/var/lib/docker/volumes
- 通过具名挂载可以方便的找到容器中文件的挂载路径
5.3 如何判断是具名挂载,或者匿名挂载
- -v 容器内路径 :是匿名挂载
- -v 卷名:容器内路径 是具名挂载
- -v /宿主机路径:容器内路径 是指定路径挂载
5.4 拓展
- ro :read only
- rw: read write
docker run -d -P -v juming:/etc/nginx:ro --name nginx02 nginx
docker run -d -P -v juming:/etc/nginx:rw --name nginx02 nginx
- ro,只能通过宿主机修改文件,容器内容是无法修改文件
- rw,默认是该模式