以下 BASH 脚本在 Docker 容器中下载并构建mpv(https://github.com/mpv-player/mpv-build),并使用 netcat 将文件发送到主机(主机正在使用 netcat 侦听):
HOSTIP="192.168.1.100"
PORT="62514"
nc -v -l $PORT > mpv &
sleep 1
sudo docker run ubuntu:14.04 /bin/bash -c "\
sed -i -e 's/# deb/deb/g' /etc/apt/sources.list; \
cat /etc/apt/sources.list; \
apt-get update; \
apt-get install --yes --force-yes git python-minimal; \
git clone https://github.com/mpv-player/mpv-build.git; \
cd mpv-build/; \
./update; \
apt-get install --yes --force-yes devscripts equivs; \
rm -f mpv-build-deps_*_*.deb; \
mk-build-deps -i -t \"apt-get --yes --force-yes --no-install-recommends\"; \
./build …Run Code Online (Sandbox Code Playgroud) 我的目标是为我的每个 docker 容器拥有一个可路由的公共 IPv6 地址。我希望能够使用 IPv6 协议连接进出我的容器。
我正在使用 Linode 并且我被分配了一个公共 IPv6 池:
2600:3c01:e000:00e2:: / 64 routed to 2600:3c01::f03c:91ff:feae:d7d7
Run Code Online (Sandbox Code Playgroud)
该“路由到”地址是由 dhcp 自动配置的:
# ip -6 addr show eth0
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
inet6 2600:3c01::f03c:91ff:feae:d7d7/64 scope global mngtmpaddr dynamic
valid_lft 2591987sec preferred_lft 604787sec
inet6 fe80::f03c:91ff:feae:d7d7/64 scope link
valid_lft forever preferred_lft forever
Run Code Online (Sandbox Code Playgroud)
我设置了 AAAA 记录,ipv6.daaku.org以便更轻松地使用:
# nslookup -q=AAAA ipv6.daaku.org
ipv6.daaku.org has AAAA address 2600:3c01:e000:e2::1
Run Code Online (Sandbox Code Playgroud)
为了测试,我手动分配了该地址:
# ip -6 addr add 2600:3c01:e000:00e2::1/64 dev eth0
# ip -6 addr show …Run Code Online (Sandbox Code Playgroud) 官方 nginx docker镜像 ( Dockerfile ) 使用以下技巧将其日志传递到 stdout 和 stderr,以便它们被 docker 日志收集器捕获并使用docker logs <container-name>以下命令查看:
# forward request and error logs to docker log collector
RUN ln -sf /dev/stdout /var/log/nginx/access.log
RUN ln -sf /dev/stderr /var/log/nginx/error.log
Run Code Online (Sandbox Code Playgroud)
我想这样做,但我已经supervisord为PID 1我的容器,它监督nginx的过程,并捕获输出和错误,并把它放在它自己的日志文件。因此日志不会到达 docker 日志收集器。
这是我的 supervisord.conf 中的相关块
[program:nginx]
command=/usr/sbin/nginx -g "daemon off;"
priority=990
; NOTE: We do not want to redirect stdout and stderr of a nginx process to a logfile because we want docker log collector to get them.
stdout_logfile= …Run Code Online (Sandbox Code Playgroud) 这个有点理论性,但请耐心等待。
目前我有一个服务器运行几个 Docker 容器(4 个或 5 个,取决于日期和时间)。我计划添加另一个,就像第一个一样,甚至可能是第三个。
现在,我的问题是:我应该管理 15 个容器而不是 5 个,使用 Google Kubernetes 有什么好处吗?
此外,是否有“官方”或至少“确定性”的工作流程可以从 Docker 容器迁移到 Kubernetes 的本机单元“pods”。在你问之前,我确实知道 pod 是由容器组成的(有时甚至是一个)。我的主要问题是“dockerfiles”与 pod 配置完全不同。
有任何想法吗?
我有一个带有两个容器的 docker-compose.yml 文件:
containerA:
...
ports:
- "80:9000"
containerB:
...
links:
- containerA
Run Code Online (Sandbox Code Playgroud)
我所期待的是有一个containerA从可达80端口containerB,但它只能通过端口号为9000的唯一可见的80端口从主机的访问。
有没有办法让容器的containerA9000 端口可以通过 80 端口访问它所链接的所有容器,而不仅仅是主机?
我读过容器化比虚拟化便宜;我知道容器化使用的资源比虚拟化少,因为只涉及一个操作系统,没有虚拟化硬件。
但是我是否需要一个支持虚拟化的 CPU 来运行 Docker 等容器化,或者因为它在容器中运行使用操作系统库的应用程序,我可以在没有虚拟化的情况下在 CPU 上运行它吗?
我们有一个 Jenkins CI 服务器,它从 Git 获取我们的代码,构建它,制作一个 Docker 镜像,然后将它发送到一些生产服务器。
我们的项目主要是用 Python 编写的,所以“构建”涉及运行
pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)
效果很好,只是有点慢。它必须通过网络获取包,另外还必须为其中一些构建 C 库(而且“lxml”并不小!)。
在开发中,我已经成功地pip-accel用来加速这个过程。它具有相同的接口,pip但它同时缓存 Python 下载和构建的 C 代码,所以
pip-accel install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)
很快。
我想为我们的生产版本这样做,但我遇到了一些障碍。
显然,pip-accel需要一个目录来存储缓存。因为我们的 CI 服务器是运行构建的地方,所以这是放置它的合乎逻辑的地方。但是该pip install命令在一个新的 Docker 容器中运行,因此它不能只访问该服务器上的公共目录。
Docker“卷”似乎是为与容器共享目录而设计的,但我们的构建发生在内部(令人惊讶)docker build,并且只docker run允许您附加卷。您不能使用docker build.
有什么我想念的吗?如何在我docker build所在的容器之外运行并与我的主机共享缓存文件夹?
我有一个在 Docker 容器内运行的备份脚本,我希望它在磁盘使用率低时向我发送电子邮件。
这是脚本:
#!/bin/bash
CURRENT=$(df /data | grep / | awk '{ print $5}' | sed 's/%//g')
THRESHOLD=90
echo "$CURRENT"
if [ "$CURRENT" -gt "$THRESHOLD" ] ; then
echo "Low Disk Space Alert: ${CURRENT}% used"
mail -s 'Disk Space Alert' olalonde@gmail.com << EOF
Backup server remaining free space is critically low. Used: $CURRENT%
EOF
fi
Run Code Online (Sandbox Code Playgroud)
问题是我无法让邮件在容器内工作。这是我的 Docker 文件:
FROM ubuntu:latest
MAINTAINER olalonde@gmail.com
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && \
apt-get install -y postfix && \
apt-get install -y mailutils …Run Code Online (Sandbox Code Playgroud) 我目前正在检查不同 Docker 覆盖网络的性能(尤其是 UDP 吞吐量)。为此,我在与 Docker 覆盖网络连接的两台主机之间创建点对点连接,然后iperf在 Docker 容器内运行以检查吞吐量。我注意到每次我iperf作为客户端运行向iperf作为服务器运行的另一个容器发送数据时,客户端主机的CPU使用率达到100%。我通过运行在此处找到的以下命令获得了该结果:
top -bn1 | grep "Cpu(s)" | \
sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | \
awk '{print 100 - $1"%"}'
Run Code Online (Sandbox Code Playgroud)
因此,对我而言,吞吐量测试的限制因素似乎是主机的 CPU 容量,因为它以 100% 的速度运行并且无法产生更多流量来使网络连接饱和。我想知道这是否是一个iperf特定问题,所以我想使用不同的工具运行相同的测试,但不确定哪种替代方案最好。主机正在运行 Ubuntu。例如,我发现qperf,uperf和netpipe。
此外,更一般地说,我开始想知道吞吐量性能的瓶颈通常是什么。它不总是与CPU容量或链路带宽有关吗?哪些因素与覆盖网络没有直接关系。
这是否意味着应用程序(或覆盖网络)的吞吐量仅取决于它需要多少 CPU 周期来传输一定数量的数据以及它如何压缩它以适应它通过网络(如果这将是瓶颈)。
我正在尝试使用官方网站 ( Docker Docs )上的说明在带有 Ubuntu 14.04 的 Vagrantbox 上安装 Docker 。安装似乎有效,但之后我无法使用sudo service docker start它启动 docker 服务,它给了我以下错误消息:
start: Job failed to start
如果我尝试,docker ps -a则会收到以下错误消息:
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
内核:Linux vagrant-ubuntu-trusty-64 3.13.0-85-generic #129-Ubuntu SMP Thu Mar 17 20:50:15 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
来自 /var/log/upstart/docker.log 的相关行
Waiting for /var/run/docker.sock
Invalid value "" for flag --mtu: strconv.ParseInt: parsing "": invalid syntax
docker ×10
containers ×2
ubuntu ×2
build-server ×1
cpu-usage ×1
deployment ×1
email ×1
iperf ×1
ipv6 ×1
kubernetes ×1
logging ×1
lxc ×1
netcat ×1
nginx ×1
pip ×1
python ×1
supervisord ×1
vagrant ×1