务必label你的docker image

本文介绍了为何在Docker Image中使用LABEL的重要性,通过LABEL可以记录commit ID、编译日期等元数据,提高image的可读性和透明度。label-schema提供了一套标准,帮助创建包含丰富metadata的Docker Images,使得image独一无二。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

翻译:

https://medium.com/@chamilad/lets-make-your-docker-image-better-than-90-of-existing-ones-8b1e5de950d

让我们试想以下:

你先在正在做一个新的基于容器的项目。你几乎要完成了,现在你想要编译你的docker image并将其公开发布。 底层操作系统是linux, 然后你的工具打包入其中,最后获得了一个80Mb的包,你打上latest的tag并将其推到公共的Docker Hub。

很快,人们开始基于你的工具开始他们的工作。很酷吧。然后你解决了一些小问题,然后重新编译你的包,再次打上latest的tag并推到公共的Docker Hub。

但是这次,工具本身的工作方式发生了改变,现在的输出,文档和手册的工作方式都和以前不同。但是你又不能发布一个新的版本,因为这些改变不够重要。

你可以在你的Docker Hub界面提到latest的commit ID,但是很快就会变的特别麻烦,每个小不定都发布补丁版本更是如此。另外,这个image本身并不包含tool的任何信息。

解决以上问题的一个方法是我们可以将commit ID作为metadata包含到Docker Image本身。

试想这个场景,你想把包的内部包含证书信息,而不是存在于包的外部的文档或者博客的位置,所有可以检查这个包的工具,都可以根据它们的需求去确定其是否合适。

或者另外一个场景,当我们需要Docker image中内置无论人和机器都可读的metadata。

这就是Docker的LABEL扮演的角色。Docker的Labels允许你为Docker对象指定metadata,例如Images, containers, volumes等。

我们对如何对Docker images使用Labels非常感兴趣。

Docker labels营救营

对一个docker image指定label非常简单,使用以下指令:

LABEL <label_name>="<label_value>"

我们也可以定义一组labels去展示作者,编译日期等,如下:

FROM openjdk:jre-alpine
LABEL maintainer="dev@someproject.org"LABEL build_date="2017-09-05"
COPY tool.tar.gz /mnt
WORKDIR /mnt
RUN tar zxvf /mnt/tool.tar.gzCMD ["/mnt/tool/tool.sh"]

这个包编译完成后,docker inspect就可以提取出我们在编译时嵌入的LABEL的信息。

那么我们该如何label我们的包呢?

Labels允许我们指定metadata,它也只能干这事。接下来,我们会展示一组第三方工具可以在Image中的查看到的标准的Labels。

庆幸的是,label-schema已经作了这些。label-schema是Docker build time的一个标准的命名空间,代表了在可值入Docker Image的绝大多数的metadata。其包括:

    - build-date
    - name
    - description
    - url
    - vcs-ref
    - docker.cmd

每一个label都必须有org.label-schema的前缀,另一个必须有的label是org.label-schema.schema-version ,其值应该是1.0。想要获取commit ID,使用vcs-ref。基于相同的目的,你也可以使用build-date,如果你想获取timestamps,则可如下:

LABEL org.label-schema.build-date="2017-08-28T09:24:41Z"

我们也可以通过Bash生成date timestamp,如下:

date -u +'%Y-%m-%dT%H:%M:%SZ'

和Docker build ARGs一起使用,则build script可以将当前的current build time传入到dockerfile中。

ARG BUILD_DATELABEL org.label-schema.build-date=$BUILD_DATE
COPY tool.tar.gz /mnt
WORKDIR /mnt
RUN tar zxvf /mnt/tool.tar.gzCMD ["/mnt/tool/tool.sh"]

则我们可以使用以下命令,传入BUILD_DATA参数:

docker build --no-cache=true --build-arg BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ') -t mytool:latest .

Label你的images, 让你的image独一无二

除了我们写的以上的那些点,我们写label就像我们在READM.md文件中写How-To手册,然后在GitHub Wiki中完成手册。我们应该尽可能多的在我们的docker image中值入更多的metadata, 这样的会让我们的docker image变的更透明,更好。

让我们展示一个模版:

FROM openjdk:jre-alpine
LABEL maintainer="tryballerina@gmail.com"

# Ballerina runtime distribution filename.
ARG BALLERINA_DIST
ARG BUILD_DATE
ARG VCS_REF
ARG BUILD_VERSION

# Labels.
LABEL org.label-schema.schema-version="1.0"
LABEL org.label-schema.build-date=$BUILD_DATE
LABEL org.label-schema.name="ballerinalang/ballerina"
LABEL org.label-schema.description="Ballerina language runtime"
LABEL org.label-schema.url="http://ballerinalang.org/"
LABEL org.label-schema.vcs-url="https://github.com/ballerinalang/container-support"
LABEL org.label-schema.vcs-ref=$VCS_REF
LABEL org.label-schema.vendor="WSO2"
LABEL org.label-schema.version=$BUILD_VERSION
LABEL org.label-schema.docker.cmd="docker run -v ~/ballerina/packages:/ballerina/files -p 9090:9090 -d ballerinalang/ballerina"

 

 

 

 

 
### 安装Label Studio使用Docker 为了通过Docker安装Label Studio,需先确认已安装Node.js版本12.x或更高版本以及PostgreSQL数据库。如果尚未拥有PostgreSQL,可以考虑利用Docker来部署[^1]。 #### 准备工作 确保计算机上已经安装了Dockerdocker-compose工具。对于Windows和Mac用户来说,推荐下载并安装[Docker Desktop](https://www.docker.com/products/docker-desktop),它包含了Docker Engine、docker-compose以及其他必要的组件。Linux用户则可以根据官方文档指导完成相应设置。 #### 获取Label Studio镜像 拉取最新的Label Studio Docker镜像: ```bash docker pull heartexlabs/label-studio:latest ``` 创建一个新的目录用于保存配置文件和其他资源,并进入该目录: ```bash mkdir label-studio && cd label-studio ``` 在此处初始化一个新的`docker-compose.yml`文件,定义服务启动所需的容器和服务依赖关系: ```yaml version: '3' services: label-studio: image: heartexlabs/label-studio:latest ports: - "8080:8080" volumes: - ./data:/opt/label-studio/data environment: - LABEL_STUDIO_HOST=http://localhost:8080 ``` 上述命令会映射主机端口8080到容器内部的服务端口,并挂载当前路径下的`./data`作为持久化存储位置以便于数据管理[^2]。 #### 启动Label Studio实例 执行如下指令以基于之前准备好的YAML文件启动Label Studio应用: ```bash docker-compose up -d ``` 这将以分离模式运行指定的服务,在后台持续提供访问支持。现在应该能够通过浏览器打开http://localhost:8080地址查看正在运行中的Label Studio界面了。 #### 停止与移除容器 当不再需要此环境时,可以通过下面两条命令停止并删除所有关联的容器及其网络连接: ```bash docker-compose down ``` 以上就是完整的通过Docker安装Label Studio的过程描述。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值