挂载 volumes
docker run 的时候,如果需要挂载宿主机的某个目录,可以这样
docker run -it -v <host-path>:<container-path> <image>
这里要注意以下几个地方:
<host-path>
和<container-path>
都必须是目录<container-path>
必须是容器中的绝对路径<host-path>
路径如果不存在,执行完成之后,docker 会给宿主机创建该目录;<host-path>
可以使用相对路径,但是相对的并不是当前的工作目录,而是/var/lib/docker/volumes/
如果只有一个路径,比如
docker run -it -v <path> <image>
,这种情况叫做匿名挂载,<image>
表示的是 container 中的位置,宿主机会在/var/lib/docker/volumes/
下随机创建一个目录与 container 中的<path>
对应不管以何种方式 mount,容器销毁之后,由
-v
在宿主机上创建的目录不会销毁在 container 中可以修改挂载目录下文件的属性,并且在宿主机上查看时一样会生效。但是需要注意一点,如果在 container 中修改了文件的 owner 为 John,在宿主机上产看的时候,该文件的 owner 不一定还是 John。但该文件的 uid 是一样的,至于显示的名称不一样,是因为 container 和 host 的
/etc/passwd
文件内容不同
以上结果都可以通过 docker inspect <container>
结果中的 Mounts 查看。
dockerfile 中的 ENTRYPOINT 和 CMD
看似一样,都是实现 container 启动命令,但是需要注意:
都有两种方式,数组方式,以及 shell 方式
["sh", "-c", "echo hello"]
sh -c 'echo hello'
ENTRYPOINT 除了指定 container 入口之外,更重要的作用是: 通过它可以让一个 container 像一个 executable 一样。比如
ENTRYPOINT ["/bin/sh"]
之后 build 出来的镜像就像一个 sh 程序文件一样,运行该 image,就像运行 sh 程序。
如果 ENTRYPOINT 指定了,并且采用了数组方式,即
["exectable", "para1", "para2"]
,那么 CMD 指定的内容会被视为 ENTRYPOINT 数组中最后的一个参数如果 ENTRYPOINT 使用 shell 方式,那么它会覆盖所有的 CMD 以及
docker run
后面指定的 commanddocker run
后面指定的 command 会取代 CMD 的内容
作者:accepting
链接:https://www.jianshu.com/p/3bcb0fe9ed28
共同学习,写下你的评论
评论加载中...
作者其他优质文章