我目前正在构建一个我想部署到 Docker 容器的应用程序。
容器将在我的服务器上运行。我希望能够在同一台服务器上运行其他应用程序,而不会增加运行的 Docker 映像的数量。
截至目前,不同的零件/容器是:
我的一般想法是每个不同的部分都应该作为一个容器运行。我担心的是,如果我要在同一台机器上运行另一个应用程序,我最终会用大量无法处理的链接图像来膨胀它。
这可以通过为每个应用程序制作一个图像来解决。这样上述服务将成为一个图像的一部分。这首先与 Docker 的整体安全性或目的冲突吗?
在一个 Docker 镜像中拥有多个服务是否与 Docker 的目的冲突?
当从一个镜像运行服务时,容器的整体安全优势会被消除吗?
我正在尝试通过 socks5 代理拉取图像。我已经在端口上启动了socks5代理,8888如下所示:
ssh -NC -D 8888 parham@***.***.**
Run Code Online (Sandbox Code Playgroud)
但是,当我这样运行时docker-compose,很明显它没有使用环境变量:
$ ALL_PROXY=socks5://127.0.0.1:8888 docker-compose up
Run Code Online (Sandbox Code Playgroud)
如何让 Docker 通过这个代理拉取镜像?
我们有一个 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
我正在将现有应用程序从在裸 EC2 实例上运行迁移到使用 ECS 的容器化设置。我有两种情况需要在容器之间共享数据。一个是存储一些静态和媒体文件的 EFS 共享,另一个是日志目录,以便我可以使用 sidecar 容器中的 Cloudwatch Logs 代理将日志推送到 Cloudwatch。
网络服务器需要能够将数据写入这两个位置,但到目前为止我还无法实现。日志目录是本地卷,归root:root. 我按照这些说明设置的 EFS 共享归1000:xfs(无用户名)所有。在这两种情况下,我的网络用户 ( www-data) 都不能写入这些位置。
如何告诉 ECS 在具有给定所有者和/或组的容器内安装卷?
我正在测试我的服务器的裸机恢复,它基本上用我的服务启动了一组 docker 容器。我从备份中恢复/etc/docker,在那里我保留了所有配置和持久卷。
然后我尝试启动其中一个容器:
root@srv-backup:/etc/docker# docker-compose --verbose -f /etc/docker/docker-compose.d/20-registry.yaml up
compose.config.config.find: Using configuration files: /etc/docker/docker-compose.d/20-registry.yaml
ERROR: compose.cli.main.main: .IOError: [Errno 2] No such file or directory: '/etc/docker/docker-compose.d/20-registry.yaml'
Run Code Online (Sandbox Code Playgroud)
然而,该文件在那里:
root@srv-backup:/# ll /etc/docker/docker-compose.d/20-registry.yaml
-rwxrwxr-x+ 1 root root 842 Jan 24 15:19 /etc/docker/docker-compose.d/20-registry.yaml*
root@srv-backup:/# cat /etc/docker/docker-compose.d/20-registry.yaml
services:
registry:
container_name: registry
image: registry
labels:
- traefik.http.routers.registry.rule=Host(`registry.example.com`)
- traefik.http.routers.registry.entryPoints=https
- traefik.http.routers.registry.tls=true
- traefik.http.routers.registry.tls.certresolver=le
- traefik.http.middlewares.lan.ipwhitelist.sourcerange=192.168.10.0/24, 192.168.20.0/24
- traefik.http.routers.registry.middlewares=lan
- traefik.enable=true
restart: unless-stopped
volumes:
- /etc/docker/container-data/registry:/var/lib/registry
version: '3'
root@srv-backup:/# file /etc/docker/container-data/registry
/etc/docker/container-data/registry: directory
Run Code Online (Sandbox Code Playgroud)
我用相对路径和完整路径尝试了各种咒语 - …
我正在尝试在 docker 容器中托管 Unifi 控制器,但除非将网络模式设置为“主机”,否则我无法采用新设备(接入点)。我遵循了几个指南并打开了此处列出的所有端口。可以管理已连接的设备并查找新设备,但采用它们会导致永无休止的“采用”状态。
第一个配置基于jacobalberty/unifi:
version: "3.7"
services:
controller:
image: jacobalberty/unifi:arm32v7
restart: unless-stopped
init: true
volumes:
- ./data:/unifi
environment:
TZ: "Europe/Stockholm"
ports:
- "3478:3478/udp"
- "5514:5514/udp"
- "8080:8080"
- "8443:8443"
- "8843:8843"
- "8880:8880"
- "6789:6789"
- "27117:27117"
- "5656-5699:5656-5699/udp"
- "1900:1900"
- "10001:10001/udp"
# network_mode: "host"
Run Code Online (Sandbox Code Playgroud)
另一个是linuxserver.io示例的直接副本:
version: "2.1"
services:
unifi-controller:
image: linuxserver/unifi-controller
container_name: unifi-controller
environment:
- PUID=1000
- PGID=1000
- MEM_LIMIT=1024M #optional
volumes:
- ./data:/config
ports:
- 3478:3478/udp
- 10001:10001/udp
- …Run Code Online (Sandbox Code Playgroud) 今天早上我在红帽(Linux 4.18.0-240.1.1.el8_3.x86_64)上的更新/升级都遇到了这个问题,不知道该怎么做。听起来像 yum 完全卡住了因为这个。
$ sudo yum update
Updating Subscription Management repositories.
Last metadata expiration check: 2:40:27 ago on Wed 16 Dec 2020 07:53:10 AM CST.
Error:
Problem: package docker-ce-3:20.10.1-3.el7.x86_64 requires containerd.io >= 1.4.1, but none of the providers can be installed
- cannot install the best update candidate for package docker-ce-3:19.03.14-3.el7.x86_64
- package containerd.io-1.4.3-3.1.el7.x86_64 is filtered out by modular filtering
(try to add '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)
Run Code Online (Sandbox Code Playgroud) docker ×10
ubuntu ×2
amazon-ecs ×1
build-server ×1
containerd ×1
containers ×1
cpu-usage ×1
deployment ×1
email ×1
iperf ×1
pip ×1
proxy ×1
python ×1
redhat ×1
socks ×1
unifi ×1
vagrant ×1
yum ×1