docker run

挂载数据卷Volumes

  1. # 若目录不存在会自动创建
  2. docker run -it -v /宿主机绝对路径:/容器内路径[:ro|:rw] 镜像名
  3. ro模式下容器不能进行写操作,而不仅仅是不能持久化数据

假如挂载卷后出现没有权限的情况,可以在docker run时添加 —privileged=true 参数。

启动前台程序

  1. docker run -d --name mycentos3 centos /bin/sh -c "while true;do echo hello;sleep 2;done"

docker logs

docker logs —tail 5 输出最后5行日志
docker logs -t 输出日志时间戳

docker commit

  1. # docker commit -a="作者" -m="描述信息" 容器ID 源镜像名:tag
  2. docker commit -a="gw" -m="config" 9061dc8cfdb9 docker.io/mysql:gw
  3. docker run -it docker.io/mysql:gw

docker run

docker run -p hostport:containerport

dockerfile

docker笔记 - 图1

  • ADD 将宿主机的目录下的文件拷贝进镜像且自动处理URL和解压tar包
  • COPY 类似ADD,拷贝文件和目录到镜像中
  • CMD 指定一个容器启动时要运行的命令,Dockerfile中可以有多个CMD命令,但只有最后一个生效,CMD会被docker run之后的参数替换
  • ENTRYPOINT 和CMD一样,都是指定容器启动程序及参数

  1. docker run -it -v /mydata1 -v /mydata2 centos /bin/bash

以上命令可以用如下Dockerfile生成

  1. FROM centos
  2. VOLUME ["/mydata1","/mydata2"]
  3. CMD echo "Success!"
  4. CMD /bin/bash

生成镜像

  1. docker build -f Dockerfile -t gw/centos .

关于镜像层;
Dockerfile中的指令被一条一条的执行。每一步都创建了一个新的容器,在容器中执行指令提交修改。当所有的指令都执行完毕之后,返回最终的镜像ID。所有的中间步骤所产生的容器都被删除和清理了。
一个镜像不能超过127层。


docker attach 和 docker exec的区别:

  • attach 直接进入容器启动命令的终端,不会启动新的进程,可以利用Ctrl+P+Q来退出
  • exec 是在容器中打开新的终端,并且可以启动新的进程