跳转至

OpenCloudOS 容器镜像使用指南

本指南介绍如何获取并使用 OpenCloudOS 提供的容器镜像资源,适用于开发、测试、生产等多种容器化部署场景。


1. 镜像类型概览

版本 镜像类型 提供形式 导入方式 说明
ocs23 mini rootfs.tar docker import 极简系统,仅含 dnf 和 vi,可定制构建
oc9 基础镜像(minimal、microdnf、init 等) Docker Hub / tar.xz docker pull / docker load -i 多种小型化基础镜像,支持离线或在线使用
oc9 runtime 镜像(Java、Python、PHP 等) Docker Hub docker pull 运行时环境镜像,适合快速部署应用

2. OpenCloudOS Stream 23(ocs23)

目前仅提供 mini 镜像,以 rootfs tar 包形式提供,适合自定义构建基础镜像。

下载地址

  • https://mirrors.opencloudos.tech/opencloudos-stream/releases/23/images/x86_64/

示例文件:

  • OpenCloudOS-Stream-23-20241104-mini-docker-x86_64.tar

导入镜像(使用 docker import)

docker import OpenCloudOS-Stream-23-20230301-x86_64-mini-docker.tar ocs23:latest

运行容器

docker run -it ocs23:latest /bin/bash

说明:该镜像为极简环境,仅包含 dnf 和 vi,建议进入后使用 dnf 安装所需工具。


3. OpenCloudOS 9(oc9)

OpenCloudOS Stream 9 提供多种基础镜像和 runtime 镜像,支持在线拉取或离线导入。

在线拉取镜像(Docker Hub)

Docker Hub 地址:

  • https://hub.docker.com/u/opencloudos

拉取示例:

docker pull opencloudos/oc9-minimal:latest
docker pull opencloudos/oc9-microdnf:latest
docker pull opencloudos/oc9-init:latest
docker pull opencloudos/oc9-busybox:latest
docker pull opencloudos/opencloudos9-rt-java17
docker pull opencloudos/opencloudos9-rt-python3.11
docker pull opencloudos/opencloudos9-rt-dotnet7.0
docker pull opencloudos/opencloudos9-rt-php8.2
docker pull opencloudos/opencloudos9-rt-nodejs18
docker pull opencloudos/opencloudos9-rt-static

运行示例:

docker run -it opencloudos/oc9-minimal:latest

离线导入基础镜像(tar.xz 文件)

OpenCloudOS 提供通过 docker save 导出的 .tar.xz 镜像包,可用于离线环境。

下载地址:

  • https://mirrors.opencloudos.tech/opencloudos/9/images/docker/x86_64/20250514.1/

示例文件:

  • OpenCloudOS-Container-Minimal-9.4-20250514.1.x86_64.tar.xz

导入镜像(Docker 20.10+ 支持直接加载 .tar.xz):

docker load -i OpenCloudOS-Container-Minimal-9.4-20250514.1.x86_64.tar.xz

运行容器(导入后镜像名称为 opencloudos-container-minimal-9.4-20250514.1.x86_64:latest):

docker run -it opencloudos-container-minimal-9.4-20250514.1.x86_64:latest

基础镜像

OpenCloudOS 9 提供多种小型化基础镜像,覆盖从极简 busybox 到完整 systemd 支持等多个使用场景,满足用户对镜像大小、功能、可扩展性等方面的不同需求。

可用基础镜像列表

镜像类型 镜像名称 镜像大小 镜像特点
基础镜像 opencloudos9-minimal 约 150MB 使用 dnf 作为包管理器,包含 coreutils 等常用 Linux 工具集。是功能完整的最小系统镜像,适合作为通用基础镜像使用。
opencloudos9-microdnf 约 100MB 使用轻量级 microdnf 包管理器,体积更小。不支持 dnf 的插件、历史记录等高级功能,适合对镜像大小敏感且有包管理器需求的场景。
opencloudos9-init 约 190MB 在 minimal 基础上增加 systemd,默认以 systemd 为启动进程,支持 systemctl 管理服务,适用于需要在容器中运行多个服务的场景。
opencloudos9-busybox 约 27MB 极简镜像,无包管理器,使用 busybox 替代 coreutils,适合构建工具容器、健康检查探针等对体积要求极高的场景。

镜像来源:Docker Hub
镜像前缀:docker.io/opencloudos/

基础镜像使用示例

· opencloudos9-microdnf

opencloudos9-microdnf 镜像使用 microdnf 作为包管理器,coreutils 作为 Linux 工具集,支持用户自行安装和构建其他镜像,microdnf 不依赖 python,因此容器体积极小。不依赖 python 以及对容器体积要求高的,优先考虑。

示例:以 opencloudos9-microdnf 镜像为基础镜像制作 C 程序的 builder 镜像

FROM opencloudos/opencloudos9-microdnf
RUN microdnf install -y gcc
CMD [ "/bin/bash" ]

· opencloudos9-minimal

opencloudos9-minimal 镜像使用 dnf/yum 作为包管理器,coreutils 作为 Linux 工具集,支持用户自行安装和构建其他镜像。

示例:以 opencloudos9-minimal 镜像为基础镜像制作 conda 支持软件多版本环境容器镜像

FROM opencloudos/opencloudos9-minimal
RUN yum install -y conda
CMD [ "/bin/bash" ]

· opencloudos9-init

opencloudos9-init 镜像以 systemd:/sbin/init 为1号进程,coreutils 作为 Linux 工具集,支持服务类型应用使用。镜像中为了安全考虑已经禁止登录以及 mount 特殊文件系统,并且以"37"(halt.target)作为容器stop信号。

示例:基于 opencloudos9-init 镜像部署 httpd 服务程序搭建 Web 网站

FROM opencloudos/opencloudos9-init
RUN dnf -y install httpd; dnf clean all; systemctl enable httpd;
RUN echo "Successful Web Server Test" > /var/www/html/index.html
RUN mkdir /etc/systemd/system/httpd.service.d/; echo -e '[Service]\nRestart=always' > /etc/systemd/system/httpd.service.d/httpd.conf
EXPOSE 80
CMD [ "/sbin/init" ]

注意,基于 init 镜像构建的镜像,运行时需要赋予特权模式才可运行,使用 docker 启动容器时需要增加 --privileged 参数,示例如下:

docker run -itd --privileged opencloudos9-init

· opencloudos9-busybox

opencloudos9-busybox 镜像以 busybox 作为精简 Linux 工具集,不支持包管理器,具有极小的容器体积以及 Linux 工具集的特点,满足业务对工具集和容器体积的要求。

示例:基于opencloudos9-busybox 镜像制作探测mysql服务器的容器

FROM opencloudos/opencloudos9-busybox
CMD ["sh", "-c", "until ping 192.168.90.14 -c 1 ; do echo waiting for mysql...; sleep 2; done;"]

应用 runtime 镜像

OpenCloudOS 9 提供多种轻量化的应用运行时(runtime)镜像,具备以下通用优势:

  • ✅ 更小:只包含应用运行所需的最小依赖,不包含任何不必要的系统工具或库。需要 shell 调试时,可在 runtime 镜像上叠加基础镜像(如 opencloudos9-busybox)构建 debug 镜像。
  • ✅ 更安全:镜像仅包含最小运行时环境,减少潜在攻击面,提升容器安全性。
  • ✅ 更高效:运行时镜像只加载必要组件,启动时间短,运行效率高。

可用 runtime 镜像列表

镜像名称 镜像大小 镜像特点
opencloudos9-rt-java17 约 250MB 基于 KonaJDK 构建,适用于部署 Java 17 应用,兼容性强,运行稳定。
opencloudos9-rt-python3.11 约 50MB 内置 Python 3.11 运行环境,适合运行脚本、微服务、AI 推理等场景。
opencloudos9-rt-dotnet7.0 约 130MB 支持 .NET 7.0,适合部署 ASP.NET Core 应用或 .NET CLI 工具。
opencloudos9-rt-php8.2 约 60MB 内置 PHP 8.2 运行环境,适合部署 Laravel、ThinkPHP 等 PHP Web 应用。
opencloudos9-rt-nodejs18 约 80MB 内置 Node.js 18,适合部署前端 SSR 服务、Node 后端应用等。
opencloudos9-rt-static 约 5MB 极简静态运行时,适合部署静态编译的 Go、C 应用,包含基础配置、CA 证书等。

镜像来源:Docker Hub
镜像前缀:docker.io/opencloudos/

runtime 镜像使用示例

· opencloudos9-rt-java17

分两个阶段构建一个运行 java 程序的镜像,示例如下:

  1. build-venv: 设置编译 java 代码的构建环境,并将代码编译打包成 jar 包。
  2. 输出:复制 jar 包到 runtime 镜像中,构建最终镜像。
# build-venv
FROM opencloudos/opencloudos9-microdnf AS build-env
RUN microdnf install -y java-17-konajdk-devel
COPY . /app/examples
WORKDIR /app
RUN javac examples/*.java
RUN jar cfe main.jar examples.SSLCertificateTest examples/*.class 

# final image
FROM opencloudos/opencloudos9-rt-java17
COPY --from=build-env /app /app
WORKDIR /app
CMD ["main.jar"]

· opencloudos9-rt-python3.11

没有第三方依赖的 python 应用,直接拷贝 py 代码文件到 runtime 镜像中,示例如下:

FROM opencloudos/opencloudos9-rt-python3.11
COPY . /app
WORKDIR /app
CMD ["hello.py"]

有第三方依赖的 python 应用,分三个阶段构建镜像,示例如下:
1. build: 创建可安装第三方依赖的 Python 虚拟环境,推荐使用 opencloudos9-microdnf 镜像安装 python3-virtualenv 来创建虚拟环境。
2. build-venv:在 Python 虚拟环境中使用 pip 安装 requirements.txt 中的依赖,后续 requirements.txt 变化时只需要重新构建这个阶段,而不用构建 build。
3. 输出:复制 venv 环境和代码到 runtime 镜像中,构建最终镜像。

# build
FROM opencloudos/opencloudos9-microdnf AS build
RUN microdnf install -y python3-virtualenv && \
    python3 -m venv /venv
# build-venv
# 增加此构建阶段,后续 requirements.txt 变化时只需要重新构建这个阶段,而不用构建 build
FROM build AS build-venv
COPY requirements.txt /requirements.txt
RUN /venv/bin/pip install --disable-pip-version-check -r /requirements.txt

# final image
FROM opencloudos/opencloudos9-rt-python3.11
COPY --from=build-venv /venv /venv
COPY . /app
WORKDIR /app
# 需要修改入口点为虚拟环境中的 python 解释器
ENTRYPOINT ["/venv/bin/python3", "psutil_example.py"]

build 阶段推荐使用 python3-virtualenv 创建虚拟环境而不是 conda,原因是 python3-virtualenv 创建的虚拟环境会使用系统中的基础库并且拷贝系统的 python 解释器,从而节省空间,而 conda 创建的虚拟环境则会下载独立的基础库。

· opencloudos9-rt-dotnet7.0

分两个阶段构建镜像,示例如下:
1. build-venv: 设置编译 dotnet 代码的构建环境,复制项目文件和代码,编译项目并发布。
2. 输出:复制发布的应用到 runtime 镜像中,构建最终镜像。

# build-venv
FROM opencloudos/opencloudos9-microdnf AS build-env
RUN microdnf install -y dotnet-sdk-7.0
WORKDIR /app
# 将项目文件复制到工作目录,还原依赖
COPY *.csproj .
RUN dotnet restore
# 将源代码复制到工作目录,编译项目并发布
COPY . .
RUN dotnet publish -c Release -o out

# final image
FROM opencloudos/opencloudos9-rt-dotnet7.0
COPY --from=build-env /app/out /app/
WORKDIR /app
# 设置 dotnet 应用程序为入口点
ENTRYPOINT ["/app/HttpClient"]

· opencloudos9-rt-static

opencloudos9-rt-static 提供基础文件和目录结构、基本配置、时区信息和CA证书,可适用于静态编译的各类应用,如静态编译的 C 应用,不依赖 C 库的 go 应用等。

分两个阶段构建镜像,示例如下:

  1. build-venv: 设置可以安装 go 或 gcc 依赖的构建环境,复制代码到环境中进行静态编译。
  2. 输出:复制静态编译的二进制程序到 runtime 镜像中,构建最终镜像。
# build-venv
FROM opencloudos/opencloudos9-microdnf AS build-env
RUN microdnf install -y go

WORKDIR /go/src/app
COPY . .

RUN go mod download
RUN go vet -v
RUN go test -v

RUN CGO_ENABLED=0 go build -o /go/bin/app

# final image
FROM opencloudos/opencloudos9-rt-static
COPY --from=build-env /go/bin/app /
CMD ["/app"]

· opencloudos9-rt-php8.2

没有第三方依赖的 php 应用,直接拷贝 php 代码文件到 runtime 镜像中,示例如下:

FROM opencloudos-runtime/opencloudos9-rt-php8.2
COPY . /app
WORKDIR /app
CMD ["hello.php"]
有第三方依赖的 php 应用,分两个阶段构建镜像,示例如下:

  1. build-venv:设置 php composer 安装器所需环境,并使用 composer 下载依赖。
  2. 输出:复制依赖文件和代码到 runtime 镜像中,构建最终镜像。
# build-venv
FROM opencloudos/opencloudos9-microdnf AS build-env
RUN microdnf install -y php php-cli git
WORKDIR /app
COPY . .
# 安装 composer,并使用 composer 下载所需依赖
RUN curl -sS  https://getcomposer.org/installer  | php
RUN php composer.phar update && php composer.phar install

# final image
FROM opencloudos/opencloudos9-rt-php8.2
COPY --from=build-env /app /app
WORKDIR /app
CMD ["httpclient.php"]

· opencloudos9-rt-nodejs18

分两个阶段构建镜像,示例如下:

  1. build-venv: 设置可以安装 nodejs 依赖的构建环境,复制代码到环境中并使用 npm 命令安装依赖项。
  2. 输出:复制代码和依赖性到 runtime 镜像中,构建最终镜像。
# build-venv
FROM opencloudos/opencloudos9-microdnf AS build-env
RUN microdnf install -y nodejs
COPY . /app
WORKDIR /app
RUN npm ci --omit=dev

# final image
FROM opencloudos/opencloudos9-rt-nodejs18
COPY --from=build-env /app /app

WORKDIR /app
CMD ["httpclient.js"]

使用同基础镜像调试 runtime 镜像

应用 runtime 镜像与基础镜像会一起发布,因此可以叠加相同 tag 的基础镜像来作为debug镜像。
叠加方法为在应用镜像 Dockfile 的头部添加 FROM 基础镜像,然后将基础镜像的文件复制到应用镜像中。示例如下:

FROM opencloudos/opencloudos9-microdnf AS debug

# 应用镜像构建相关内容
....
....
....

# 复制基础镜像的文件复制到应用镜像
COPY --from=debug / /

注意:为防止与应用镜像设置的应用运行相关的 CMD 或者 ENTPOINT 冲突,debug 镜像不能重新设置 CMD 或者 ENTPOINT。进入 debug 镜像启动的容器时需要手动添加诸如 "/bin/bash" 的 command。

应用 runtime 镜像设置 nonroot 用户

应用 runtime 镜像提供 root、nobody、nonroot 用户及用户组,对应用户配置如下:

/etc/passwd:

root:x:0:0:root:/root:/sbin/nologin                                        
nobody:x:65534:65534:nobody:/nonexistent:/sbin/nologin
nonroot:x:65532:65532:nonroot:/home/nonroot:/sbin/nologin
/etc/group:
root:x:0:
nobody:x:65534:
nonroot:x:65532:
runtime 镜像默认运行用户为 root,如需设置镜像的默认运行用户为 nonroot,可参考如下示例:

FROM opencloudos/opencloudos9-microdnf AS build-env
RUN microdnf install -y nodejs
COPY . /app
WORKDIR /app
RUN npm ci --omit=dev

FROM opencloudos/opencloudos9-rt-nodejs
# 设置运行用户为 nonroot
USER nonroot

# 拷贝 app 目录到 runtime 镜像 /home/nonroot ,并设置 app 目录所属用户及用户组为 nonroot
COPY --from=build-env --chown=nonroot:nonroot /app /home/nonroot/app

WORKDIR /home/nonroot/app
CMD ["httpclient.js"]

4. 注意事项

Docker 版本需要高于 20.10.9 版本。