-d #后台运行,执行完命令就会在后台运行,而如果和--rm一起使用的话,执行完就删除,不会在后台运行
对于使用-d
启动的容器,如果要修改容器当中的内容,最好使用容器卷。
-i #分配一个pseudo-tty,这个应该是一个终端
-t #即使没有连接,也保持STDIN打开
-i
和-t
一般一起使用,即进入到容器的终端
--name #指定容器的名称,如果没有指定名称,将为你随机分配一个字符串
Image[:tag] #指定镜像名称和版本信息
docker run ubuntu:14.04
--rm #当容器退出时自动删除容器
--rm
使用场景:默认情况下,容器的文件系统即使在容器退出后也会保存。这样调试就容易多了(因为可以检查最终状态),并且默认情况下保留所有数据。但是如果您运行的是短期前台进程,那么这些容器文件系统可能真的会堆积起来。如果你想要Docker自动清理容器并在容器退出时删除文件系统,你可以添加--rm
标志。
在Docker命令行中调用可选命令:
docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
#这个命令是可选的,因为创建IMAGE的人可能已经使用Dockerfile CMD指令提供了一个默认命令。作为操作者(从image运行容器的人),您可以通过指定一个新的COMMAND来覆盖那个CMD指令。默认在镜像当中只会存在一个CMD,如果这里写命令的话,镜像当中的CMD就不会生效。如果镜像中也指定一个ENTRYPOINT,那么CMD或COMMAND生效的那一个将作为参数附加到ENTRYPOINT。
可以在运行时使用字符串指定新的ENTRYPOINT
来覆盖默认的ENTRYPOINT
。
你可以通过传递一个空字符串来重置容器entrypoint,例如:
docker run -it --entrypoint="" mysql bash
这样上面的只有bash
这个命令会生效。即传入--entrypoint
将清除image
上的任何默认命令设置(即Dockerfile中用于构建它的任何CMD
指令)。
-p(小写) #指定端口号 如: -p 8080:8080
-p ip:主机端口:容器端口
-p 主机端口:容器端口(常用)
-p 容器端口
-P(大写) #大写P,随机指定端口
-e #设置环境变量如:-e "foo=bar"
具名挂载和匿名挂载
#匿名挂载
-v 容器内路径
docker run -d -P --name nginx01 -v /etc/nginx nginx
#查看所有的volume的情况
docker volume ls
#得到的结果类似于
local 5f4a564ga565a1a315e1g312a31fe3515ga313d15eg16e7897g8gq
#上面这种挂载就属于匿名挂载,我们在-v中只写了容器内的路径,没有写容器外的路径
#具名挂载
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx
docker volume ls
local juming-nginx
#通过 -v 卷名:容器内路径 使用具名挂载
#查看这个卷
docker volume inspect juming-nginx
所有的docker容器内的卷,在没有指定宿主机目录的情况下,都是在/var/lib/docker/volumes/卷名/
下,如果是具名挂载,卷名就是我们所用的卷名,如果是匿名挂载,则卷名是随机生成的一连串数字,因此大多数情况下会使用具名挂载,而不是匿名挂载。
#如何确定是具名挂载还是匿名挂载,还是指定路径挂载
-v 容器内路径 #匿名挂载
-v 卷名:容器内路径 #具名挂载
-v /宿主机路径:容器内路径 #指定路径挂载
拓展
#通过 -v 容器内路径:ro 或者 rw 改变读写权限
ro readonly #只读
rw readwrite #可读可写
#一旦这个设置了容器权限,容器对我们挂载出来的内容就会有限制了
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:ro nginx
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:rw nginx
#ro说明这个路径只能通过宿主机来操作,容器内部是无法操作的,默认是rw