将应用和环境打包乘一个镜像
[root@docker ~]# docker run -it -v 主机目录:容器目录
[root@docker ceshi]# docker run -it -v /home/ceshi/:/home centos /bin/bash
例:
双向过程,在容器内修改东西,宿主机内数据是同步的,反之
实战:Mysql安装
问题:Mysql的数据持久化问题
官方启动方法
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
启动mysql
[root@docker ~]# 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
c751aa1f8c74ff58c5551e8bb62f2c90b58bbab90f7044b296a47fbef8569638
-d 后台运行
-p 端口映射
-v 卷挂载
-e 环境配置
--name 容器的名字
[root@docker data]# docker volume --help
Usage: docker volume COMMAND
Manage volumes
Commands:
create Create a volume
inspect Display detailed information on one or more volumes
ls List volumes
prune Remove all unused local volumes
rm Remove one or more volumes
Run 'docker volume COMMAND --help' for more information on a command.
匿名挂载
[root@docker data]# docker run -d -P --name nginx02 -v /etc/nginx nginx
2a51a0e9b09a4358d94784ba13ba6176d14e57672affee96c2f517930a1b351f
[root@docker data]# docker volume ls
DRIVER VOLUME NAME
local 9666e6bffa6452578375314c5e7be127d7819661019c2ad45338ac2be5f0155e
具名挂载
[root@docker data]# docker run -d -P --name nginx01 -v xiaoming-nginx:/etc/nginx nginx
050eb7bf1fe98d95056e3892a3fdba21e86a277f041ce150cd5fac74205c363c
[root@docker data]# docker volume ls
DRIVER VOLUME NAME
local xiaoming-nginx
docker volume inspect volumename
```
真实位置
[root@docker data]# docker volume inspect xiaoming-nginx
[
{
"CreatedAt": "2020-11-21T21:07:10-05:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/xiaoming-nginx/_data",
"Name": "xiaoming-nginx",
"Options": null,
"Scope": "local"
}
]
查看容器元数据
docker inspect 容器ID
所有docker容器内的卷,没有指定目录的情况下都是在/var/lib/docker/volumes/xxx/_data
通过具名挂载,可以方便找到卷
[root@docker ~]# mkdir ./docker-test-file
[root@docker ~]# cd docker-test-file/
[root@docker docker-test-file]# vim dockerfile01
FROM centos
VOLUME ["volume01","volume02"]
CMD echo "---HHHHHHHHHHAAAAAAAHHHHHHHHH---"
CMD /bin/bash
[root@docker docker-test-file]# docker build -t caq/centos:1.0 -f ./dockerfile01 ./
Sending build context to Docker daemon 2.048kB
Step 1/4 : FROM centos
---> 0d120b6ccaa8
Step 2/4 : VOLUME ["volume01","volume02"]
---> Running in a73113d7e8a3
Removing intermediate container a73113d7e8a3
---> c711b3f50a7d
Step 3/4 : CMD echo "---HHHHHHHHHHAAAAAAAHHHHHHHHH---"
---> Running in 1fb3a0ddd9e4
Removing intermediate container 1fb3a0ddd9e4
---> 3af9104bbb1a
Step 4/4 : CMD /bin/bash
---> Running in 2e403b7bdf30
Removing intermediate container 2e403b7bdf30
---> d31239b293f0
Successfully built d31239b293f0
Successfully tagged caq/centos:1.0
[root@docker docker-test-file]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
caq/centos 1.0 d31239b293f0 About a minute ago 215MB
进入容器会发现建造dockerfiles时挂载的卷,这种挂载属于匿名挂载
![]()
![]()
测试卷同步
[root@docker docker-test-file]# docker run -it d31239b293f0
[root@76da58168b21 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var volume01 volume02
[root@76da58168b21 /]# cd volume01
[root@76da58168b21 volume01]# mkdir 11.22
如果不指定宿主机文件,那么docker会自动分配给宿主机一个位置,通过docker inspect 容器id 可查看到
[root@docker volumes]# cd /var/lib/docker/volumes/3a29756c59c1f5755802283e024f1fec3fa32ed1f3986f663c0326df48950380/_data
[root@docker _data]# ls
11.22
实现容器间卷同步
[root@docker ]# docker run -it --name docker01 caq/centos:1.0 /bin/bash
[root@docker _data]# docker run -it --name docker02 --volumes-from docker01 caq/centos:1.0
[root@docker _data]# docker exec -it docker01 /bin/bash
[root@b2bf96149e27 /]# cd volume01
[root@b2bf96149e27 volume01]# ls
docker01
[root@docker _data]# docker exec -it docker02 /bin/bash
[root@5a79420489d3 /]# cd volume01
[root@5a79420489d3 volume01]# ls
docker01