Articles of Docker

如何debuggingDockercaching失效?

Docker有一个很好的caching,但是我在“docker build”输出中看到的只是: —> Using cache 或命令的输出(这意味着它没有使用caching)。 在我的Dockerfile(COPY)一步之后,它显然不使用caching。 但我相当肯定没有任何改变的文件夹,它正在复制。 (这是我们的应用程序,例如,即使在连续部署两次的情况下,我也会遇到无caching的情况)。 有没有办法让Docker告诉我它认为改变了什么? 我知道Docker用来检查时间戳,但在Docker 1.8中已经修复了,我在Docker 1.9.x上。

测量覆盖networking性能的正确方法

我目前正在研究不同的Docker覆盖networking的性能(特别是UDP吞吐量)。 我通过在与Docker覆盖networking连接的两个主机之间创build点对点连接,然后在Docker容器内运行iperf来检查吞吐量来做到这一点。 我注意到,每次我运行iperf作为客户端发送数据到运行iperf作为服务器的其他容器,客户端主机的CPU使用率达到100%。 我通过运行下面的命令得到了这个结果: top -bn1 | grep "Cpu(s)" | \ sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | \ awk '{print 100 – $1"%"}' 所以,对我来说,吞吐量testing的限制因素似乎是我的主机的CPU容量,因为它运行在100%,不能产生更多的stream量来饱和networking连接。 我想知道如果这是一个iperf具体问题,所以我想用一个不同的工具运行相同的testing,但不知道哪个替代将是最好的 。 主机正在运行Ubuntu。 例如,我find了qperf , uperf和netpipe 。 另外,更一般地说,我开始想知道通常吞吐量性能的瓶颈是什么。 它不是总是CPU容量或链接的带宽 ? 哪些是与覆盖networking不直接相关的因素。 这是否意味着应用程序(或覆盖networking)的吞吐量仅取决于传输一定数量的数据所需的CPU周期数,以及如何通过networking对其进行压缩(如果这将是瓶颈的话)。

iptables LOG规则在一个networking命名空间内

我正在尝试为Docker容器设置iptables规则。 我使用nsenter在容器的networking命名空间内执行iptables命令: # log access to port 8080 PID=$(docker inspect –format "{{.State.Pid}}" $ID) /home/ubuntu/nsenter -n -t $PID iptables -A OUTPUT -o eth0 -p tcp -m tcp –dport 8080 -j LOG 除了LOG规则以外,这种方法可以很好地工作 那些似乎没有login任何地方。 请注意,应用于主机系统的相同规则工作并logging到/var/log/kern.log 。 我在哪里可以find这些日志规则的输出? 这是networking命名空间的已知问题/限制吗?

使用让我们在Docker官方的WordPress容器中encryption

我试图让我们在官方的Docker WordPress容器内encryption。 设置环境 $ cat docker-compose.yml wordpress: hostname: some.fqdn.com image: wordpress links: – db:mysql ports: – 80:80 – 443:443 db: image: mariadb environment: MYSQL_ROOT_PASSWORD: example $ docker-compose -f docker-compose.yml up -d $ docker exec -ti root_wordpress_1 bash 安装让我们encryption $ apt-get update && apt-get install -y git-core […] $ cd /usr/local $ git clone https://github.com/letsencrypt/letsencrypt […] […]

设置UFW default_forward_policy接受的安全含义?

docker手册( http://docs.docker.com/installation/ubuntulinux/#docker-and-ufw )指出,将UFW DEFAULT_FORWARD_POLICY设置为“ACCEPT”是必要的,因此docker集装箱可以互相访问。 在具有可公开访问的networking接口的服务器上这样做的安全含义是什么? 应该做些什么来保护这样的docker主机?

tail -f不在Docker容器中的日志文件之后

我看到一些奇怪的行为在CoreOS的Docker容器中运行tail -f命令。 我可以想到的一些变数可能会导致这个问题,但我不确定我需要做什么来排除故障。 在CoreOS上,我正在运行带有overlayfs支持的最新版本,以及更新版本的Docker(1.4.1)。 有趣的是,我能够在运行不同版本的Docker(1.3)的不同主机操作系统(Ubuntu 14.04)上成功挂载日志。 我可以生成strace日志,如果这有助于排除故障,他们似乎是不同主机之间的显着不同。 例如,在不工作的主机上,在strace输出中读入以下内容后,停止strace: 04:03:03 inotify_add_watch(4, "f017f0a1-a1e9-11e4-90bc-027e0f87cac6-paster.log", IN_MODIFY|IN_ATTRIB|IN_DELETE_SELF|IN_MOVE_SELF) = 1 <0.000028> 04:03:03 fstat(3, {st_mode=S_IFREG|0644, st_size=12229, …}) = 0 <0.000022> 04:03:03 read(4, 0x7711f0, 64) = ? ERESTARTSYS (To be restarted if SA_RESTART is set) <3.101545> 我只是不太熟悉strace,非常善于解释结果。

将物理接口专门分配给docker

我想在docker集装箱中运行一个高性能的networkingtesting,并且不希望桥接的开销(所以pipeworks将不起作用)。 我想分配一个物理的40GbEnetworking接口(除了普通的docker veth设备之外),就像在lxc“phys”模式下一样,从主机到Docker容器。 这应该导致物理接口对主机不可见。

链接的docker集装箱不能通过暴露的端口到达

我有两个容器的docker-compose.yml文件: containerA: … ports: – "80:9000" containerB: … links: – containerA 我期待的是从containerB上有一个containerA通过80端口到达,但它只能通过9000端口到达。80端口只能从主机看到。 有没有办法使容器的containerA 9000端口可以通过80端口的所有容器链接到,而不仅仅是主机?

在Docker中运行nginx时,我应该如何configurationSELinux

Docker的文档中有一篇关于Docker安全性的好文章: https : //docs.docker.com/articles/security/ 但是,我并不清楚容器中的根特权进程是如何在主机系统中运行的,以及我应该如何configurationSELinux来处理进程在容器外“泄漏”的风险。 例如,我在一个容器中运行nginx,当我在容器外部执行“ps”时,我可以看到所有的nginx进程。 根7281 4078 0 01:36? 00:00:00 nginx:主进程nginx www-data 7309 7281 0 01:36? 00:00:00 nginx:工作进程 www-data 7310 7281 0 01:36? 00:00:00 nginx:工作进程 www-data 7311 7281 0 01:36? 00:00:00 nginx:工作进程 www-data 7312 7281 0 01:36? 00:00:00 nginx:工作进程 这并不奇怪,因为这是Docker工作的方式 – 这不是虚拟化,虚拟机之外什么都不显示。 使用Docker,容器的进程在名称空间和有限权限内的主机操作系统上运行。 他们直接与主机内核通话。 在这种情况下,我相信我应该configurationSELinux来保护nginx进程而不是docker的进程,就像在没有docker的情况下运行一样。 那是对的吗? 另外,是否有任何特定的Dockerconfiguration更适合运行像nginx这样的web服务器?

我是否需要一个支持Virtuallization进行集装箱化的CPU?

我读过容器化比虚拟化便宜。 我知道容器化比虚拟化使用的资源要less,因为只涉及一个操作系统,没有虚拟化的硬件。 但是,我需要一个支持虚拟化的CPU来运行容器化,例如Docker,或者因为它使用容器中的操作系统库运行应用程序,我可以在没有虚拟化的情况下在CPU上运行它吗?