docker常用命令

Posted traditional

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker常用命令相关的知识,希望对你有一定的参考价值。

楔子

由于docker的命令比较多,有时候容易记混,所以把docker的一些常用的命令给记录下来,然后使用的时候如果忘记了可以Ctrl+f通过关键字查找。所以这篇博客只是记录了命令是干什么的,具体细节不会说太多、也没有举例说明。只是为了让你在记不清某个命令的时候、能够快速查找。

基础命令

docker version:查看docker的版本信息

docker info:查看docker内部详细信息,如:有多少镜像、多少容器、等等一大堆的信息。

docker --help:帮助命令

镜像命令

docker images [options]:列出本机存在的所有镜像

  • -a:包含中间镜像层
  • -q:只显示镜像的id
  • --digests:显示摘要信息
  • --no-trunc:显示完整的镜像信息

docker search?[options] 镜像:搜索镜像

  • --no-trunc:显示完整的镜像信息
  • --filter=stars=n:列出stars数不小于n的镜像
  • --automated:只列出automated build的镜像

docker pull 镜像[:TAG]:下载镜像

docker rmi -f 镜像:强制删除一个镜像

docker rmi -f 镜像1 镜像2 镜像3...:强制删除多个镜像

docker rmi -f $(docker images -aq)或者docker images -aq | xargs docker rmi -f:删除全部镜像

容器命令

docker run [options] 镜像:根据镜像创建一个容器并启动

  • --name="容器名字":为启动的容器指定一个名字,这样就可以根据指定的名字来找到对应的容器了,所以多个容器的名字一定是唯一的
  • -d:后台运行,会返回启动容器的id
  • -i:交互式模式启动,通常和-t一起使用
  • -t:为容器重新分配一个伪输入终端,通常和-i一起使用
  • -P:端口映射,这个映射是随机的
  • -p:指定端口映射,比如5000:8000

docker ps [options]

  • -a:列出所有运行过的容器,包含历史上运行过的
  • -q:只显示容器id
  • -n:显示最近创建的n个容器
  • -l:显示最近创建的容器
  • --no-trunc:不截断输出

exit:停止容器、然后退出

Ctrl+p+q:容器不停止、退出

docker start 容器id或容器名:启动之前创建的容器

docker restart 容器id或容器名:重启之前创建的容器?

docker stop 容器id或容器名:停止正在运行的容器,温柔停止,类似于关机

docker kill 容器id或容器名:停止正在运行的容器,强制停止,类似于拔电源

docker rm -f 容器id或容器名:强制删除一个容器

docker rm -f 容器1 容器2 容器3...:强制删除多个容器

docker rm -f $(docker ps -aq)或者docker ps -aq | xargs docker rm -f:删除全部容器

docker logs -f -t --tails n 容器:查看容器内部的输出信息

  • -f:跟随最新的日志打印
  • -t:加入时间戳
  • --tails n:显示最后多少条

docker top 容器:显示容器的内部信息

docker inspect 容器:查看容器的内部细节

docker attach 容器:进入正在运行的容器

docker exec -it 容器 bash:打开一个新终端,执行shell命令

  • docker exec -it container1 ls /:如果是/bin/bash,那么就会新建一个终端进行交互;但如果是像这里的ls /,只是一个bash命令,那么会查看容器的/目录,然后直接回到宿主机上。
  • 但是上面的只能执行一个bash命令,如果执行多条,docker exec -it /bash/bash -c "多条shell命令",执行完毕同样会回到宿主机上

docker cp 容器:容器目录路径 宿主机目录路径:将容器内的文件拷贝到宿主机上

  • docker cp container:/a.py /root/aa.py,将容器内/下的a.py拷贝到宿主机的/root目录下,重命名为aa.py

docker save 镜像 > xxx.tar:将镜像保存为一个tar包

  • docker save image1 > image1.tar,这样可以把tar拷贝到其他机器上

docker load < xxx.tar:将tar包加载为镜像

  • docker load < image1.tar,这样可以把从其它机器上拷贝过来的tar包变成一个镜像

docker commit -a="作者" -m="提交的信息" 容器 镜像:将一个容器commit成一个镜像

  • docker commit -a="satori" -m="容器变镜像" container1 image1,当一个容器内部的参数都设定好之后commit成一个镜像,这样在启动该镜像的时候,生成的容器就是我们之前内部参数都设定好的容器

docker diff 容器:查看容器内部的变化

docker history 镜像:查看一个镜像的形成历史

docker pause 容器:暂停一个容器

docker unpause 容器:恢复暂停的容器

docker wait 容器:阻塞、直到容器退出、然后打印退出时候的状态值

数据卷

docker run -v 宿主机绝对 目录路径:容器绝对目录路径 镜像名:启动一个容器、并关联目录

  • docker run -it -v /root/data:/data centos,根据镜像centos创建一个容器,并且此时宿主机的/root/data目录和容器的/data目录进行关联,对任何一方的操作都会同步到另一方
  • docker run -it --privileged=true -v /root/data:/data centos,有时候会发现没有权限,那么就加上--privileged=true即可
  • docker run -it -privileged=true -v /root/data:/data:ro centos,我们在容器的目录后面加上了:ro,这表示容器的目录是只读的,否则如果容器把/data目录的内容全删了,那么宿主机的/root/data里面的内容也会跟着删除,这比较危险。于是在容器目录的后面加上:ro,表示容器不能修改内部的/data这个目录
  • docker run -it -v /dir1:/dir1 -v /dir2:/dir2 centos,也可以同时挂在多个目录

docker build -f dockerfile文件 -t 生成的镜像名 生成在哪个目录(一般是当前目录、直接写一个.即可):根据dockerfile生成一个新的镜像。

  • dockerfile我们后面会单独说,这里只是为了引出数据卷

    FROM centos
    VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
    CMD echo "finished,--------success1"
    CMD /bin/bash
  • 这里我们通过VOLUME指令手动指定了两个容器目录,那么在根据这个镜像创建容器的会自动和宿主机的目录进行关联,可能有人发现了,为什么没有宿主机的目录。这是因为dockerfile可以在任意地方构建,如果你指定了当前宿主机上的某个目录,但是docker无法保证每一台机器都有这样的目录。所以docker不要求指定宿主机的目录,会自动创建宿主机的目录。至于创建的目录叫什么、在什么位置,我们可以通过docker inspect查看

docker run --volumes-from 容器 镜像:将镜像生成的容器挂在到指定的容器上。

  • 我们指定的容器要是已经挂载到宿主机的容器上

dockerfile解析

先来看看dockerfile的关键字

  • FROM 镜像:表示要创建的镜像是基于哪一个镜像
  • MATAINER "作者信息":镜像作者的姓名、地址等信息
  • RUN 命令:构建镜像时执行的命令,多个命令使用&&分割,如果换行使用进行转义。当然也可以写多个RUN,只是不推荐,因此每RUN一次镜像都会多一层,如果你RUN的命令比较多,那么每一个命令都RUN一次,那么最终生成的镜像会非常大,因此建议把多个RUN后面的命令使用&&连在一起,RUN一次即可
  • EXPOSE 端口:容器对外暴露出的端口
  • ENV fs /data:设置环境变量,比如这里把/data设置成了fs,以后找/data这个目录的时候就可以通过$fs来查找了
  • WORKDIR $fs:一个落脚点,当容器启动之后默认所在的目录,这里就是/data目录
  • ADD 宿主机目录 镜像目录 "或者" ADD ["宿主机目录", "镜像目录"] :将宿主机的文件或者目录拷贝到镜像
  • COPY:格式和ADD一样,只不过ADD会自动处理tar包
  • VOLUME:数据卷,我们刚才介绍过的
  • CMD 命令:提交一个容器启动时要运行的命令,DockerFile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run -it centos之后的参数替换
  • ENTRYPOINT 命令:作用和CMD一样,只不过被docker run -it centos之后的参数不是替换、而是会追加
  • ONBUILD:当个构建一个被继承的DockerFile时运行命令,当父镜像被子镜像继承后,子镜像运行时,父镜像会触发onbuild,类似于一个触发器。或者理解为是父镜像里面的一个回调函数,当子镜像运行时,会触发父镜像的回调函数。

docker网络

docker network ls:查看所有的网络

docker network create -d bridge 网络:创建一个网络

docker network inspect 网络:显示该网络的所有信息

docker network rm 网络:删除一个网络,只能删除自己创建的,默认的bridge无法删除。

docker network prune:移除所有无用的网络。

docker run -it --link 容器:容器别名 -d 网络 镜像:创建一个容器,此时的容器就和我们指定的容器进行了连接,我们通过连接的容器名、容器id、我们起的容器别名都可以访问对应的容器。如果不指定"-d 网络"的话,那么默认走的bridge。注意可以同时连接到多个网络,同时可以设置环境变量,比如通过-e PASSWORD=123,就可以通过PASSWORD得到123

docker network connect 网络 容器:将容器连接到一个网络上

docker network disconnect 网络 容器:将容器从连接的网络上取消

以上是关于docker常用命令的主要内容,如果未能解决你的问题,请参考以下文章

Docker 常用命令

docker常用命令速查

Docker 常用命令

Docker 常用命令

Docker删除报错:Error response from daemon: conflict: unable to delete 08b152afcfae (must be forced)(代码片段

提效小技巧——记录那些不常用的代码片段