23-数据卷之Dockerfile
前面我们通过容器数据卷来做的,现在我们通过Dockerfile来实现
Dockerfile就是用来构建docker镜像的构建文件!命令脚本!
通过这个脚本可以生成镜像,镜像是一层一层的,我们的命令是一个个的命令,一个命令对应一层
我们可以在Dockerfile中使用VOLUME指令来给镜像添加一个或多个数据卷。
下面使用Dockerfile构建一个新的镜像,dockerfile01文件(推荐使用dockerfile的名字)的内容,匿名挂载了volume01和volume02两个目录:
文件中的内容:指令(大写) 参数
FROM centos
VOLUME ["volume01","volume02"]
CMD echo "----end----"
CMD /bin/bash
执行构建镜像
-f:我们脚本的路径
-t:我们生成的镜像的名称,:后面是版本,可加可不加
docker build -f /home/docker-test-volume/dockerfile01 -t ethan/centos:1.0 .
[root@iZwz99sm8v95sckz8bd2c4Z docker-test-volume]# docker build -f /home/docker-test-volume/dockerfile01 -t ethan/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 215ef28fd5a6
Removing intermediate container 215ef28fd5a6
---> f506ddf133d2
Step 3/4 : CMD echo "----end----"
---> Running in 62a1c4b9dc7b
Removing intermediate container 62a1c4b9dc7b
---> bbea81a6e94e
Step 4/4 : CMD /bin/bash
---> Running in 245d239f3776
Removing intermediate container 245d239f3776
---> 1df90e6fd790
Successfully built 1df90e6fd790
Successfully tagged ethan/centos:1.0
[root@iZwz99sm8v95sckz8bd2c4Z docker-test-volume]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ethan/centos 1.0 1df90e6fd790 13 minutes ago 209MB
mytomcat 1.0 f189aac861de 25 hours ago 653MB
mysql 5.7 f07dfa83b528 7 days ago 448MB
tomcat latest feba8d001e3f 11 days ago 649MB
nginx latest ae2feff98a0c 13 days ago 133MB
centos latest 300e315adb2f 3 weeks ago 209MB
portainer/portainer latest 62771b0b9b09 5 months ago 79.1MB
elasticsearch 7.6.2 f29a1ee41030 9 months ago 791MB
启动自己的镜像

这个卷一定和外部有一个同步的目录(我们前面脚本里的卷是匿名挂载)
[root@iZwz99sm8v95sckz8bd2c4Z docker-test-volume]# docker inspect 828d43dba78e
[
{
"Id": "828d43dba78ecaa10e7e57c1091ee8cf3581dae88187aa04163946dfc86bfd76",
"Created": "2020-12-29T15:41:29.297091075Z",
"Path": "/bin/bash",
"Args": [],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 1719,
"ExitCode": 0,
"Error": "",
"StartedAt": "2020-12-29T15:41:34.107755138Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
...
#重点:
"Mounts": [
{
"Type": "volume",
"Name": "c51c75b11a69c526a97a07b03ce2ec74d8e77aa150b736291777c1c204a8aecc",
"Source": "/var/lib/docker/volumes/c51c75b11a69c526a97a07b03ce2ec74d8e77aa150b736291777c1c204a8aecc/_data",
"Destination": "volume01",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
},
{
"Type": "volume",
"Name": "1ae2d34c56c4352ba906b5bc261706b235a07ca2b3c9df6c612bb4380db8983f",
"Source": "/var/lib/docker/volumes/1ae2d34c56c4352ba906b5bc261706b235a07ca2b3c9df6c612bb4380db8983f/_data",
"Destination": "volume02",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
可以看到Mounts下有宿主机的挂载目录。因为dockerfile中没有指定宿主机目录,所以属于匿名挂载,在/var/lib/docker/volumes/目录下生成了随机命名的路径。
cd到/var/lib/docker/volumes/c51c75b11a69c526a97a07b03ce2ec74d8e77aa150b736291777c1c204a8aecc/_data,如果我们在容器的volume01中创建了container.txt文件,那么在这个路径中也一定有这个文件

浙公网安备 33010602011771号