# docker命令行学习
## docker run
- docker run --help:老实说这条最管用了
- docker run -it:交互模式,允许控制台输出
- docker run -d:detach,以后台进程的形式运行,可以与-it同时生效
- docker run --name "your docker name":指定名称,可以在后续操作替代id
- docker run -v {host path}:{docker path}:挂载磁盘,下面详细说
- docker run --rm: Automatically remove the container when it exits,结束后自动删除docker,省去了docker rm的操作
- docker run -p {host port}:{docker port}:指定端口映射关系,冒号前是宿主机的端口,冒号后是容器的端口
- docker run --restart {mode}:支持重启的容器,三种模式:no/on-failure/always,看名字就知道是干嘛的了
### docker run -v
重点学习一下docker run -v这个磁盘挂载操作:
参考: [关于Docker目录挂载的总结](http://www.linuxidc.com/Linux/2015-09/123519.htm)
挂载磁盘的目的是将宿主机的目录挂载到容器中,这样可以达到宿主机和容器共享一个目录,从而更方便的共享数据。
值得注意的是,当在宿主机或容器中修改了目录内的内容或是目录的权限,相应的映射目录也会进行改变,但是如果是容器被删除,宿主机内的目录并不会被删除,但是反之则会。
列出几点关键点:
- 容器目录不可以为相对路径
- 宿主机目录如果不存在,则会自动生成
- 宿主机的目录如果为相对路径,会在/var/lib/docker/volumes/下创建目录
- 如果只是-v指定一个目录,随机生成的一个目录名
- 挂载宿主机已存在目录后,在容器内对其进行操作,报“Permission denied”
## docker logs
- docker logs {docker_id/docker_name} :查看日志(控制台输出)
- docker logs -f {docker_id/docker_name} :类似tail -f 实时查看输出
## docker exec
- docker exec -it {docker_id/name} /bin/bash:进入后台运行的容器的交互模式
## docker build
- docker build -t {tag_name} {Dockerfile dir}:根据目录下的Dockerfile文件构建一个镜像,-t指定其名称和tag