zoukankan      html  css  js  c++  java
  • 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 网络 容器:将容器从连接的网络上取消

  • 相关阅读:
    文件语音识别Google语音识别学习札记 Windows PC机上测试语音识别Strut2教程java教程
    进程方法Android面试题(二)Strut2教程java教程
    工程选择LibGdx开发环境搭建Strut2教程java教程
    检查点重做检查点队列简单总结Strut2教程java教程
    ORACLE连接数据库(备忘)
    字符扫描剑指Offer读书笔记之第二章2字符替换Strut2教程java教程
    文件函数Django1.5实战第一步之搭建环境,创建工程,运行开发服务器Strut2教程java教程
    算法长度K最短路问题(单源点最短路径+A*算法)Strut2教程java教程
    单位真实世界LibGdxBox2d单位换算Strut2教程java教程
    配置执行【Oracle】无法对所有 EM 相关帐户解锁Strut2教程java教程
  • 原文地址:https://www.cnblogs.com/traditional/p/12308157.html
Copyright © 2011-2022 走看看