使用buildah在容器中构建镜像
背景
多年来, Kaniko一直是构建镜像的首选方案,它是谷歌专为在非特权容器内构建镜像而开发的工具,无需 Docker 守护进程。然而在 2025 年 6 月,谷歌将该代码库归档,现在它已变为只读。GitLab 也已移除 Kaniko 的相关文档,并推荐使用 Buildah 或 Podman 等替代工具。
多年来, Kaniko一直是构建镜像的首选方案,它是谷歌专为在非特权容器内构建镜像而开发的工具,无需 Docker 守护进程。然而在 2025 年 6 月,谷歌将该代码库归档,现在它已变为只读。GitLab 也已移除 Kaniko 的相关文档,并推荐使用 Buildah 或 Podman 等替代工具。
本文记录了基于docker部署最新ceph版本的多节点高可用测试详尽过程,切身体会比ceph-deploy方便得多,希望能给初次接触ceph的同学提供些许参考。
注意: 由于程序运行于容器之中,所以镜像中一般都是带有CUDA、CUDNN库的,因此只需要在docker所在的主机上安装显卡驱动即可,无需费太大力气去安装cuda、cuddn之类的东西。
harbor的官方安装指南介绍了harbor有三种安装方式,分别是在线安装、离线安装和OVA安装,本文主要采用离线安装的方式。
官方文档上面说明需要依赖Python 2.7或以上版本,Docker引擎1.10以上,还有Docker Compose 1.6.0或以上版本,openssl。
先介绍 非安全 的连接方式。
CoreOS 请使用第二种方法,其他 Linux 系统配置时选择以下两种方法之一
docker.service 中 dockerd 的 -H 参数不能与 daemon.json 中的 hosts 键值对冲突。(其他参数同理)
新建 /etc/systemd/system/docker.service.d/docker.conf 文件。
这个参考应用程序在服务器和客户端是跨平台的,这要归功于.NET Core服务能够在Linux或Windows容器上运行,具体取决于您的Docker主机,以及Xamarin用于在Android,iOS或Windows / UWP plus上运行的移动应用程序客户端Web应用程序的任何浏览器。该体系结构提出了一种面向微服务的体系结构实现,具有多个自治微服务(每个都拥有自己的数据库/ db),并在每个微服务中实现不同的方法(简单的CRUD与DDD / CQRS模式),使用Http作为客户端应用程序之间的通信协议。微服务和支持异步通信,用于基于集成事件和事件总线(轻量级消息代理,在RabbitMQ或Azure Service Bus之间进行选择,跨多个服务)进行数据更新传播。
docker调用GPU时可以明确指定用哪一张显卡,同时也可以指定数量

InfluxDB是一个开源的时序数据库,使用GO语言开发,特别适合用于处理和分析资源监控数据这种时序相关数据。而InfluxDB自带的各种特殊函数如求标准差,随机取样数据,统计数据变化比等,使数据统计和实时分析变得十分方便。在我们的容器资源监控系统中,就采用了InfluxDB存储cadvisor的监控数据。本文对InfluxDB的基本概念和一些特色功能做一个详细介绍,内容主要是翻译整理自官网文档,如有错漏,请指正。
此文档来源于Jermine的个人blog : https://jermine.vdo.pub/linux/ubuntu-16.04-reinstall-cuda/
注意 : 由于tensorflow的GPU版本依赖nvidia的cuda、cudnn库,因此一般需要包含cuda和cudnn的链接库文件,普遍做法是通过主机安装cudnn、cuda的方式。这里还有另外两种方式可以选择:
docker run --runtime=nvidia --restart=always --name tensorflow -dit -v `pwd`:/app -w /app nvidia/cuda:9.0-cudnn7-runtime-ubuntu16.04
docker exec -it tensorflow bash
Jermine@ubuntu:~$ cat > /etc/apt/sources.list
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
##测试版源
deb http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse
sudo apt-get update
# 导入环境变量
TENSORFLOW_VERSION=1.7.0
apt-get update -y && apt-get install -y --no-install-recommends python3 python3-pip protobuf-compiler;\
pip3 install --upgrade pip ;\
python3 -V && pip3 -V ;\
pip3 --no-cache-dir install setuptools ;\
pip3 --no-cache-dir install \
https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-${TENSORFLOW_VERSION}-cp35-cp35m-linux_x86_64.whl ;\
apt-get autoremove && apt-get autoclean ;\
rm -rf /var/lib/apt/lists/*
import numpy as np
np.random.seed(0)
import tensorflow as tf
import time
N,D = 6000,8000
with tf.device('/cpu:0'):
x = tf.placeholder(tf.float32)
y = tf.placeholder(tf.float32)
z = tf.placeholder(tf.float32)
a = x * y
b = a + z
c = tf.reduce_sum(b)
grad_x, grad_y, grad_z = tf.gradients(c, [x,y,z])
start_time = time.time()
with tf.Session() as sess:
values = {
x: np.random.randn(N, D),
y: np.random.randn(N, D),
z: np.random.randn(N, D),
}
out = sess.run([c, grad_x, grad_y, grad_z],
feed_dict=values)
c_val, grad_x_val, grad_y_val, grad_z_val = out
elapsed = time.time() - start_time
print(time.strftime("%H:%M:%S", time.gmtime(elapsed)))
print("exit 0")
将其存为 test_gpu_for_tensorflow.py , 使用 python3 test_gpu_for_tensorflow.py 执行结果如下: