zoukankan      html  css  js  c++  java
  • 15 个 Docker 技巧和提示

    CLI(Command Line Interface,命令行)

    好的 docker ps 输出

    将 docker ps 输出通过管道重定向到 less -S,避免折行:

    docker ps -a | less -S

    跟随 logs

    docker logs 默认情况下不会观察日志,除非你使用 -f 参数:

    docker logs <containerid> -f                                                        

    docker inspect 输出漂亮的 JSON

    docker inspect 默认输出大量的 JSON,可以通过 jq 提取需要的那些值:

    # list IP addresses for all containers connected to 'bridge' network
    docker network inspect bridge -f '{{json .Containers}}' | jq '.[] | {cont: .Name, ip: .IPv4Address}

    也可以像下面这样在 docker inspect 中使用内置的模板:

    # is the last run container still running?
    docker inspect --format '{{.State.Running}}' $(docker ps -lq)

    Docker 命令完成

    Docker CLI 语法非常丰富,而且还在不断充实:添加新的命令和参数。要记住每个命令和参数几乎不可能,所以在终端上能自动完成这些命令很有必要。

    命令完成是一个终端插件,通过 Tab 键,它会自动完成或建议你接下来要输入的内容。Docker 命令完成功能对命令和选项都能生效。Docker 团队为 Bash shell 和 Zsh shell 下的 docker、docker-machine 和 docker-compose 命令提供完成功能。

    清理

    使用一段时间 Docker 之后,没用的东西开始增长:不用的卷、网络、已退出的容器和不用的映像等。

    prune:运行全部

    prune 是个非常有用的命令(可在 vaume 和 network 子命令中使用),但它从 Docker 1.13 开始才有。如果你使用旧的 Docker 版本,下面的命令可用于代替 prune 命令。

    docker system prune

    移除悬空卷

    悬空卷是不被任何容器使用的卷。若要移除它们,需要结合两个命令:首先列出悬空卷的 ID 然后移除它们。

    docker volume rm $(docker volume ls -q -f "dangling=true")

    删除已退出的容器

    这个操作与上面的步骤相同。首先列出要删除(通过过滤)的容器(仅 ID)然后删除它们(参考 rm -f 强制删除)。

    docker rm $(docker ps -q -f "status=exited")

    删除悬空映像

    悬空映像是未标记的映像,它们是映像树的叶节点(不是中间层)。

    docker rmi $(docker images -q -f "dangling=true")

    网络

    Docker 内部有一个保存 IP 地址的 IP 地址池。这些 IP 地址默认对外不可见,需要通过桥接进行访问。

    查找端口映射

    docker run 接收明确的端口映射参数,你也可以使用 -P 来自动映射所有端口。后者的优势在于可以防止冲突, 可以通过下面的命令查找已经分配的端口:

    docker port <containerId> <portNumber>
    # 或
    docker inspect --format '{{.NetworkSettings.Ports}}' <containerId>

    容器 IP

    每个容器在私有子网中都有自己的 IP (默认是 172.17.0.0/16)。重启可以改变 IP,如果你需要,可以查询:

    docker inspect --format '{{.NetworkSettings.IPAddress}}' <containerId>

    docker 会检查冲突并会在必要的时候使用不同的子网。

    接管主机的网络栈

    docker run --net=host 允许使用主机的网络栈。不要干这种事情 :)

    使用另一容器的网络栈

    $ docker run --net=container:<name|id> ...

    新容器可以附加到另一个容器使用的网络接口。目标容器可以通过 ID 或名称指定。

    可附加的覆盖网络

    使用集群模式的 Docker 引擎可以在一人管理节点的覆盖网络上创建多个主机。创建集群服务的时候你可以将其附加到之前创建的覆盖网络。

    有时候你需要将新的 Docker 容器(填充不同的网络工具)附加到已经存在的覆盖网络,以检查网络配置或调试问题。你可以使用 docker run 命令来完成,不需要创建全新的调试服务。

    Docker 1.13 为 docker network create 命令添加了一个新选项:attachable。这个选项允许手工附加容器。

    # create an attachable overlay network
     docker network create --driver overlay --attachable mynet
    # create net-tools container and attach it to mynet overlay network
    docker run -it --rm --net=mynet net-tools sh

    自动启动容器

    在 Docker 容器中运行的某个进程可能会有很多原因失败。某些情况下,可以通过重新运行失败的容器来修复。如果你在使用 Docker 业务流引擎,像 Swarm 或 Kubernetes,失败的服务会自动重启。

    如果没有自动重启,那么你可能希望根据容器中主进程的退出代码来重启容器,或者直接重启容器(不管退出代码)。Docker 1.12 给 docker run 命令添加了 restart 参数来处理这种情况。

    总是重启

    配置重启策略为总是重启,这样一但容器退出,Docker 就会重启它。

    docker run --restart=always my_image

    失败时重启容器

    配置重启策略为失败时重启,最大重启尝试次数为 10。

    docker run --restart=on-failure:10 my_image
  • 相关阅读:
    安装virtualbox后无法上网
    win8 添加语言现象 (中英文切换路径)
    pre-condition & post-condition
    win8系统 host process for windows tasks has stopped working
    Chrome一直提醒要翻译网页
    百度首页导航设置
    停止windows8自动下载更新系统
    win8 添加开机启动项 (类似win7系统中开始->选择要启动的程序)
    扩展欧几里得定理
    UVA1583-Digit Generator(紫书例题3.5)
  • 原文地址:https://www.cnblogs.com/lykops/p/7348025.html
Copyright © 2011-2022 走看看