权威的南通网站建设,网络营销专业就业,网站配置支付宝,网站备案内容WORKDIR WORKDIR指令为Dockerfile中的任何RUN、CMD、ENTRYPOINT、COPY和ADD指令设置工作目录。 如果WORKDIR不存在#xff0c;它将被创建#xff0c;即使它没有在任何后续Dockerfile指令中使用。
语法 : WORKDIR dirpath WORKDIR指令可以在Dockerfile中多次使用。如果提供了…WORKDIR WORKDIR指令为Dockerfile中的任何RUN、CMD、ENTRYPOINT、COPY和ADD指令设置工作目录。 如果WORKDIR不存在它将被创建即使它没有在任何后续Dockerfile指令中使用。
语法 : WORKDIR dirpath WORKDIR指令可以在Dockerfile中多次使用。如果提供了一个相对路径它将相对于前一个WORKDIR指令的路径。例如: # 这个Dockerfile中最后一个pwd命令的输出将是/a/b/c。 WORKDIR /a WORKDIR b WORKDIR c RUN pwd WORKDIR指令可以解析之前使用ENV设置的环境变量。只能使用在Dockerfile中显式设置的环境变量。例如: # 这个Dockerfile中最后一个pwd命令的输出是/path/$DIRNAME ENV DIRPATH/path WORKDIR $DIRPATH/$DIRNAME RUN pwd VOLUME 用于在image中创建一个挂载目录以挂载宿主机上的目录
语法 VOLUME path VOLUME [path] 解释
path代表容器中的目录与docker run 不同Dockerfile中不能指定宿主机目录默认使用docker管理的挂载点
示例 VOLUME [/var/log/“] VOLUME /myvol 案例 在实验dockerfile中的VOLUME 参数之前。
1) 我们先使用docker run -v 来指定一把看看 # 下面的命令是将宿主机上面的/home/data 目录挂载到了容器中/data 目录无论在容器里面还是物理机中修改对应目录下面的内容都会同步 [rootdocker01 ~]# docker run --name test -it -v /home/data:/data centos /bin/sh # 容器中加入一个文件 sh-4.4# cd /data/ sh-4.4# ls sh-4.4# pwd /data sh-4.4# echo hello 1.txt sh-4.4# cat 1.txt hello # 物理机中查看一下 [rootdocker01 dockerfiledaemon]# cat /home/data/1.txt hello # 查看一下容器的详情 [rootdocker01 dockerfiledaemon]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8c11c574a6e7 centos /bin/sh 3 minutes ago Up 3 minutes test [rootdocker01 dockerfiledaemon]# docker inspect 8c11c574a6e7 Mounts: [ { Type: bind, Source: /home/data, Destination: /data, Mode: , RW: true, Propagation: rprivate } ], 2) 使用 docker run -v 参数但不指定物理机的目录 # 启动一个docker 实例 [rootdocker01 ~]# docker run --name test -it --rm -v /data centos /bin/sh # 查看容器运行情况 [rootdocker01 dockerfiledaemon]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d42f7d885c87 centos /bin/sh 6 seconds ago Up 4 seconds test # 从下面可以看到source 的路径是自动分配的一个目录 [rootdocker01 dockerfiledaemon]# docker inspect d42f7d885c87 Mounts: [ { Type: volume, Name: fa853d8d48b38edf36af1064854f5d85102c577dc2581184b979479be21495ed, Source: /var/lib/docker/volumes/fa853d8d48b38edf36af1064854f5d85102c577dc2581184b979479be21495ed/_data, Destination: /data, Driver: local, Mode: , RW: true, Propagation: } ], 3 使用dockerfile中挂载点进行 通过docker run命令的-v标识创建的挂载点只能对创建的容器有效。 通过dockerfile的 VOLUME 指令可以在镜像中创建挂载点这样只要通过该镜像创建的容器都有了挂载点。但在dockerfile中无法指定主机上对应的目录是自动生成的。 # 新建一个dockerfile FROM centos VOLUME [/data1,/data2] # 构建镜像 [rootdocker01 dockerfiledaemon]# docker build -t volume:01 . Sending build context to Docker daemon 2.048kB Step 1/2 : FROM centos --- 300e315adb2f Step 2/2 : VOLUME [/data1,/data2] --- Running in 2ac39c2c1918 Removing intermediate container 2ac39c2c1918 --- 65ce3fb0ff1a Successfully built 65ce3fb0ff1a Successfully tagged volume:01 [rootdocker01 dockerfiledaemon]# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE volume 01 65ce3fb0ff1a 14 seconds ago 209MB # 创建一个容器 [rootdocker01 dockerfiledaemon]# docker run -it --name volumename volume:01 /bin/sh sh-4.4# # 查看容器id [rootdocker01 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 071fdcf0a2eb volume:01 /bin/sh 26 seconds ago Up 24 seconds volumename # 查看挂载点会发现一共有两个自动挂载的目录 [rootdocker01 ~]# docker inspect 071fdcf0a2eb Mounts: [ { Type: volume, Name: 479d38b89f7eb8cbf52fa4b50f1e7c0caf358707bca418a46dcc330b43983817, Source: /var/lib/docker/volumes/479d38b89f7eb8cbf52fa4b50f1e7c0caf358707bca418a46dcc330b43983817/_data, Destination: /data2, Driver: local, Mode: , RW: true, Propagation: }, { Type: volume, Name: 926f1a3c58d1574433b0488b1f8b0a88011e1143925621729c6ba5b8fd2b5150, Source: /var/lib/docker/volumes/926f1a3c58d1574433b0488b1f8b0a88011e1143925621729c6ba5b8fd2b5150/_data, Destination: /data1, Driver: local, Mode: , RW: true, Propagation: } ],