Docker实用工具_小啊宇的博客-程序员宅基地_docker whaler

技术标签: Docker  运维  docker  

Docker最佳实践

最近发现两个非常好用的工具,一个是runlike,一个是whaler

  • runlike:通过容器打印出容器的启动命令
  • whaler:通过镜像导出dockerfile
    在这里插入图片描述

听起来是不是想说N…B…哈哈,那就走起?

找回Docker容器运行的命令

平时可能因为测试或者一些规范的操作方式导致启动一个容器,忘记了这个容器的启动命令是什么了,又需要找回来在别的机器上创建的时候,就很麻烦,可能很多人会想到通过docker inspect分析输出的json文件中的volume、ports、Env等

docker inspect $container_name

这个命令应该是很熟悉的,查看容器的基本信息。
在这里插入图片描述
虽然这样也能找到运行容器的命令,但是依旧还需要时间去整理,因此这里分享一个可以直接打印运行命令的工具runlike[1],在runlike传递一个容器名称,就会直接打印出该容器的运行命令。runlike使用起来非常方便,可以直接通过pip安装,也可以通过容器方式免安装使用:

# pip
pip install runlike
# by docker
alias runlike="docker run --rm -v /var/run/docker.sock:/var/run/docker.sock assaflavie/runlike"

下面还是通过上面那个容器测试一下是否可以:
在这里插入图片描述
这样使用起来就方便很多了。关于runlike一些其他的选项,可以直接通过–help学习。

从镜像导出Dockerfile

平时可能会构建很多不同的镜像,比如维护一些基础Docker镜像、想查看一些公开仓库的Docker镜像是怎么构建的,或因为长时间不维护找不到当时构建镜像的Dockerfile,或者因为网络无法查看时,能从镜像导出Dockerfile就显得很重要,这里可以通过whaler[2]来快速的导出. 这里我们依旧不安装,通过容器化的方式使用dfimage命令,便于使用,我们将该命令写成命令别名

# alias export docker image to dockerfile
alias whaler="docker run -t --rm -v /var/run/docker.sock:/var/run/docker.sock:ro pegleg/whaler"

然后通过whaler命令输出pegleg/whaler镜像的dockerfile文件:
在这里插入图片描述
这样就输出pegleg/whaler这个镜像的Dockerfile大致的内容了,还是彩色的输出呢?哈哈,有心了。从上图可以看到输出的dockerfile也与平常写的不太一样,可以在github上看下仓库内的dockerfile文件

FROM golang:1.14.4 AS builder
WORKDIR $GOPATH
RUN go get -u github.com/P3GLEG/Whaler
WORKDIR $GOPATH/src/github.com/P3GLEG/Whaler
RUN export CGO_ENABLED=0 && go build .
RUN cp Whaler /root/Whaler

FROM alpine:3.12.0
WORKDIR /root/
COPY --from=builder /root/Whaler .
ENTRYPOINT ["./Whaler"]

由dockerfile来看,这个whaler采用的多阶段构建,所以无法输出–from=builder的构建内容,这个锅whaler不背,我们可以换一个镜像看看:
在这里插入图片描述

这个就显示的很自然,很有熟悉的味道了。whaler支持同时分析多个镜像等等功能,这里就不在说了,感兴趣的可以自己看一下。至于whaler是怎么实现的,其实看一下源码就明白了。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_46152207/article/details/117441940

智能推荐

Apache Spark 3.2 内置支持会话窗口_过往记忆的博客-程序员宅基地

Apache Spark Structured Streaming 允许用户在事件时间的窗口上进行聚合。在 Apache Spark 3.2 之前,Spark 支持滚动窗口(tumbl...

浅谈分布式存储之sync详解_勤学-365的博客-程序员宅基地

文章目录前言posixsyncfsyncmsyncfdatasyncO_SYNCsync_file_range前言由于内存比磁盘读写速度快了好几个数量级,为了弥补磁盘IO性能低,Linux内核引入了页面高速缓存(PageCache)。我们通过Linux系统调用(open—>write)写文件时,内核会先将数据从用户态缓冲区拷贝到PageCache便直接返回成功,然后由内核按照一定的策略把...

UE4攀爬系统(一)_十点半的末班车的博客-程序员宅基地_ue4攀爬

UE4攀爬系统参考教程:https://www.bilibili.com/video/BV1yb4y1o7BY?share_source=copy_webUE4攀爬系统最近突然看到一个UP主在做一个攀爬系统的教程,我觉得看完了调试了一下还阔以,就打算更新一个系列,去讲一下大概这个Up主的思路大概是什么样子的。希望能帮助到那些看视频学习只能学到操作但是不太清楚原理是什么样的UE4同好们。首先直接看人物蓝图的tick。今天就先看find climbing rotation 这个函数。看名字应该都猜的到该

Jmeter简单使用介绍_andy585846的博客-程序员宅基地_jmeter介绍与使用

=================================  1.简介Jmeter 是Apache组织开发的基于Java的压力测试工具,开源、多系统,是一款很好的HTTP测试工具。本文介绍Jmeter的基本工程配置流程,并可以使用GUI界面进行基础的测试工作。Jmeter是由Java开发的,所以在运行之前需要安装Jre。  2. 基本测试  2.1 添加线程组

(补充)常用端口大全_weixin_30567225的博客-程序员宅基地

端口大全及端口关闭方法(详细)一 、端口大全 端口:0 服务:Reserved 说明:通常用于分析操作系统。这一方法能够工作是因为在一些系统中“0”是无效端口,当你试图使用通常的闭合端口连接它时将产生不同的结果。一种典型的扫描,使用IP地址为0.0.0.0,设置ACK位并在以太网层广播。 端口:1 服务:tcpmux 说明:这显示有人在寻找SGI Irix机器。...

2017.7.24 mdns移植到407_taoluster的博客-程序员宅基地_lwip mdns

一、 (1)明确近期工作任务; 博世项目(移植库函数后以太网相关功能确认(MQTT、modbus tcp)、新增部分代码标准化及模块化、MQTT(加密及非加密)与tls modbus tcp同时运行是否存在异常、关于加密签名确认) (2) 理解: 近期主要学习了解MQTT 与Modbus tcp 相关知识,在没有TLS加密情况下先跑起来,观察相关现象。 了解 加密相关知识。 二、具体工作

随便推点

复选框选中状态判断_seFei_Q的博客-程序员宅基地_判断复选框是否为选中状态

关于复选框选中状态的判断1.checked的选中状态不设置checked是默认不选被选中的,一旦设置checked="false"或者checked = false或者checked="true"或者checked = true或者不设置任何值,都会被解释为选中。<input type="checkbox" name="test" id="test1"/> //未被选中&amp

Eclipse安装Scala,教你如何玩转_燕双鹰...的博客-程序员宅基地_eclipse scala

1、安装eclipse插件,依次点击Help->Eclipse Marketplace,输入scala,点击go,进行搜索2、出现了Scala IDE,点击右下方的Install进行安装4、接下来选中所有,点击confirm确定,选择接受协议,点击Finish等待完成安装,重启eclipse即可5、导入scala项目后可能报错,会不识别,右键configure--选...

怎么升级Android Studio版本,Android studio 2 版本升级 Android studio 3 版本注意事项_我冬天漏脚的博客-程序员宅基地

1. compile 需要改成 implementation 或者 api例:implementation 'com.android.support:support-v4:23.4.0'详细规则 https://blog.csdn.net/yuzhiqiang_1993/article/details/783669852. apt 需要去掉,改成 annotationProcessor例:anno...

AOP原理与操作__大太阳_的博客-程序员宅基地

什么是AOP(1)面向切面编程,利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。(2)通俗描述:不通过修改源代码方式,在主干功能里面添加新功能。AOP底层原理1. AOP底层使用动态代理(1)有接口情况:使用JDK动态代理,创建接口实现类的代理对象,增强类的方法。(2)没有接口情况:使用CGLIB动态代理,创建当前类的子类代理对象,增强类的方法。2. AOP(JDK动态代理)(1)使用JDK动态代理,使用Proxy

Python程序运行中防止意外Ctrl+C按键致程序终止_str999_cn的博客-程序员宅基地_python 按键退出程序

Python网络爬虫往往需要连续运行很长时间。期间,运行过程中会随时输出一些状态信息,供分析查看。在此过程中,有时会选择所需信息,然后习惯性地点击Ctrl+C进行复制操作,啊哦~~~~ 不妙!对于运行中的Python来说,这也会导致发出退出运行的信号。于是我们就看到如下的画面:KeyboardInterrupt异常!怎么办?如果不想因为一个粗心大意的按键而导致程序中途退出,势必需要对退

centos7.5部署kubernetes 1.12.2记录_西丽小帅的博客-程序员宅基地

环境准备部署环境规划如下节点 IP 备注 k8s-master 10.0.0.251 master节点 k8s-node1 10.0.0.252 node节点1 k8s-node2 10.0.0.253 node节点2 部署前准备1.设置各个节点主机名称和配置域名解析注意:各个节点的主机名...

推荐文章

热门文章

相关标签