news 2026/10/24 8:33:01

rock image (by quqi99)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
rock image (by quqi99)

作者:张华 发表于:2025-12-30
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明

docker image

cat << EOF |tee app.py from flask import Flask import os app = Flask(__name__) @app.route('/') def hello(): greeting = os.environ.get("GREETING", "Hello") return f"{greeting} from the container!" if __name__ == '__main__': app.run(host='0.0.0.0', port=8080) EOF cat << EOF |tee Dockerfile FROM ubuntu:24.04 RUN apt update \ && apt install --yes --no-install-recommends python3 python3-pip \ && rm -rf /var/lib/apt/lists/* WORKDIR /app COPY requirements.txt . COPY app.py . RUN pip3 install -r requirements.txt --root / ENV GREETING="Hello Docker" ENV PORT=8080 EXPOSE \$PORT CMD ["python3", "app.py"] EOF cat << EOF |tee requirements.txt Flask==3.1.2 EOF sudo apt install docker.io -y sudo docker build -t hello:v1 . sudo docker run -d -p 8080:8080 --name hello hello:v1

rock image

rock image将使用Pebble来代替docker image中的CMD/ENTRYPOINT来定义services.
rock image并不是以传统 Docker image的形式存储在本地 registry 里,而是:在构建过程中,rockcraft 会使用 skopeo 从远程仓库(如 public.ecr.aws/ubuntu/ubuntu:24.04)拉取 base 镜像;然后将其转换为 OCI 格式,并临时存放在 /root/images/ 目录下(注意:这是在 rockcraft 启动的 lxc容器内部,不是你主机的 /root!);最终生成的是一个.rock 文件(类似 .snap),它是一个 squashfs 或tar压缩包,包含整个 rootfs 和元数据。

cat << EOF |tee rockcraft.yaml name: hello-rock base: ubuntu@24.04 version: "0.1" summary: hello rock description: | This is a hello rock image platforms: amd64: environment: GREETING: "Hello Rock" PORT: "8080" services: app: override: replace command: python3 usr/bin/app.py startup: enabled checks: app-check: override: replace http: url: http://localhost:8080/ parts: app: plugin: nil source: . build-packages: - python3 - python3-venv - python3-pip stage-packages: - python3 override-build: | pip install -r requirements.txt --root \${CRAFT_PART_INSTALL} install -D -m 755 app.py \${CRAFT_PART_INSTALL}/usr/bin/app.py EOF sudo snap install rockcraft --classic #rockcraft clean lxc delete --project rockcraft rockcraft-hello-rock-amd64-8520382 --force #NOTE: the domain 'cloudfront.net' has been blocked rockcraft pack ls hello-rock_0.1_amd64.rock lxc list --project rockcraft lxc exec --project rockcraft rockcraft-hello-rock-amd64-8520382 -- bash curl -v https://public.ecr.aws/v2/ curl -v https://d5l0dvt14r5h8.cloudfront.net/v2/ #/snap/rockcraft/current/bin/skopeo --insecure-policy --override-arch amd64 copy --retry-times 5 docker://public.ecr.aws/ubuntu/ubuntu:24.04 oci:/root/images/ubuntu:24.04 #/snap/rockcraft/current/bin/skopeo --insecure-policy copy docker://public.ecr.aws/ubuntu/ubuntu:24.04 oci:/tmp/test-ubuntu:24.04 $ lxc list --project rockcraft |grep -i container | base-instance-rockcraft-buildd-base-v71--8246325508671f1569c1 | STOPPED | | | CONTAINER | 0 | | rockcraft-hello-rock-amd64-8520382 | STOPPED | | | CONTAINER | 0 |

在docker里测试rock image:

#tar archive can be read by skopeo $ file hello-rock_0.1_amd64.rock hello-rock_0.1_amd64.rock: POSIX tar archive sudo apt install skopeo -y sudo skopeo copy oci-archive:hello-rock_0.1_amd64.rock docker-daemon:hello-rock:0.1 sudo docker run -it --rm hello-rock:0.1 curl -v http://localhost:8080 #debug it sudo docker ps |grep rock sudo docker exec frosty_wright /usr/bin/pebble logs app sudo docker run -d -p 8080:8080 -it --rm hello-rock:0.1 curl http://localhost:8080

debug it

$ sudo docker ps |grep rock 6b09134e6413 hello-rock:0.1 "/usr/bin/pebble ent…" 3 minutes ago Up 3 minutes pensive_wozniak $ sudo docker exec -it frosty_wright ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 1233912 11520 pts/0 Ssl+ 07:29 0:00 /usr/bin/pebble enter root 16 1.1 0.2 115816 34860 pts/0 S 07:29 0:00 python3 usr/bin/app.py root 22 50.0 0.0 7888 3840 pts/1 Rs+ 07:30 0:00 ps aux #run it in the front-end without '-d' sudo docker run -p 8080:8080 -it --rm --entrypoint /bin/sh hello-rock:0.1 # python3 /usr/bin/app.py ... * Running on http://127.0.0.1:8080 Press CTRL+C to quit
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/21 1:36:22

告别手动拆分!浩辰CAD看图王批量分割超省心

还在手动拆分多图框CAD图纸&#xff1f;浩辰CAD看图王批量分割功能&#xff0c;高效破解图纸处理难题&#xff01; 一键框选自动识别标准 / 非标准图框&#xff0c;单文件可批量拆分数十上百张图纸&#xff0c;效率直接拉满。分割后自动按图名命名&#xff0c;支持自定义规则&…

作者头像 李华
网站建设 2026/10/21 16:12:15

Docker容器化AI开发:Miniconda-Python3.9镜像构建轻量CI/CD流水线

Docker容器化AI开发&#xff1a;Miniconda-Python3.9镜像构建轻量CI/CD流水线 在如今的AI研发环境中&#xff0c;一个常见的场景是&#xff1a;研究人员在本地笔记本上训练出高精度模型&#xff0c;信心满满地提交代码后&#xff0c;CI系统却报错——“ImportError: cannot imp…

作者头像 李华
网站建设 2026/10/20 13:58:28

Conda update all更新所有包的安全注意事项

Conda 全量更新的安全实践与 Miniconda-Python3.9 环境管理深度解析 在人工智能和数据科学项目中&#xff0c;一个看似简单的命令——conda update --all&#xff0c;可能成为压垮整个实验复现链条的“最后一根稻草”。你有没有遇到过这样的场景&#xff1f;几个月前跑通的训练…

作者头像 李华
网站建设 2026/10/13 12:58:38

徐开源:我为什么辞职去做独立开发者 | 掘金专访 003

距离上次掘金专访已经过去了 8 个月了。本月&#xff0c;掘金专访重新起航&#xff0c;为你寻找掘金社区中&#xff0c;那些鲜为人知的开发者的故事。这次请到的是一名独立开发者&#xff0c; 毕业不久&#xff0c;辞掉全职工作&#xff0c;成为一名独立开发者&#xff1b; 他在…

作者头像 李华