前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >打造超级富容器开发环境(九):在容器内构建镜像

打造超级富容器开发环境(九):在容器内构建镜像

原创
作者头像
imroc
发布2024-06-15 11:48:11
730
发布2024-06-15 11:48:11
举报

概述

在富容器中的日常开发中,还可能涉及构建容器,还有就是富容器自身也需要实现自举,即在富容器内编译自己的新版本镜像。本文将介绍如何实现在容器内编译容器。

使用 nerdctl 构建镜像

如果是在容器内编译 devcontainer 自身的镜像,可以用 nerdctl 替代 docker 命令来编译,编译时指定 buildkit 的 unix 套接字地址:

代码语言:bash
复制
nerdctl build --buildkit-host=unix:///host/run/buildkit/buildkitd.sock -t your.registry.com/private/devcontainer:latest .

buildkit 的 unix 套接字地址默认是 /run/buildkit/buildkitd.sock,但 buildkitd 是运行在宿主机上的,容器内并没有这个文件。而容器内可以将宿主机的根路径挂载到容器内的 /host,所以这里指定 buildkitd 的 unix 套接字地址为 unix:///host/run/buildkit/buildkitd.sock

nerdctl 配置文件

平时使用 nerdctl 查看容器和镜像时,我们往往希望是看到的是 k3s 里用到的镜像和容器列表,我们可以给 nerdctl 配置默认的 namespace 和运行时 unix 套接字地址来实现。

nerdctl 的配置文件路径是 /etc/nerdctl/nerdctl.toml,配置格式参考 官网文档

配置方法:

代码语言:toml
复制
address        = "unix:///host/run/k3s/containerd/containerd.sock"
namespace      = "k8s.io"

使用 docker 构建镜像

有时候我们也需要用 docker 来构建镜像(很多开源项目中依赖这个),我们可以将容器内安装的 docker 命令放到 PATH 之外的目录,如 /bins/docker,然后再写个名为 docker 的脚本文件放到 /usr/local/bin/docker

代码语言:bash
复制
#!/bin/bash

/bins/docker -H unix:///host/var/run/docker.sock $@

这样就可以利用 docker 脚本调用真正的 docker 命令,自动加上 dockerd 的 unix 的套接字地址,该地址指向宿主机上的 docker.sock 文件。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • 使用 nerdctl 构建镜像
  • nerdctl 配置文件
  • 使用 docker 构建镜像
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档