什么是容器数据卷
- docker理念:将应用和环境打包成一个镜像
需求:
-
数据持久化,容器之间有个数据共享的技术,MySQL数据可以存储在本地
实现:Docker容器中产生的数据,同步到本地
卷技术:目录的挂载,将我们容器内的目录,挂载到linux上面
使用数据券
方式一
:直接使用命令来挂载:docker run -it -v 主机目录:容器内目录
[root@swl123 ~]# docker run -it -v /home/ceshi:/home centos /bin/bash
再打开一个会话,查看/home路径下的test文件,及元数据
[root@swl123 ~]# docker inspect ffeebfdeccc8
映射路径内是同步的
安装MySQL8
查看这篇博客
- 验证数据持久化
[root@swl123 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
612eaf5c2777 mysql:8.0.26 "docker-entrypoint.s…" 36 minutes ago Up 36 minutes 33060/tcp, 0.0.0.0:3388->3306/tcp, :::3388->3306/tcp mysql8
c6a750b3039f portainer/portainer "/portainer" 5 hours ago Up 5 hours 0.0.0.0:8088->9000/tcp, :::8088->9000/tcp portainer
34fb3c029026 elasticsearch:7.13.3 "/bin/tini -- /usr/l…" 6 hours ago Up 6 hours 0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 0.0.0.0:9300->9300/tcp, :::9300->9300/tcp elasticsearch02
[root@swl123 ~]# docker stop 612eaf5c2777
612eaf5c2777
[root@swl123 ~]# docker rm 612eaf5c2777
612eaf5c2777
[root@swl123 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c6a750b3039f portainer/portainer "/portainer" 5 hours ago Up 5 hours 0.0.0.0:8088->9000/tcp, :::8088->9000/tcp portainer
34fb3c029026 elasticsearch:7.13.3 "/bin/tini -- /usr/l…" 6 hours ago Up 6 hours 0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 0.0.0.0:9300->9300/tcp, :::9300->9300/tcp elasticsearch02
[root@swl123 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ffeebfdeccc8 centos "/bin/bash" 3 hours ago Exited (0) 3 hours ago romantic_sammet
95cd72311ab6 tomcat "catalina.sh run" 4 hours ago Exited (129) 3 hours ago recursing_morse
c6a750b3039f portainer/portainer "/portainer" 5 hours ago Up 5 hours 0.0.0.0:8088->9000/tcp, :::8088->9000/tcp portainer
34fb3c029026 elasticsearch:7.13.3 "/bin/tini -- /usr/l…" 6 hours ago Up 6 hours 0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 0.0.0.0:9300->9300/tcp, :::9300->9300/tcp elasticsearch02
b34c7392ddac nginx "/docker-entrypoint.…" 10 hours ago Exited (0) 7 hours ago nginx01
9cd4a264f0ab centos "/bin/bash" 10 hours ago Exited (0) 10 hours ago angry_cannon
[root@swl123 ~]# docker run -p 3388:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d --name mysql8 mysql:8.0.26 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --lower_case_table_names=1 --skip_name_resolve=no
83aa3f359896f65edd7f8d789543a2ec5dd15349918e0e7003926889ebdfd9b4
[root@swl123 ~]#
- 删除容器后,重新启动,查看数据库,新建的表依然存在
需求解决:
- -
数据持久化,容器之间有个数据共享的技术,MySQL数据可以存储在本地
匿名挂载和具名挂载:
- 匿名挂载: VOLUME NAME是一串字符串
# 查看所有的volume(卷)的情况
[root@swl23 ~]# docker volume ls
DRIVER VOLUME NAME
local 5cfa15c8980f16706a81d8d0e1c71b0a17bb31329176208ba59f2fefa650e918
local a9b588b8a1129dde100d92e1afc5c24a53496408481b520286428edb92e80f5f
local c5d170ea4cab0c667af19c39dbdd05e4effd7f6e48fbc55d553f84e7942fe6e9
local c791d4ddf71e1d0457b832deb6d7d5a3d325089270daef5a43064aa3ccb51756
local e1e83706f9c11e2291ec3e89b65256c5f71112bd29ffb96a482b6355f0519ae4
[root@swl23 ~]#
- 具名挂载实现:VOLUME NAME出现:juming-nginx
[root@swl123 ~]# docker run -P --name nginx02 -v juming-nginx:/etc/nginx -d nginx
f84edc0a32dd233b4804d1910402d615cf64a44b08de66a5decd660847a2a5dd
[root@swl123 ~]# docker volume ls
DRIVER VOLUME NAME
local 5cfa15c8980f16706a81d8d0e1c71b0a17bb31329176208ba59f2fefa650e918
local 34f8af2083d5cb7b4b1414a0c00224a740ea4e9ee5538e6ca3e15ff8fb706724
local a9b588b8a1129dde100d92e1afc5c24a53496408481b520286428edb92e80f5f
local c5d170ea4cab0c667af19c39dbdd05e4effd7f6e48fbc55d553f84e7942fe6e9
local c791d4ddf71e1d0457b832deb6d7d5a3d325089270daef5a43064aa3ccb51756
local e1e83706f9c11e2291ec3e89b65256c5f71112bd29ffb96a482b6355f0519ae4
local juming-nginx
[root@swl123 ~]#
- 查看卷位置:
[root@swl123 ~]# docker inspect juming-nginx
[
{
"CreatedAt": "2021-07-20T21:07:19+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/juming-nginx/_data",
"Name": "juming-nginx",
"Options": null,
"Scope": "local"
}
]
[root@swl123 ~]#
容器内地址为:"Mountpoint": "/var/lib/docker/volumes/juming-nginx/_data"
- 进入容器内路径:
[root@swl123 ~]# cd /var/lib/docker/volumes/juming-nginx/_data
[root@swl123 _data]# ll
total 24
drwxr-xr-x 2 root root 26 Jul 20 21:07 conf.d
-rw-r--r-- 1 root root 1007 Jul 6 22:59 fastcgi_params
-rw-r--r-- 1 root root 5290 Jul 6 22:59 mime.types
lrwxrwxrwx 1 root root 22 Jul 6 23:11 modules -> /usr/lib/nginx/modules
-rw-r--r-- 1 root root 648 Jul 6 23:11 nginx.conf
-rw-r--r-- 1 root root 636 Jul 6 22:59 scgi_params
-rw-r--r-- 1 root root 664 Jul 6 22:59 uwsgi_params
[root@swl123 _data]#
- 熟悉的感觉有木有?
初识Dockerfile
- dockerfile就是用来构建的镜像文件,一段命令脚本,通过这个脚本可以生成一个镜像
- 镜像是一层一层的文件,命令就是每层的一个命令
方式二
:直接使用命令来挂载:docker run -it -v 主机目录:容器内目录
[root@swl123 ~]# cd /home
[root@swl123 home]# mkdir docker-test-volume
[root@swl123 home]# cd docker-test-volume
[root@swl123 docker-test-volume]# pwd
/home/docker-test-volume
[root@swl123 docker-test-volume]# vim dockerfile01
[root@swl123 docker-test-volume]# cat dockerfile01
FROM centos
VOLUME ["/volume01","/volume02"]
CMD "-------end----------"
CMD /bin/bash
[root@swl123 docker-test-volume]# docker build -f /home/docker-test-volume/dockerfile01 -t swl/centos:1.0 .
Sending build context to Docker daemon 2.048kB
Step 1/4 : FROM centos
---> 300e315adb2f
Step 2/4 : VOLUME ["/volume01","/volume02"]
---> Running in 1938b98a8f3d
Removing intermediate container 1938b98a8f3d
---> 6d4f11342d14
Step 3/4 : CMD "-------end----------"
---> Running in 878d97ce5a6a
Removing intermediate container 878d97ce5a6a
---> 1f1618607808
Step 4/4 : CMD /bin/bash
---> Running in 68286e5b21dd
Removing intermediate container 68286e5b21dd
---> a281d33bf80c
Successfully built a281d33bf80c
Successfully tagged swl/centos:1.0
[root@swl123 docker-test-volume]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
swl/centos 1.0 a281d33bf80c 14 seconds ago 209MB
<none> <none> 6a68676d2222 18 minutes ago 209MB
tomcat02 1.0 95e5803af676 5 hours ago 672MB
mysql 5.7 9f1d21c1025a 17 hours ago 448MB
mysql 8.0.26 95db2e2bd882 17 hours ago 514MB
nginx latest 4cdc5dd7eaad 13 days ago 133MB
tomcat 9.0 36ef696ea43d 2 weeks ago 667MB
tomcat latest 36ef696ea43d 2 weeks ago 667MB
elasticsearch 7.13.3 84840c8322fe 2 weeks ago 1.02GB
redis latest 08502081bff6 3 weeks ago 105MB
portainer/portainer latest 580c0e4e98b0 4 months ago 79.1MB
hello-world latest d1165f221234 4 months ago 13.3kB
centos latest 300e315adb2f 7 months ago 209MB
[root@swl123 docker-test-volume]# docker run -it a281d33bf80c /bin/bash
[root@04f4ed31930b /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var volume01 volume02
[root@swl123 docker-test-volume]# vim dockerfile01
FROM centos // FROM 基础镜像
VOLUME ["/volume01","/volume02"] // 设置容器的挂载卷
CMD "-------end----------" // CMD窗口,打印,本来打印应该加上echo的
CMD /bin/bash // CMD窗口,启动器
- 查看容器信息
[root@swl123 ~]# docker inspect 04f4ed31930b
"Mounts": [
{
"Type": "volume",
"Name": "7397b7e1cad2bace69a002ef7f20330646d2e9854d2ece27f360b40b1f045ef0",
"Source": "/var/lib/docker/volumes/7397b7e1cad2bace69a002ef7f20330646d2e9854d2ece27f360b40b1f045ef0/_data",
"Destination": "/volume01",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
},
{
"Type": "volume",
"Name": "45f434497f375c356b7f5a2eb3c0997cd544f80639876576f0fe474cf9f2776e",
"Source": "/var/lib/docker/volumes/45f434497f375c356b7f5a2eb3c0997cd544f80639876576f0fe474cf9f2776e/_data",
"Destination": "/volume02",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],