<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>Containers on Shaowen Chen's Website</title><link>https://www.chenshaowen.com/en/tags/containers/</link><description>Recent content in Containers on Shaowen Chen's Website</description><generator>Hugo -- gohugo.io</generator><language>en</language><copyright>&amp;copy;2016 - {year}, All Rights Reserved.</copyright><lastBuildDate>Sun, 12 Jul 2026 00:00:00 +0000</lastBuildDate><sy:updatePeriod>weekly</sy:updatePeriod><atom:link href="https://www.chenshaowen.com/en/tags/containers/atom.xml" rel="self" type="application/rss+xml"/><item><title>Deploying Ceph in Containers</title><link>https://www.chenshaowen.com/en/blog/container-deploy-ceph.html</link><pubDate>Sun, 12 Jul 2026 00:00:00 +0000</pubDate><atom:modified>Sun, 12 Jul 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/container-deploy-ceph.html</guid><description>This article covers single-node validation and three-node production deployment with cephadm. For architecture, operations, and functional testing, see Ceph Architecture and Operations. 1. Disk Preparation An OSD can only use a block device (/dev/sdX, a partition, /dev/loopN). 1.1 Inspecting Available Devices 1 2 3 4 5 6 7 lsblk -o</description><dc:creator>微信公众号</dc:creator><category>Middleware</category><category>Containers</category><category>Ceph</category><category>Storage</category><category>Operations</category></item><item><title>Ceph Architecture and Operations</title><link>https://www.chenshaowen.com/en/blog/container-deploy-ceph-architecture-operations-and-testing.html</link><pubDate>Sat, 11 Jul 2026 00:00:00 +0000</pubDate><atom:modified>Sat, 11 Jul 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/container-deploy-ceph-architecture-operations-and-testing.html</guid><description>Ceph is a unified distributed storage system that supports block storage (RBD), object storage (RGW), and file storage (CephFS). The official cephadm can orchestrate each daemon as a container (Docker, or Podman + Containerd); see Deploying Ceph in Containers for details.
1. Architecture 1.1 Topology and Data Paths The diagram below shows a common five-node topology (3 MON + 2 MGR + 5 OSD): MONs only need to come in odd numbers, and in a five-node deployment 3 is enough (tolerating one MON failure); 5 MONs tolerate 2 failures, but the metadata overhead is larger, so there is generally no need to run a MON on every machine.</description><dc:creator>微信公众号</dc:creator><category>Middleware</category><category>Containers</category><category>Ceph</category><category>Storage</category><category>Operations</category><category>Architecture</category></item><item><title>Deploying VictoriaMetrics in Containers</title><link>https://www.chenshaowen.com/en/blog/container-deploy-victoriametrics.html</link><pubDate>Sat, 11 Jul 2026 00:00:00 +0000</pubDate><atom:modified>Sat, 11 Jul 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/container-deploy-victoriametrics.html</guid><description>VictoriaMetrics (VM for short) is a time-series database compatible with the Prometheus ecosystem. It uses fewer resources than Prometheus and comes in both single-node and cluster editions. The single-node edition can directly replace Prometheus storage; the cluster edition splits reads, writes, and storage across vmstorage / vminsert / vmselect, giving it stronger horizontal scaling.</description><dc:creator>微信公众号</dc:creator><category>Middleware</category><category>Containers</category><category>VictoriaMetrics</category><category>Prometheus</category><category>Monitoring</category><category>Operations</category></item><item><title>Deploying Hermes Agent in Containers</title><link>https://www.chenshaowen.com/en/blog/deploy-hermes-agent-under-containers.html</link><pubDate>Sun, 19 Apr 2026 00:00:00 +0000</pubDate><atom:modified>Sun, 19 Apr 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/deploy-hermes-agent-under-containers.html</guid><description>1. Starting the Container Set the image 1 export IMAGE=nousresearch/hermes-agent:v2026.6.5 Set directory permissions 1 2 mkdir -p hermes-agent-home chmod -R 777 hermes-agent-home Set environment variables 1 2 3 cat &amp;lt;&amp;lt;EOF &amp;gt; hermes-agent-home/.env GATEWAY_ALLOW_ALL_USERS=true EOF Start hermes-agent 1 2 3 4 5 6 7 8 9 10 nerdctl run -d \</description><dc:creator>微信公众号</dc:creator><category>Hermes</category><category>AI</category><category>Containers</category><category>Docker</category><category>Operations</category><category>Agent</category></item><item><title>Deploying OpenClaw in Containers</title><link>https://www.chenshaowen.com/en/blog/deploy-openclaw-under-containers.html</link><pubDate>Wed, 04 Mar 2026 00:00:00 +0000</pubDate><atom:modified>Wed, 04 Mar 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/deploy-openclaw-under-containers.html</guid><description>1. Start the Container Set the image 1 export IMAGE=ghcr.io/openclaw/openclaw:2026.3.2 Generate a random token 1 openssl rand -hex 32 Set the gateway token 1 export OPENCLAW_GATEWAY_TOKEN=xxx This token is used for authentication on both the remote web UI and the local TUI. Set directory permissions 1 2 mkdir -p openclaw-home</description><dc:creator>微信公众号</dc:creator><category>OpenClaw</category><category>AI</category><category>Containers</category><category>Docker</category><category>Operations</category><category>Agent</category></item><item><title>Deploying ClickHouse in Containers</title><link>https://www.chenshaowen.com/en/blog/container-deploy-clickhouse.html</link><pubDate>Wed, 11 Feb 2026 00:00:00 +0000</pubDate><atom:modified>Wed, 11 Feb 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/container-deploy-clickhouse.html</guid><description>1. ClickHouse Single Node 1.1 Configure Environment Variables 1 2 3 4 5 6 7 8 export CONTAINER_CLI=nerdctl export IMAGE=clickhouse/clickhouse-server:24 export CLICKHOUSE_INSTANCE_NAME=clickhouse export CH_DATA=/data/ops/clickhouse/$CLICKHOUSE_INSTANCE_NAME export CLICKHOUSE_PORT=9000 export CLICKHOUSE_PROMETHEUS_PORT=9363 export CLICKHOUSE_USER=default export CLICKHOUSE_PASSWORD=xxxxxx 1.2 Generate the Configuration Files 1 2 3 4 5 6 7 8 9 10 11 12 13</description><dc:creator>微信公众号</dc:creator><category>Middleware</category><category>Containers</category><category>ClickHouse</category><category>Prometheus</category><category>Monitoring</category><category>Operations</category></item><item><title>Deploying Redis in Containers</title><link>https://www.chenshaowen.com/en/blog/container-deploy-redis.html</link><pubDate>Wed, 11 Feb 2026 00:00:00 +0000</pubDate><atom:modified>Wed, 11 Feb 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/container-deploy-redis.html</guid><description>1. Redis Single Instance Configure environment variables 1 2 3 4 5 6 7 8 9 export CONTAINER_CLI=nerdctl export IMAGE=redis:7 export REDIS_INSTANCE_NAME=redis-instance export REDIS_PASSWORD=xxxxxx export REDIS_PORT=6379 export REDIS_DATA=/data/ops/redis/$REDIS_INSTANCE_NAME mkdir -p $REDIS_DATA/data $REDIS_DATA/log Start the service 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 $CONTAINER_CLI run -d \ --name $REDIS_INSTANCE_NAME \ --restart always \ --security-opt apparmor=unconfined \ --security-opt seccomp=unconfined \ --network host \ --ulimit memlock=-1 \ --ulimit stack=67108864 \ --ulimit nofile=1048576:1048576 \ --memory-swappiness=0 \ -v $REDIS_DATA/data:/data \ -v $REDIS_DATA/log:/var/log/redis \ $IMAGE redis-server --port $REDIS_PORT --requirepass $REDIS_PASSWORD \ --maxmemory 64gb \ --maxmemory-policy noeviction \ --appendonly yes \ --appendfsync everysec Test the connection A PONG response means the connection succeeded</description><dc:creator>微信公众号</dc:creator><category>Middleware</category><category>Containers</category><category>Redis</category><category>Operations</category></item><item><title>Containerized Deployment of a Multi-Node FoundationDB Cluster and Operations</title><link>https://www.chenshaowen.com/en/blog/container-deploy-multi-node-foundationdb-and-maintenance.html</link><pubDate>Tue, 10 Feb 2026 00:00:00 +0000</pubDate><atom:modified>Tue, 10 Feb 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/container-deploy-multi-node-foundationdb-and-maintenance.html</guid><description>1. Generate a Cluster ID 1 cat /dev/urandom | tr -dc &amp;#39;a-zA-Z0-9&amp;#39; | fold -w 16 | head -n 1 The examples below use CLUSTER_ID=fKbIga9RHP79OIx1.
2. On the First Node Configure environment variables 1 2 3 4 5 6 7 8 9 10 export CONTAINER_CLI=nerdctl export IMAGE=foundationdb/foundationdb:7.1.26 export CLUSTER_ID=fKbIga9RHP79OIx1 export FDB_INSTANCE_NAME=fdb_server export FDB_CLUSTER_FIRST_IP=$(hostname -I | awk &amp;#39;{print $1}&amp;#39;) export FDB_PUBLIC_IP=$(hostname -I | awk &amp;#39;{print $1}&amp;#39;) export FDB_PORT=4500 export FDB_DIR=/data/ops/fdb/$FDB_INSTANCE_NAME Clean up old data 1 2 3 $CONTAINER_CLI rm -f $FDB_INSTANCE_NAME mv $FDB_DIR $FDB_DIR.</description><dc:creator>微信公众号</dc:creator><category>FoundationDB</category><category>Database</category><category>Middleware</category><category>Storage</category><category>Containers</category><category>3FS</category><category>Operations</category></item><item><title>Deploying the DeepSeek 3FS Storage System in Containers</title><link>https://www.chenshaowen.com/en/blog/deploy-deepseek-3fs-storage-system-under-containers.html</link><pubDate>Sat, 15 Mar 2025 00:00:00 +0000</pubDate><atom:modified>Sat, 15 Mar 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/deploy-deepseek-3fs-storage-system-under-containers.html</guid><description>1. Deployment Plan Before starting the containerized deployment, a few requirements:
To simplify delivery, only one image is needed For reliability, deploy as many replicas as possible Start different services through different parameters Inject configuration through environment variables and render it into configuration files Below is the deployment plan for DeepSeek 3FS:</description><dc:creator>微信公众号</dc:creator><category>Storage</category><category>AI</category><category>Containers</category><category>Kubernetes</category><category>Docker</category><category>Operations</category><category>LLM</category><category>3FS</category></item><item><title>Training a Model on the MNIST Dataset with PyTorch</title><link>https://www.chenshaowen.com/en/blog/using-pytorch-to-train-model-on-mnist-dataset.html</link><pubDate>Sat, 16 Nov 2024 00:00:00 +0000</pubDate><atom:modified>Sat, 16 Nov 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/using-pytorch-to-train-model-on-mnist-dataset.html</guid><description>1. Create the Training Script Create a training script mnist.py with the following contents: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36</description><dc:creator>微信公众号</dc:creator><category>AI</category><category>PyTorch</category><category>Training</category><category>Containers</category></item><item><title>Common AI Base Images and Startup Commands</title><link>https://www.chenshaowen.com/en/blog/common-ai-base-images-and-run-command.html</link><pubDate>Thu, 28 Mar 2024 00:01:00 +0000</pubDate><atom:modified>Thu, 28 Mar 2024 00:01:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/common-ai-base-images-and-run-command.html</guid><description>1. What the Image Tag Suffixes Mean base/cuda: includes the CUDA runtime
runtime: builds on base, adding the CUDA math libraries and the NCCL and cuDNN runtimes
devel: builds on runtime, adding headers and the development tools used to build CUDA images; particularly useful for multi-stage builds
cuddn: builds on the above, adding the cuDNN neural network acceleration library</description><dc:creator>微信公众号</dc:creator><category>AI</category><category>Images</category><category>Containers</category><category>Docker</category><category>GPU</category><category>LLM</category><category>Operations</category><category>R&amp;D</category></item><item><title>Large Model Inference with Triton Server and TensorRT-LLM in a Container</title><link>https://www.chenshaowen.com/en/blog/using-triton-server-and-tensorrt-llm-under-container.html</link><pubDate>Sat, 03 Feb 2024 08:05:48 +0000</pubDate><atom:modified>Sat, 03 Feb 2024 08:05:48 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/using-triton-server-and-tensorrt-llm-under-container.html</guid><description>1. Compiling Models with TensorRT-LLM 1.1 Introduction to TensorRT-LLM When using TensorRT, you usually need to convert the model to ONNX format, then convert the ONNX to TensorRT format, and finally run inference in TensorRT or Triton Server. But this conversion process is not simple, and you often run into</description><dc:creator>微信公众号</dc:creator><category>AI</category><category>Triton</category><category>TensorRT</category><category>LLM</category><category>Inference</category><category>GPU</category><category>Operations</category><category>Containers</category><category>Learning</category></item><item><title>Run mv Is Slower Than cp in a Dockerfile</title><link>https://www.chenshaowen.com/en/blog/run-mv-is-slower-than-cp-in-dockerfile.html</link><pubDate>Mon, 30 Jan 2023 00:00:00 +0000</pubDate><atom:modified>Mon, 30 Jan 2023 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/run-mv-is-slower-than-cp-in-dockerfile.html</guid><description>Unlike on CentOS or Ubuntu, where we feel that mv is faster than cp, when you build an image with a Dockerfile, using Run cp is faster than Run mv. This post presents the test and verification data behind that.
1. Test Setup Machine environment Ubuntu 20.04.1 LTS
32C</description><dc:creator>微信公众号</dc:creator><category>Docker</category><category>Containers</category><category>CICD</category><category>Images</category><category>Operations</category></item><item><title>Can /var/lib/docker Be Mounted on Remote Storage?</title><link>https://www.chenshaowen.com/en/blog/can-we-mount-var-lib-docker-to-remote-storage.html</link><pubDate>Tue, 22 Jun 2021 00:00:00 +0000</pubDate><atom:modified>Tue, 22 Jun 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/can-we-mount-var-lib-docker-to-remote-storage.html</guid><description>No.
1. Background When building a reliable, stable operations system on top of Kubernetes, destroying and creating virtual machines (VMs) is the norm. VMs provide compute and memory resources, while external storage is exposed to PVCs in the cluster through a StorageClass.
Against this backdrop, how to initialize a VM quickly becomes a new challenge.</description><dc:creator>微信公众号</dc:creator><category>Docker</category><category>Containers</category><category>Storage</category><category>Kubernetes</category><category>Can We</category></item><item><title>How to Set Up a Private Registry Mirror</title><link>https://www.chenshaowen.com/en/blog/how-to-run-a-private-registry-mirror.html</link><pubDate>Thu, 29 Apr 2021 00:00:00 +0000</pubDate><atom:modified>Thu, 29 Apr 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-run-a-private-registry-mirror.html</guid><description>A Docker mirror can only accelerate images from docker.io, not images from private registries.
1. Why You Need a Private Registry Mirror Rate limiting on the public network Docker Hub pull rate limits Reduce image pull time 2. Create a Registry Image Acceleration Service Generate a configuration file version: 0.</description><dc:creator>微信公众号</dc:creator><category>Docker</category><category>Containers</category><category>Images</category><category>Operations</category><category>Registry</category><category>Acceleration</category></item><item><title>An Old Tree Blooms Anew - Cloud Native Buildpacks</title><link>https://www.chenshaowen.com/en/blog/a-sample-intro-to-cloud-native-buildpacks.html</link><pubDate>Fri, 05 Feb 2021 00:00:00 +0000</pubDate><atom:modified>Fri, 05 Feb 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/a-sample-intro-to-cloud-native-buildpacks.html</guid><description>1. Buildpacks, an Old Tree Blooms Anew The Buildpacks project was first started by Heroku in 2011 and was widely adopted by PaaS platforms such as Cloud Foundry. In an earlier document, Buildpack for PaaS Deployment, I demonstrated how to deploy a Django application to Heroku.
The shortcoming of Buildpacks was that the artifact it produced was in Droplet format, which could not be adapted directly to container platforms.</description><dc:creator>微信公众号</dc:creator><category>DevOps</category><category>Buildpack</category><category>Containers</category><category>Images</category></item><item><title>How to Debug a Container on the Host and Operate the Host from Inside a Container</title><link>https://www.chenshaowen.com/en/blog/operate-host-in-container-and-debug-container-on-host.html</link><pubDate>Mon, 11 Jan 2021 00:00:00 +0000</pubDate><atom:modified>Mon, 11 Jan 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/operate-host-in-container-and-debug-container-on-host.html</guid><description>1. A Strange Requirement My boss had a strange requirement: use a single kubeconfig file to fetch all kinds of host status information, such as the process list and process states.
My first reaction was that he must not understand containers — how could anyone use them that way, and if you were going to use them that way, why use containers at all?</description><dc:creator>微信公众号</dc:creator><category>Containers</category><category>Security</category><category>Kubernetes</category><category>Docker</category><category>Operations</category></item><item><title>How to Use Docker in Docker</title><link>https://www.chenshaowen.com/en/blog/how-to-use-docker-in-docker.html</link><pubDate>Sat, 21 Nov 2020 00:00:00 +0000</pubDate><atom:modified>Sat, 21 Nov 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-use-docker-in-docker.html</guid><description>1. Typical Use Cases In CI, there is usually a CI Engine responsible for parsing the pipeline and controlling the whole build process, while the actual build is delegated to an Agent. Jenkins and GitLab both work this way.
As shown below, there are many kinds of Agents that connect to the CI Engine.</description><dc:creator>微信公众号</dc:creator><category>Docker</category><category>Kubernetes</category><category>Containers</category><category>CI</category><category>CICD</category><category>Operations</category><category>Learning</category><category>DinD</category><category>Build</category><category>Jenkins</category></item><item><title>How to Integrate Kata into a Kubernetes Cluster</title><link>https://www.chenshaowen.com/en/blog/how-to-integrate-kata-in-kubernetes-cluster.html</link><pubDate>Sun, 30 Aug 2020 00:00:00 +0000</pubDate><atom:modified>Sun, 30 Aug 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-integrate-kata-in-kubernetes-cluster.html</guid><description>1. What Problem Kata Solves Security and isolation are what make Kata Container stand out from Docker Container.
Kata Container comes from the merger of the Intel Clear Containers and Hyper runV projects. Intel Clear Containers used Intel VT-x technology to provide containers through lightweight virtual machines, solving the security problem while delivering excellent performance.</description><dc:creator>微信公众号</dc:creator><category>Kubernetes</category><category>Kata</category><category>Containers</category><category>Security</category><category>Operations</category><category>Virtualization</category></item><item><title>Image Management Tool -- Harbor</title><link>https://www.chenshaowen.com/en/blog/an-enterprise-class-registry-of-harbor.html</link><pubDate>Thu, 12 Sep 2019 00:00:00 +0000</pubDate><atom:modified>Thu, 12 Sep 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/an-enterprise-class-registry-of-harbor.html</guid><description>1. Requirements for Building Harbor Harbor hardware requirements:
CPU, at least 2 cores, 4 cores is better Mem, at least 4 GB, 8 GB is better Disk, at least 40 GB, 160 GB is better Docker version requirements:
17.06.0 or later To build Harbor on Kubernetes, you can refer to the documentation, Building Harbor with Helm.</description><dc:creator>微信公众号</dc:creator><category>Harbor</category><category>Images</category><category>Containers</category><category>Kubernetes</category><category>Operations</category></item><item><title>Docker Operations Practices</title><link>https://www.chenshaowen.com/en/blog/docker-operations-practices.html</link><pubDate>Sat, 24 Nov 2018 00:00:00 +0000</pubDate><atom:modified>Sat, 24 Nov 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/docker-operations-practices.html</guid><description>Compiled from the &amp;ldquo;Development Tips&amp;rdquo; series, a roundup of common problems and solutions in Docker usage and operations. 1. Basic Docker Machine Commands Create the my-vm-name virtual machine 1 docker-machine create --driver virtualbox my-vm-name List all docker-machine instances 1 2 3 4 docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM</description><dc:creator>微信公众号</dc:creator><category>Docker</category><category>Operations</category><category>R&amp;D</category><category>Containers</category></item><item><title>Docker Basics</title><link>https://www.chenshaowen.com/en/blog/basis-of-docker.html</link><pubDate>Fri, 28 Jul 2017 15:30:00 +0000</pubDate><atom:modified>Fri, 28 Jul 2017 15:30:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/basis-of-docker.html</guid><description>1. What Docker Is Docker was born in early 2013 as a side project inside dotCloud (the former name of Docker Inc.). Its source code is hosted on GitHub, it is written in Go, and it follows the Apache 2.0 open-source license.
The goal of the Docker project is to provide a lightweight operating system virtualization solution.</description><dc:creator>微信公众号</dc:creator><category>PaaS</category><category>DevOps</category><category>Docker</category><category>Containers</category><category>Learning</category></item></channel></rss>